《(全)面试 面试软件开发工程师 算法题 含答案.docx》由会员分享,可在线阅读,更多相关《(全)面试 面试软件开发工程师 算法题 含答案.docx(24页珍藏版)》请在优知文库上搜索。
1、面试面试软件开发工程师算法题含答案1 .编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。答:packagecn.itcast;importjava.io.File;importjava.io.FileReader;importjava.io.FiIeWriter;publicclassMainClasspublicstaticvoidmain(Stringargs)throwsExceptionFiIeManagera=newFileManager(na.txtnznewchar
2、n);FiIeManagerb=newFileManager(b.txtnewchar,n/);FiIeWriterc=newFileWriter(c.txt);StringaWord=null;StringbWord=null;while(aWord=a.nextWord()!=null)c.write(aWord+,);bWord=b.nextWord();if(bWord!=null)c.write(bWord+n);)while(bWord=b.nextWord()!=null)c.write(bWord+,);)c.close();)classFileManagerStringwor
3、ds=null;intpos=0;publicFileManager(Strigfilenamezcharseperators)throwsExceptionFilef=newFile(filename);FiIeReaderreader=newFileReader(f);charbuf=newchar(int)f.length();intIen=reader.read(buf);Stringresults=newString(bufzOJen);Stringregex=null;if(seperators.length1)regex=nn+seperators0+nn+seperatorsl
4、;elseregex=nn+seperators0;words=results.split(regex);)publicStringnextWord()if(pos=words.length)returnnull;returnwordspos+;)2 .编写一个程序,将d:java目录下的所有JaVa文件复制到d:jad目录下,并将原来文件的扩展名从JaVa改为Jad.(大家正在做上面这道题,网上迟到的朋友也请做做这道题,找工作必须能编写这些简单问题的代码!)答:IistFiIes方法接受一个FiIeFiIter对象,这个FiIeFiIter对象就是过虑的策略对象,不同的人提供不同的FiIeF
5、iIter实现,即提供了不同的过滤策略。importjava.io.File;importjava.io.FilelnputStream;importjava.io.FileOutputStream;importjava.io.FiIenameFiIter;importjava.io.IOEception;importjava.io.InputStream;importjava.io.OutputStream;publicclassJad2Javapublicstaticvoidmain(Stringargs)throwsExceptionFilesrcDir=newFile(,java);i
6、f(!(srcDir.exists()&SrcDirJsDirectoryO)thrownewEXCePtion(目录不存在”);Filefiles=srcDir.listFiles(newFilenameFilter()publicbooleanaccept(FiledirzStringname)returnname.endsWith(,.java););System.out.println(files.length);FiledestDir=newFile(,jadn);if(!destDir.exists()destDir.mkdir();for(Filefiles)FiIeInputS
7、treamfis=newFileInputStream(f);StringdestFiIeName=f.getName().replaceAII(,.javaSz,.jad);FileoutputStreamfos=newFileOutputStream(newFile(destDirzdestFileName);copy(fiszfos);fis.close();fos.close();privatestaticvoidcopy(InputStreamipszOutputStreamops)throwsExceptionintIen=0;bytebuf=newbyte1024;while(l
8、en=ips.read(buf)!=-1)ops.write(bufzOJe);)由本题总结的思想及策略模式的解析:1.classjad2java1 .得到某个目录下的所有的java文件集合1.1 得到目录FilesrcDir=newFile(d:javan);1.2 得到目录下的所有java文件:Filefiles=srcDir.listFiles(newMyFiIeFiIterQ);1.3 只想得到JaVa的文件:classMyFiIeFiIterimpIememytsFileFilterpublicbooleanaccept(Filepathname)returnpathname.get
9、Name().endsWith(,.java)2,将每个文件复制到另外一个目录,并改扩展名2.1 得到目标目录,如果目标目录不存在,则创建之2.2 根据源文件名得到目标文件名,注意要用正则表达式,注意.的转义。2.3 根据表示目录的FiIe和目标文件名的字符串,得到表示目标文件的Fileo要在硬盘中准确地创建出一个文件,需要知道文件名和文件的目录。2.4 将源文件的流拷贝成目标文件流,拷贝方法独立成为一个方法,方法的参数采用抽象流的形式。方法接受的参数类型尽量面向父类,越抽象越好,这样适应面更宽广。)分析IiStFileS方法内部的策略模式实现原理FilelistFiles(FileFilte
10、rfilter)Filefiles=IistFiIesO;/ArraylistacceptedFiIesList=newArrayList();FileacceptedFiles=newFiIeffiIesJength;intpos=0;for(Filefile:files)booleanaccepted=filter.accept(file);if(accepted)/acceptedFilesList.add(file);acceptedFilespos+=file;Arrays.copyOf(acceptedFileszpos);/retur(File)accpetedFilesList
11、.toArray();)3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如我ABC”,4,应该截取我AB”,输入我ABC汉DEF,6,应该输出我ABU,而不是我ABC+汉的半个。答:首先要了解中文字符有多种编码及各种编码的特征。假设n为要截取的字节数。publicstaticvoidmain(Stringargs)throwsExceptionStringstr=我a爱中华abc我爱传智def;StringStr=我ABC汉”;intnum=trimGBK(str.getBytes(GBK),5);System.outprintln(
12、str.substring(Oznum);publicStaticinttrimGBK(bytebufzintn)intnum=O;booleanbChineseFirstHalf=false;for(inti=0;in;i+)(if(bufi0&!bChineseFirstHalf)bChineseFirstHalf=true;elsenum+;bChineseFirstHalf=false;)returnnum;4.有一个字符串,其中包含中文字符.英文字符和数字字符,请统计和打印出各个字符的个数。答:哈哈,其实包含中文字符、英文字符、数字字符原来是出题者放的烟雾弹。Stringconten
13、t=中国aadf的Ill萨bbb菲的zz萨菲”;HashMapmap=newHashMapO;for(inti=0;icontent.length;i+)(charc=contentcharAt(i);Integernum=map.get(c);if(num=null)num=1;elsenum=num1;map.put(cznum);for(Map.EntrySetentry:map)system.out.println(entry.getkey()+entry.getValue();)估计是当初面试的那个学员表述不清楚,问题很可能是:如果一串字符如匕aaabbc中国1512”要分别统计英文
14、字符的数量,中文字符的数量,和数字字符的数量,假设字符中没有中文字符、英文字符、数字字符之外的其他特殊字符。intengishCount;intChineseCount;intdigitCount;for(inti=O;i=z0,&ch=xa,&ch=A&ch=T)(engishCount+;)else(ChineseCount+;)System.out.println();5、说明生活中遇到的二叉树,用java实现二叉树这是组合设计模式。我有很多个(假设10万个)数据要保存起来,以后还需要从保存的这些数据中检索是否存在某个数据,(我想说出二叉树的好处,该怎么说呢?那就是说别人的缺点),假如存在数组中,那么,碰巧要找的数字位于99999那个地方,那查找的速度将很慢,因为要从第1个依次往后取,取出来后进行比较。平衡二叉树(构建平衡二叉树需要先排序,我们这里就不作考虑了)可以很好地解决这个问题,但二叉树的遍历(前序,中序,后序)效率要比数组低很多,原理如下图:代码如下:packagecom.huawei.interview;p