《全面试 面试软件开发工程师 算法题 含答案.docx》由会员分享,可在线阅读,更多相关《全面试 面试软件开发工程师 算法题 含答案.docx(24页珍藏版)》请在第一文库网上搜索。
1、面试面试软件开发工程师算法题含答案1 .编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。答:packagecn.itcast;importjava.io.Fi1e;importjava.io.Fi1eReader;importjava.io.FiIeWriter;pub1icc1assMainC1asspub1icstaticvoidmain(Stringargs)throwsExceptionFiIeManagera=newFi1eManager(na.txtnznewchar
2、n);FiIeManagerb=newFi1eManager(b.txtnewchar,n/);FiIeWriterc=newFi1eWriter(c.txt);StringaWord=nu11;StringbWord=nu11;whi1e(aWord=a.nextWord()!=nu11)c.write(aWord+,);bWord=b.nextWord();if(bWord!=nu11)c.write(bWord+n);)whi1e(bWord=b.nextWord()!=nu11)c.write(bWord+,);)c.c1ose();)c1assFi1eManagerStringwor
3、ds=nu11;intpos=0;pub1icFi1eManager(Strigfi1enamezcharseperators)throwsExceptionFi1ef=newFi1e(fi1ename);FiIeReaderreader=newFi1eReader(f);charbuf=newchar(int)f.1ength();intIen=reader.read(buf);Stringresu1ts=newString(bufzOJen);Stringregex=nu11;if(seperators.1ength1)regex=nn+seperators0+nn+seperators1
4、;e1seregex=nn+seperators0;words=resu1ts.sp1it(regex);)pub1icStringnextWord()if(pos=words.1ength)returnnu11;returnwordspos+;)2 .编写一个程序,将d:java目录下的所有JaVa文件复制到d:jad目录下,并将原来文件的扩展名从JaVa改为Jad.(大家正在做上面这道题,网上迟到的朋友也请做做这道题,找工作必须能编写这些简单问题的代码!)答:IistFiIes方法接受一个FiIeFiIter对象,这个FiIeFiIter对象就是过虑的策略对象,不同的人提供不同的FiIeF
5、iIter实现,即提供了不同的过滤策略。importjava.io.Fi1e;importjava.io.Fi1e1nputStream;importjava.io.Fi1eOutputStream;importjava.io.FiIenameFiIter;importjava.io.IOEception;importjava.io.InputStream;importjava.io.OutputStream;pub1icc1assJad2Javapub1icstaticvoidmain(Stringargs)throwsExceptionFi1esrcDir=newFi1e(,java);i
6、f(!(srcDir.exists()&SrcDirJsDirectoryO)thrownewEXCePtion(目录不存在”);Fi1efi1es=srcDir.1istFi1es(newFi1enameFi1ter()pub1icboo1eanaccept(Fi1edirzStringname)returnname.endsWith(,.java););System.out.print1n(fi1es.1ength);Fi1edestDir=newFi1e(,jadn);if(!destDir.exists()destDir.mkdir();for(Fi1efi1es)FiIeInputS
7、treamfis=newFi1eInputStream(f);StringdestFiIeName=f.getName().rep1aceAII(,.javaSz,.jad);Fi1eoutputStreamfos=newFi1eOutputStream(newFi1e(destDirzdestFi1eName);copy(fiszfos);fis.c1ose();fos.c1ose();privatestaticvoidcopy(InputStreamipszOutputStreamops)throwsExceptionintIen=0;bytebuf=newbyte1024;whi1e(1
8、en=ips.read(buf)!=-1)ops.write(bufzOJe);)由本题总结的思想及策略模式的解析:1.c1assjad2java1 .得到某个目录下的所有的java文件集合1.1 得到目录Fi1esrcDir=newFi1e(d:javan);1.2 得到目录下的所有java文件:Fi1efi1es=srcDir.1istFi1es(newMyFiIeFiIterQ);1.3 只想得到JaVa的文件:c1assMyFiIeFiIterimpIememytsFi1eFi1terpub1icboo1eanaccept(Fi1epathname)returnpathname.get
9、Name().endsWith(,.java)2,将每个文件复制到另外一个目录,并改扩展名2.1 得到目标目录,如果目标目录不存在,则创建之2.2 根据源文件名得到目标文件名,注意要用正则表达式,注意.的转义。2.3 根据表示目录的FiIe和目标文件名的字符串,得到表示目标文件的Fi1eo要在硬盘中准确地创建出一个文件,需要知道文件名和文件的目录。2.4 将源文件的流拷贝成目标文件流,拷贝方法独立成为一个方法,方法的参数采用抽象流的形式。方法接受的参数类型尽量面向父类,越抽象越好,这样适应面更宽广。)分析IiStFi1eS方法内部的策略模式实现原理Fi1e1istFi1es(Fi1eFi1te
10、rfi1ter)Fi1efi1es=IistFiIesO;/Array1istacceptedFiIes1ist=newArray1ist();Fi1eacceptedFi1es=newFiIeffiIesJength;intpos=0;for(Fi1efi1e:fi1es)boo1eanaccepted=fi1ter.accept(fi1e);if(accepted)/acceptedFi1es1ist.add(fi1e);acceptedFi1espos+=fi1e;Arrays.copyOf(acceptedFi1eszpos);/retur(Fi1e)accpetedFi1es1ist
11、.toArray();)3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如我ABC”,4,应该截取我AB”,输入我ABC汉DEF,6,应该输出我ABU,而不是我ABC+汉的半个。答:首先要了解中文字符有多种编码及各种编码的特征。假设n为要截取的字节数。pub1icstaticvoidmain(Stringargs)throwsExceptionStringstr=我a爱中华abc我爱传智def;StringStr=我ABC汉”;intnum=trimGBK(str.getBytes(GBK),5);System.outprint1n(
12、str.substring(Oznum);pub1icStaticinttrimGBK(bytebufzintn)intnum=O;boo1eanbChineseFirstHa1f=fa1se;for(inti=0;in;i+)(if(bufi0&!bChineseFirstHa1f)bChineseFirstHa1f=true;e1senum+;bChineseFirstHa1f=fa1se;)returnnum;4.有一个字符串,其中包含中文字符.英文字符和数字字符,请统计和打印出各个字符的个数。答:哈哈,其实包含中文字符、英文字符、数字字符原来是出题者放的烟雾弹。Stringconten
13、t=中国aadf的I11萨bbb菲的zz萨菲”;HashMapmap=newHashMapO;for(inti=0;icontent.1ength;i+)(charc=contentcharAt(i);Integernum=map.get(c);if(num=nu11)num=1;e1senum=num1;map.put(cznum);for(Map.EntrySetentry:map)system.out.print1n(entry.getkey()+entry.getVa1ue();)估计是当初面试的那个学员表述不清楚,问题很可能是:如果一串字符如匕aaabbc中国1512”要分别统计英文
14、字符的数量,中文字符的数量,和数字字符的数量,假设字符中没有中文字符、英文字符、数字字符之外的其他特殊字符。intengishCount;intChineseCount;intdigitCount;for(inti=O;i=z0,&ch=xa,&ch=A&ch=T)(engishCount+;)e1se(ChineseCount+;)System.out.print1n();5、说明生活中遇到的二叉树,用java实现二叉树这是组合设计模式。我有很多个(假设10万个)数据要保存起来,以后还需要从保存的这些数据中检索是否存在某个数据,(我想说出二叉树的好处,该怎么说呢?那就是说别人的缺点),假如存在数组中,那么,碰巧要找的数字位于99999那个地方,那查找的速度将很慢,因为要从第1个依次往后取,取出来后进行比较。平衡二叉树(构建平衡二叉树需要先排序,我们这里就不作考虑了)可以很好地解决这个问题,但二叉树的遍历(前序,中序,后序)效率要比数组低很多,原理如下图:代码如下:packagecom.huawei.interview;p