• 一道简单的编程题考核你的编程功底


    上周有位工作了3年多的程序员(一直在企业做应用开发)来面试,本来打算不安排上机编程的,但是他开出了6K的薪资要求,我还是决定考核下他的编程功底。

    刚好最近企业在做生产流程信息流对接这块的开发,我就提取出实际项目中我做过的模块,看他是怎么来实现的。

    界面截图:

    说明:

    将原始PPF路径下的所有文件搬迁到目标PPF路径下,并按照以下规则对文件进行命名。

    如果原始文件名符合格式"A B.C.D.E",则另存为"A.C.D.E"。其中A,B,C,D,E 为任意数字、字母或中文,且A中不允许包括空格,A与B之间存在空格。

    如原文件名为"03120001-1 杭州某客户0312ZS001红豆衫[a].1A.CMYK.ppf",则搬迁后文件改名为"03120001-1.1A.CMYK.ppf"。

    如果不符合格式,则不搬迁。

    最后提示搬迁了多少个文件,哪些文件无法搬迁。

    听了我的描述,问他是否对需求还有不理解的地方,在确定理解了需求之后,他说给他半小时时间。

    我心想,不久文件遍历和移动功能,以及对另存文件名的解析嘛,需要半小时吗?于是我允许他查询百度和google,允许拷贝他人代码,结果他90分钟都没能完成,更别谈我这道题要考核的目的了。

    后面的面试也只是走个形式罢了,毕竟对方来一趟也不容易。但最后的一句话深深的触动了我。我问他3-4K能接受吗?他说“我的要求还是6K,有家公司要我下周一去上班。”我内心深深的叹了一口气,真不知道那家单位怎么招人的。

    欢迎大家来猜猜我想考核哪些编程功底^_^

    补上我写的代码,欢迎交流:

    View Code
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;

    namespace Chenrl
    {
    publicpartialclass Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    privatevoid btnSend_Click(object sender, EventArgs e)
    {
    //获取工单信息
    //生成CSV文件,格式如下,保存到特定路径下:
    //印刷机名称,项目,工作,预定开始时间,预定完成时间,客户名称,项目/备注,纸张类型,总份数,交货张数,预备张数,颜色数,纸张长度,纸张宽度,纸张厚度

    }

    privatevoid btnFileMove_Click(object sender, EventArgs e)
    {
    StringBuilder msg
    =new StringBuilder();
    //msg.Append("无法处理以下文件:");
    string sppf = txtSPPF.Text;
    string tppf = txtTPPF.Text;
    string pq4 = txtPQ4.Text;
    int cl =0;
    int okcount =0;
    try
    {
    //获取文件
    string[] files = System.IO.Directory.GetFiles(sppf);
    foreach (string file in files)
    {
    //以下是对移动后的目标文件名进行处理
    //从文件名中提取到工单号:约定文件名中第一个空格之前的内容为工单号
    //保留倒数第3个.之后的内容,列如.1A.CMYK.ppf 或者 .2A.CMYK.ppf
    //如果用正则解析和处理字符串,效果更佳~~~

    //先解析出文件夹和文件名
    string path = file.Substring(0, file.LastIndexOf(@"\") +1);
    string name = file.Replace(path, "");
    string[] cfile = name.Split('.');
    cl
    = cfile.Length;
    if (cl >=4)
    {
    if (cfile[0].IndexOf('') >-1)
    {
    string tofile = tppf + cfile[0].Substring(0, cfile[0].IndexOf(''))
    +"."+ cfile[cl -3] +"."+ cfile[cl -2] +"."+ cfile[cl -1];
    if (MoveFile(file, tofile).Length ==0)
    {
    okcount
    ++;
    }
    }
    else
    {
    msg.Append(
    "\r\n");
    msg.Append(file);
    }
    }
    else
    {
    msg.Append(
    "\r\n");
    msg.Append(file);
    }
    }
    }
    catch (Exception ex)
    {
    msg.Append(
    "/r/n出现以下异常:");
    msg.Append(ex.ToString());
    }
    if (msg.ToString().Length >0)
    {
    //MessageBox.Show(msg.ToString());
    MessageBox.Show("操作完成!\r\n成功移动文件:"+ okcount +""+"\r\n无法处理以下文件:"+ msg.ToString());
    }
    else
    {
    MessageBox.Show(
    "操作完成!\r\n成功移动文件:"+ okcount+"");
    }

    //将移动失败进行记录
    }

    //移动成功返回空,失败返回原始文件路径
    privatestring MoveFile(string file, string tofile)
    {
    string msg ="";
    try
    {
    File.Move(file, tofile);
    }
    catch(Exception ex)
    {
    msg
    = file;
    MessageBox.Show(ex.ToString());
    }
    return msg;
    }


    }
    }

    作者:道无名
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    剑指offer55. 平衡二叉树
    剑指offer52. 两个链表的第一个公共节点
    LC1043. Partition Array for Maximum Sum
    剑指offer40. Top K
    剑指offer39. 数组中出现次数超过一半的数字
    剑指offer36.将BST原地转换为双向循环链表
    判断大小端
    CentOS安装RabbitMQ 3.8.9
    Nginx 413 Request Too Large 错误
    NginxPC端和移动端区分
  • 原文地址:https://www.cnblogs.com/yfyy/p/1985962.html
Copyright © 2020-2023  润新知