最近投了一些公司。然后凉了不少(每次拿C++/C我就不想说话,现在我只想安静的投Java再也不跳随便投岗了)。选择题大家都很友善,问问二叉树遍历顺序什么的,还有求求散列值之类,题目难度不大还算好应付,但是后面编程和简答题目几乎成了灾区QAQ(strcpy和sprintf的区别我:。。。。strcpy能复制字符串。。这个sprintf我。。。)当然也有勉强AC出的一些程序(大部分都是0.4、0.3之类。。捞破天际,算法值得去深究//练习的不多,那就尝试多几次。)但中间很多东西我的确忘记(操作系统如何分配内存)或者没有听说(简述PCB的作用/后来一查才发现是进程控制模块!)的,这应该是个长久更新或者会有续篇的博文吧(顺便恭喜RNG3-0小组第一)
1、字符转大写下划线
给出一个字符(题目说好像要在宏定义的时候我们通常使用_ASDA_11_SA_这样的格式),在输出的时候前后都有_且中间的.替换为_而遇到数字在之前加上下划线。小米的第一道题目。看到第一反应Replace,之后数字处理不了,AC只有0.3。当时因为做完简答没什么时间,本人比较捞的情况下也没想到什么好的解决办法,只好GG。而我现在的解决办法也十分普通:
package Test; public class Main { public static void to_Big(String str){ char a[] = str.toCharArray(); boolean flag = true; System.out.print("_"); for(int i =0;i<a.length;i++){ if(a[i]>='a'){ System.out.print((char)(a[i]-32)); flag = true; } else if(a[i]=='.'){ System.out.print("_"); flag = true; }else if(a[i]<='9'){ if(flag == true){ System.out.print("_"); flag = false; } System.out.print(a[i]); }else{ System.out.print(a[i]); flag = true; } } System.out.println("_"); // str = str.replace(".", "_"); // System.out.println("_"+str.toUpperCase()+"_"); } public static void main(String[] args) { String str0 = "atrDF.as11234d";//_ATRDF_AS_11234D_ String str1 = "aas11aa11d";//_AAS_11AA_11D_ String str2 = "sd.s11.11";//_SD_S_11__11_ to_Big(str0); to_Big(str1); to_Big(str2); } }
2、字母密码游戏
小米我觉得最简单的一道。还是没有完全正确,所以我还是决定拿出来再写下。题目是说a=1,b=2...z=26;然后你输入一串数字比如:123 则能输出a b c l x 也就是一个数字串最终得出可能的所有结果。当时这个也是AC不到一半就凉了。我还是按照原来的老套路继续去做
package Test; public class Main { public static void main(String[] args) { String str0 = "123"; String str1 = "12211"; char tki[] = { ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 'u', 'v', 'w', 'x', 'y', 'z' }; char log[] = str1.toCharArray(); for(int i =0;i<log.length;i++){ System.out.print(" "+tki[Integer.parseInt(""+log[i])] ); System.out.print(" "+tki[Integer.parseInt(""+log[i]+log[i+1])] ); } } }
而上面这个由于格式问题一直很难满AC。因为数组越界的缘故还有异常抛出,所以绝不是首选。凉的心服口服
3、数字转中文
一开始我是有想法的。可是直到做到编程五分钟DBUG两小时之后也结束了我的笔试。这个题一开始特别想用字符串处理。但是一想到位数没法控制(一个.length解决的事情也是很无语)只好放弃。但是在后来经过一番思考之后还是字符串来的简单
package Test; import java.util.Scanner; public class Main { public static void main(String[] args) { char tki[] = {' ','壹','贰','叁','肆','伍','陆','柒','捌','玖'}; char tks[] = {' ','兆','亿','万','仟','佰','拾','元','角','分'}; Scanner tp = new Scanner(System.in); double sks = tp.nextDouble(),kar; int i = (int) Math.pow(10, Double.toString(sks).length()/2+1); while(i!=0){ kar = sks; sks = sks % i; i = i/10; double cs = kar - sks; if(cs!=0){ if(cs >=100000000) System.out.print(tki[(int) (cs/100000000)]+""+tks[1]); else if(cs >=10000000) System.out.print(tki[(int) (cs/10000000)]+""+tks[4]); else if(cs >=1000000) System.out.print(tki[(int) (cs/1000000)]+""+tks[5]); else if(cs >=100000) System.out.print(tki[(int) (cs/100000)]+""+tks[6]); else if(cs >=10000) System.out.print(tki[(int) (cs/10000)]+""+tks[3]); else if(cs >=1000) System.out.print(tki[(int) (cs/1000)]+""+tks[4]); else if(cs >= 100) System.out.print(tki[(int) (cs/100)]+""+tks[5]); else if(cs >=10) System.out.print(tki[(int) (cs/10)]+""+tks[6]); else if(cs >=0) System.out.print(tki[(int) (cs)]+""+tks[7]); } } } }
最终还是头很铁的用了字符串:
package Test; import java.util.Scanner; public class Main { @SuppressWarnings("resource") public static void main(String[] args) { char tki[] = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'}; char tks[] = {' ','分','角','元','拾','佰','仟','万','亿','兆'}; Scanner tp = new Scanner(System.in); String sks = tp.next(); String log[] = sks.split("[.]"); char tk_before[] = log[0].toCharArray(); char tk_behind[] = log[1].toCharArray(); int length = tk_before.length; for(int i =0;i<tk_before.length;i++){ System.out.print(tki[Integer.parseInt(""+tk_before[i])]); if(length==9){ System.out.print(tks[8]); length --; }else if(length==8){ System.out.print(tks[6]); length--; }else if(length==7){ System.out.print(tks[5]); length--; }else if(length==6){ System.out.print(tks[4]); length--; }else if(length==5){ System.out.print(tks[7]); length--; }else if(length==4){ System.out.print(tks[6]); length--; } else if(length==3){ System.out.print(tks[5]); length--; } else if(length==2){ System.out.print(tks[4]); length--; }else if(length==1){ System.out.print(tks[3]); length--; } } String tklind; if(tk_behind[2]>5) tklind = ""+tk_behind[0]+(char)((int)(tk_behind[1]+1)); else tklind = ""+tk_behind[0]+tk_behind[1]; char tk_behinds[] = tklind.toCharArray(); length = tk_behinds.length; for(int i=0;i<tk_behinds.length;i++){ System.out.print(tki[Integer.parseInt(""+tk_behinds[i])]); if(length==2){ System.out.print(tks[2]); length--; }else if(length==1){ System.out.print(tks[1]); length--; } } } }
而问答也是惊喜满满:
TCP UDP 区别:(我含含糊糊的回答了三次握手和UDP丢包什么的,但讲真我说不全XD)
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
操作系统如何分配内存,对内存进行管理(作为补考通过的操作系统,我勉强想起有那么几个算法//具体名字也不知道XD)
浅谈操作系统对内存的管理
暂时到这,我会持续更新,我坚信我会更多次翻车的(233)
python、安全两个岗位,考虑不,考虑回邮件