去哪儿
一面
问了我的项目
我就大致介绍了一下我的项目背景,然后项目有哪些模块,我在里面负责什么模块,以及我的这个模块是如何实现的;
项目亮点
参考我的这篇文章,我自己把在面试中取到的场景题以及在书上看到的jvm调优的实例加到了我的项目里面,虽然我的项目并没有用到这些。附上文章。
也没考察我知识点,直接给出除了一道题目是英文的编程题目,题目大概是这样子:对于255.0.0.111/29这个ip地址,前29位是固定不变的,把后面的三位按照000 001 010 011 100 101 110 111 这样的格式同时加上前29位的二进制表示输出。
代码:
我自己手写了一遍,当时手写写了个大体思路,面试官也没深究,下面的代码是在刚写的,发现这题要完全写对还是挺不好写的。
1public class Main { 2 public static void main(String[] args) { 3 String str = "255.0.0.111/29"; 4 String [] strList = str.split("/"); 5 String ip = strList[0]; 6 System.out.println(ip); 7 int number = Integer.parseInt(strList[1]); 8 String [] ipList = ip.split("\\."); 9 String resultBegin = ""; 10 int number2 = 32 - number; 11 for(int i=0;i<ipList.length;i++) 12 { 13 String temp = Integer.toBinaryString(Integer.parseInt(ipList[i])); 14 if(temp.length() != 8) 15 { 16 String needzero = ""; 17 for(int j=0;j<8-temp.length();j++) 18 needzero += "0"; 19 temp = needzero + temp; 20 } 21 if(i != ipList.length-1) 22 { 23 resultBegin += temp + " ";//29 包含的 255转换后是8位 0是8位 前三个3*8 24位 24 }else { 25 resultBegin += temp.substring(0,8-number2);//5位 截取最后的111转换后的二进制表示的前几位; 26 } 27 } 28 int beginLength = resultBegin.length(); 29 int lastLength = 32 - number; 30 for(int i = 0;i<(int)Math.pow(2,number2);i++) 31 { 32 String last = Integer.toBinaryString(i); 33 if(last.length() != lastLength) 34 { 35 String needzero = ""; 36 for(int j=0;j<lastLength-last.length();j++) 37 needzero += "0"; 38 last = needzero + last; 39 } 40 System.out.println(resultBegin+last); 41 } 42 } 43}
输出
问了二分查找的思想
就是简单的二分查找思想就过去了。
栈和堆的区别
我说了栈先进后出,堆说了最大堆和最小堆的特点,以及堆如何插入,删除,这些。
问我有什么想问的?
我说如何评价我的面试表现,其实想知道能不能进入下一面,以及自己有哪方面欠缺,让面试官指点一下。
二面
聊项目
就是又和一面一样介绍了项目背景,项目难点这些。
问我爬虫中遇到javascript动态加载怎么办?
我说了可以去用谷歌浏览器右键检查看这段js请求了哪些数据,然后去构造同样的请求即可;还说了一种就是使用webdriver模拟浏览器的操作,等js完全加载出来,然后就可以了。
项目中,我的项目亮点是虚拟机内存溢出调参,然后他问我如何确定一个程序需要的最小内存,开放题。
我说可以去看这个程序中数组大小,变量的个数,以及编译的时候例如对于hashmap这种结构存在字节对齐需要额外计算,就答出了这些,这个问题不是很会,大家有什么好的回答可以评论区留言,互相学习。
问我一面面试官考察的那道手写代码题你觉得主要是考你什么?
我说考察阅读英文文献,对java语言的熟练度,会不会编程
问我网络知道吗,问了我计算机网络的七层是啥?
物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
接着问了,后来合并成4层,为啥合并?
这个当时瞎说了一通,然后网上百度了一下说是,会话层在大多数应用中很少用到,表示层几乎是空的。在数据链路层与网络层之间有很多的子层插入,每个子层有不同的功能。OSI模型将“服务”与“协议”的定义结合起来,使得参考模型变得格外复杂,将它的实现起是困难的。
问了https如何确保加密传输安全?
答了ssl的RSA握手协议的原理 第一步,Client给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。第二步,Server确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。第三步,Client确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给Server。第四步,Server使用自己的私钥,获取Client发来的随机数(即Premaster secret)。第五步,Client和Server根据约定的加密方法,使用前面的三个随机数,生成”对话密钥”(session key),用来加密接下来的整个对话过程。
聊到这里,突然又问我我项目中用到的rsa,des加密的区别
我说了rsa非对称加密,des对称加密,rsa加密效率低,des加密效率低,rsa用来加密传输密钥,des用来加密传输的大量的文本信息。
问我项目中为啥这块可以用https解决不用
我说可以
接着问我为啥不用
我说https需要证书,所以是花钱的,学生穷。。。面试官笑了。面试官说有免费的。。。哈哈。然后我说我这里老师要求用rsa des...
设计模式问了我单例模式的好处
单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。让我举一个观察者模式的例子,我把《大话数据结构》的例子说了一遍。
接着问我数据库,问我数据库主键是不是必须设置
我说,就算不人为的加主键,mysql数据库会默认给数据库加一个主键索引。
问我主键索引的原理
我说底层是地址连续存放,使用二分查找
他其实想问我B+树,然后他说那么其他索引的原理是啥
我说B+树,然后我说了B+数大致是啥
问我一个查询很慢怎么办?
我说了分库分表,加索引,order by,加的索引失效了
问我索引在哪些情况下失效
我说了 索引中模糊查询like“%100%”写错了写成了“100%”这种情况下失效。
他问我这种情况下为啥失效?
不知道,这个.。。额。。。有知道的欢迎评论区留言。
考了一个有序有重复数字的数组,找出现的最左的数的下标,[1,2,3,3,3,3,3,5,6,7]就是第一个3出现的位置,我提起笔刚写了两行,他说这个准备过吗,我说准备过,他就不让写了。。。
最后问了我最近看啥书?
我说了一些最近看的书,就完事了,让我去等酒店的一个房间等通知,然后刚坐下,就让我去hr面试了。
hr面试
hr就是和你聊聊人生理想,当时她问我有啥offer没,我说没有,去哪儿是第一家到hr面的。
然后我问了她 我这是面试通过收到offer了吗,她说是,然后我当时感觉有了个去哪儿offer保底一下没忍住笑出声了,非常开心,她看我这表现,也很满意,也没怎么叼难我,给我发了一个去哪儿的骆驼娃娃,给了我一个纸质的offer,然后就完事了。
去哪儿hr感觉不刷人,表现像个正常人就行。
结束语
感觉去哪儿效率很高,2个小时就给我发了一份纸质offer,面试环境也不错,一对一和面试官在酒店聊天。
END
推荐阅读
扫一扫
有干货