2018Java开发面经(持续更新)

不要给自己挖坑!!!不要给自己挖坑!!!不要给自己挖坑!!!如果面试官只是问你了解xxx吗,如果不是很了解,就直接说不知道,不要说知道,不然面试官深问再不知道就印象很不好!

处女面送给了头条(北京)日常实习(一面挂,视频面,持续时间一个小时,2018.3.28):

1.项目问题---针对在线考试系统
  1)数据表结构,表之间的关系,包括有几个表,每个表里面包含的字段,表之间是怎么关联的。
  2)扩展需求(我的设计里面学生每场考试只能考一次):学生反复考同一份考试,怎么查看每场考试的具体情况?
    解决办法:可以新建一个考试情况表,存储相关信息。然后根据考试情况表的id,来区分每场考试情况。即前台点击的时候,可以hidden当前的考试情况id,然后后台就可以区分了。
  3)计算和传文件时间较长,怎么处理?
2.项目问题---针对商城
  1)怎么发展成集群?集群是什么意思?
  2)订单号怎么生成?
  3)怎么实现定时关单?
  4)为什么要做购物车商城
  5)get和post分别在什么情况下使用?
3.基础
  1)mysql索引,两个关键字的索引,如果只查其中一个,是否用到索引?
  2)hashmap的时间复杂度是多少,解决冲突的办法有哪些?
    解答:时间复杂度是o(1),但要具体分析一下,因为里面还有链表的复杂度存在。
4.手撕算法
  1)传入是hashmap,嵌套多个key,怎么去除嵌套的key,还原数据。即类似{url:{url:{url:127.0.0.1}}}的数据,将最里面的数据还原。
  2)有序数组,怎么确定某一个数有多少个。(感觉想考二分查找,时间复杂度要小于o(n))
字节跳动(武汉)暑期实习(两面技术一面HR,现场面,给了口头offer拒了。持续时间技术面平均一个小时,hr十分钟,2018.6.15)
openday做了笔试题,10个单选题,两个算法题,一个设计题。
单选题内容:
1)多线程访问情况下,变量是否加锁问题。代码如下:这里需要加锁的是a和b。因为k是每个线程独有的,而a和b是共享的。
1 int a = 10;
2 public int fun() {
3     static int b = 10;
4     int k = 1;
5 }
View Code

2)操作系统LRU的计算题。

3)TCP和UDP的区别。

4)网络子网的计算,即有多少个子网,每个子网多少个主机。

5)16进制表示的两个有符号数相加,0x7FFF FFFF FFFF FFFE + 0x1000 0000 0000 0000,结果是-2。

6)堆排序的时间复杂度是o(nlgn),建堆的时间复杂度是o(n),调整堆的时间复杂度是o(lgn)。

7)排列组合问题,20分钟内一辆车经过的概率是75%,则10分钟内一辆车经过的概率是多少。

  设10分钟内一辆车经过的概率是p,则有(1-p)(1-p)+0.75=1,解得p=0.5。

8)汇编高低位怎么放置的问题。

算法题:

1.寻找数组中的峰值(比左右两个值大)。直观解法是o(n),遍历一遍找到就返回;优化解法是o(lgn),二分查找,一旦找到就返回,否则左右谁大往哪边找。

2.leetcode42题

设计题:

设计微博时间线系统,关注的人发微博后怎么实时更新到粉丝首页,尽量少的延时,下滑时翻页是怎么做到的。要求,模块设计,模块之间的协调通信。

解决:仿照微信(写扩散)。写扩散的应用:粉丝和发微博不是很多的情况。每次关注的人发微博的时候要向粉丝写入数据。所以当数据量太大的时候有可能承载不了,但是微信朋友圈是可以的。读扩散的应用?

考察:设计题没有标准答案,要注意针对不同的实际业务量有不同的分析和解决方案。

一面(五十分钟)

1.针对笔试题,一一追问解决办法。

2.TCP和UDP的区别:TCP可靠、具有拥塞控制,但是有延时、消耗资源;UDP不可靠,适用于视频通话等。

3.画出项目的整体框架图,是架构式的,系统瓶颈在哪里(图片服务没法更新、tomcat没做异步)。

二面(一个小时,TCP和UDP的问题问的很深入,起码问了有半个小时)

1.域名解析过程,IP由DNS服务器解析出来,DNS用UDP协议,HTTP的PORT默认是80,用到了TCP建立三次握手连接,数据链路层查找MAC地址用的ARP协议(但这个协议实际是网络层的)。

1.TCP和UDP深入追问,TCP是针对字节流的,UDP是针对报文的,他们的本质区别是什么?即字节流和报文在发送和接收数据方面有什么不一样的地方?TCP由于有窗口大小的限制,所以发送端发送过来的数据如果过大,不能一次性全部接收,而应该循环接收,直至全部接收;而UDP则没有这种限制,发送端发多少,接收端就可以收多少。

2.Socket编程中,发送端send两次10B的数据,接收端receive一次数据,可以接收的数据范围是多少?1B~20B。

3.MySQL索引有哪些?左前缀索引是什么样的概念?在什么样的情况下索引会失效?

4.MySQL的引擎有哪些?有什么区别?

5.redis的数据类型有哪些?各适用于什么场景?

6.Java里面的map都有哪些子集合?各有什么区别?HashMap(允许null值,非线程安全,时间复杂度是o(1)),HashTable(不允许null值,线程安全),TreeMap(有序,时间复杂度是o(lgn))。。。

8.HashMap的key是自定义的类时,为了保证key的唯一性,应该重写该类的hashCode和equals。

7.加密存储是用什么加密的?MD5是不可逆加密,可不可以用密钥加密?为什么不采用密钥加密,这种可逆加密与不可逆加密有什么区别,各有什么好处?

8.自己挖坑了。。。加密算法了解一些吗?对称加密和非对称加密。。。

9.单点登录系统的实现思路。单点登录主要解决什么样的问题?cookie不能跨域问题。你的系统中解决了什么样的跨域问题?www.mall.com和www.baidu.com这种跨域问题怎么解决?

10.写sql语句,uid,date,count分别表示学号,进图书馆的日期,进图书馆的次数,查出每个学生四月份进图书馆的总次数。select uid,sum(count) from t where 4月份 group by uid。

11.Java中的堆区和栈区有什么区别?

字节跳动(武汉)秋招(一面技术,电话面,一战和二战面头条都特别想进去,第三次的时候已经不太想进去了)

一面(2018.9.12)

1.手写栈,要求是:可适用于所有场景。

2.http有什么优点和缺点。

3.301和302状态码有什么区别。

4.积分兑换商品实际的sql操作是什么样的?说出关键的点。

数据不一致如何预防和处理。

5.取栈中的最大值,要求时间复杂度是o(1)。

6.怎么理解面向对象?多态是怎么实现的?private方法子类可不可以访问到?

18年三战头条的一些感受:

不知不觉自己竟然已经经历了四次头条的技术面,每次感觉其实都很好,每个面试官无论从态度还是技术上都是质量很高的。态度上的话,即使你问题回答不上来,他也不会对你表现出来瞧不起的态度,也不会因此不想再继续面你,而是换一个方向的问题继续问,也就是在某一个点上你不会之后,他会找其他的点来发现你的潜力,也就是说其实面试官在不断的找你可能擅长的点,对你产生一些兴趣,而且不管水平怎么样,时间一般都会控制在一个小时左右。技术上的话,每个面试官不管技术深度还是技术广度感觉都挺过关的,每一个他发问的点,都能问的比较细,有的人说是问的偏,其实我倒觉得不至于,只是他们所站的角度不一样,所以也许同样的问题,他们想知道的我们的掌握的点不一样。所以虽然最后不管怎么样自己可能都去不了也不会选择头条,但是头条的整体面试体验还是非常好的,而且也能看出来头条的整体的技术水平。其实当你跟一个公司的多个面试官聊过之后,你真的能感受出来这个公司的整体的技术功底的,因为有的面试官问出来的问题真的很浅甚至有的标准答案连他自己都不知道,其实你是能感觉出来的。所以崇尚高工资,不介意加班的话,其实头条目前来说还是很值得去的,毕竟也还处于快速发展期。

 
京东(北京)暑期实习(两面技术一面Hr,电话面,由于害怕对秋招由影响,hr还没开始我就拒掉了)

一面(2018.4.13)

1.技术方面介绍一下项目。
2.用到了redis的哪些数据结构。
2.集群是什么,怎么发展成集群的形式?
3.ngnix的conf怎么配置成集群?
4.散列表解决冲突的方式有几种?各有什么优劣,哪种最好?
5.介绍一下kmp算法。

二面(2018.4.17)

1.每个组成的作用和所处的角色,包括JDK,JRE和JVM的区别

2.在什么场景下会用到哪些集合类?

  答案:HashMap,ArrayList,HashSet等。

3.每个集合类的特性。

  答案:hashmap可以存session,hashset不允许重复值,arraylist获取列表。hashset数据是否有序。基于set的有序存储应该用什么实现,treeset。

4.重写和重载的区别以及什么时候使用。子类怎么调用父类的方法。

5.线程和进程之间的区别以及各自的优缺点以及各自的使用场景。

6.线程的状态及转换关系。

7.快排和冒泡的流程。

8.JVM的GC、分代回收等。

9.堆和栈存储的是什么?基本数据类型和字符串存在哪里?方法定义存在哪里?

  答案:堆:对象。栈:引用。

10.http请求的流程

  答案:查找本地缓存ip->DNS解析等。

11.

 

京东内推简历石沉大海了,校招放弃了面试。

 

阿里内推sdn开发实习(一面挂,每次接到电话都是晚上,2018.4.23)

1.介绍源地址验证项目。
2.用什么进行验证匹配,五元组?验证规则有优先顺序吗?
3.另一个项目主要负责了哪一部分。
3.用到了什么数据库,redis存session数据,数据过期怎么办?
4.spring怎么加载数据?
5.依赖注入是怎么回事?
6.用到了哪些注解,每个注解的作用和原理。
 
 阿里校招直接没有考虑
 
vivo秋招提前批(offer已拿,一面技术一面Hr,2018.6.5)
技术面 
1.数据库有多少种范式?每种范式都解决了什么问题?你的电商项目里用到了哪种范式?
2.linux有没有编译过c++程序,c++与java的区别是什么?
3.md5是加密算法吗,怎么进行加密的?
4.设计模式有多少种?
5.抽象类和接口的本质区别,什么时候用抽象类(模板),什么时候用接口(更抽象)?
6.在高数据量的情况,怎么实现数据控制拦截?
7.怎么确定是正常数据包还是伪造数据包?验证方式是什么?轮询。
8.单点登录跨域问题的解决。
9.ngnix做反向代理和静态加载,location的配置。
10.国内主要的交换机厂商有哪些?
11.分布式高并发,tomcat的设置使用相关。
12.http的状态码有哪些?各代表什么含义?比如200,404,405,500,301,302等。
hr面
1.自我介绍
2.兴趣爱好
3.对vivo的了解
4.家庭情况
5.工作地点要求
6.面对加班情况,女生相对于男生的优势在哪里
反问问题:新人的培训体系是什么样的。
 
 
腾讯秋招提前批(一面挂,2018.8.2)
1.介绍SDN项目。
2.如果伪造机和被伪造机连在一个交换机的一个端口上,怎么解决?
3.传统网络中数据包在链路中传输,经过交换机和路由器时,IP和MAC(包括源和目的)会变吗?
  都是外网的情况下,IP不变,MAC会变;如果是有内网NAT的情况下,IP变,MAC变。
4.IPv4协议的包头都有哪些字段?长度和首部长度都包括IP包的哪些部分?数据链路层的MTU包括哪些?
5.我们部门主要做C,职位不匹配,嗯。
 
ThoughtWorks(武汉)秋招提前批(offer已拿,一面技术+一面HR,2018.8.5)
技术面(四十分钟,20分钟coding,20分钟技术面)
1.有二十分钟的时间看代码修改的需求题目,看完题目之后讲思路,然后可以开始动手写了。(不要害怕说话,多跟面试官交流,具体的需求是什么,可以先写哪个部分,可以从易到难开始coding,这样可以减少心里的压力和紧张度)
2.SDN项目
3.修改密码的时候为什么要用token解决?在什么情况下会出现这种横向越权问题?
4.单点登录是什么实现的?
HR面(四十分钟,有一票否决权)
1.觉得技术面表现怎么样?
2.除了Java后台有没有学过其他的技术?比如前端,脚本?
3.有没有在不愿意学被逼着去学的技术?是怎么学的?学的效果怎么样?
4.在团队合作中有没有意见不一致的情况?你是怎么解决的?当队员提出意见反驳你的时候,你的态度是什么?
5.你有没有帮助过你的队员?你是采取什么样的方式帮助的?你的队员有什么进步吗?
6.在你目前的项目中有没有什么痛点是比较难解决的?你是怎么解决这个问题的?
7.你有没有对负责你的老师提过你自己的建议?
8.你最近有没有学习什么新技术?你是怎么学习的?通过什么途径学习的?
9.期望工资是多少?最长能接受的出差时间?
10.英语怎么样?用一段英文简单描述一下对这次面试的体验。
反问问题:工作机制是什么?是以部门划分还是以项目划分?
 
猿辅导(北京)提前批(一面一个小时,2018.8.11)
1.SDN项目
2.GC算法都有哪些?
3.手撕代码(40分钟)
1)找出两个公共链表的公共链表部分的长度,就是Y型链表的的公共部分长度。
2)m个文件,每个文件中有n个数,对这所有的数进行排序,然后输出存到最后的文件中,n的数值大到内存中只能存放最多2个文件的数。
解决:对每个文件分别排序,然后再取每个文件的第一个数,建立堆排,再每次输出最小值然后从m个文件取一个数,调整堆,继续依次排序输出。
 
百度(北京)提前批(三面offer,2018.8.14)
一面
1.购物商城的项目,SDN项目。
2.C++的虚函数是什么。
3.linux的常用目录和基本命令。
4.测试方法了解哪些?黑盒测试都有哪些方法?等价类是什么?
5.public,protected,default,private修饰范围有什么不同。
6.接口和抽象类的区别。
7.集合容器都有哪些,各自特点和应用场景。
8.多线程可以用在什么场景中?用了多线程的哪些方法?有没有用过wait函数。
9.Y型链表和二叉树中序遍历。
10.drop,delete,truncate的区别。
二面
1.购物商城项目,为什么要用ftp作为服务器,为什么要用ngnix,redis只做了session共享吗?
2.SDN项目。
3.如何测试购物车?
三面
1.用过哪些百度的产品。
2.客观评价一下一个好的搜索引擎需要哪些东西。
3.在一个访问量很大,关键词很多的情况下,如果让用户的搜索速度足够快,如何优化搜索过程。
缓存+数据库优化
4.为什么要做测试?(三次面试都被问了)你是怎么理解测试和开发的?
5.为什么要来北京?作为女生怎么看待加班文化?
6.能否来实习?(三次面试都被问了)
 
斗鱼(武汉)提前批(两面技术面一面总监面一面HR,2018.9.13)
斗鱼这两年感觉hc非常非常少,所以校招虽然收的简历多,但是捞起来的非常少,所以我也算是幸运吧。
先去做了套笔试题,60分钟,选择题是数据结构,大题包括TCP三次握手和四次挥手,操作系统内存淘汰算法,数据库的几种范式,一个单链表找出其中位数,找出集合中最大的T=A+B的T是多少,堆排序的整个调整过程。
一面(三十分钟,像刚入职没多久的学生)
1.了解斗鱼吗?
2.有过实习经验吗?这几个项目都是在什么场景下完成的?
3.在什么情况下会发生横向越权问题?你是怎么解决的?
4.Java中的类常用的有哪些?
5.在什么场景下会用到LinkedHashMap?HashMap底层的实现结构是什么样的?HashMap在什么样的并发情况下会出现什么状况?会报什么异常?
6.==和equals()有什么区别?int和Integer有什么关系?
7.TCP为什么是三次握手而不是两次或四次?
8.http的断点续传了解过吗?http的缓存是如何实现的?
9.你的擅长是在哪一块?亮点在哪里?
10.301和302状态码的区别。
11.ssm框架各有什么优缺点?都是干什么用的?spring的作用是什么?
二面(三十分钟,这个人长得还挺帅的,但是说话真的很快,感觉是那种做事效率超高超快节奏的人,所以我回答问题的时候说话也很快,谁让他说话那么快的hhh)
1.有过实习经验吗?
2.单点登录是怎么实现的?
3.前端要向后台传file文件,content-type应该怎么设置。
4.http底层用什么协议实现?2、3、4、5开头的状态码分别都代表什么意思?401和403的区别。
5.Mysql中都有哪几种常用的类型?char和varchar有什么区别?
6.SDN项目讲一下。
7.你的职业规划是什么?有没有兴趣转测开?
8.spring的优点有哪些?
同等压力情况下选开发。
三面(三十分钟,看样子应该是做架构级别的)
1.有过实习经验吗?这两个项目在你自己做的过程中,有没有想过架构层面的事情?
2.负载均衡你了解的都有什么样的实现方式?
3.如果你做的东西要投入商用,需要考虑哪些安全层面的事情?
4.你的职业规划是什么样的?
HR面(三十分钟)
1.了解斗鱼吗?对斗鱼是什么样的印象?
2.从项目中学到了什么?
3.最有挫败感的事情是哪一件?
4.有没有跟老师发生过冲突?怎么解决的?
这里自己太实诚了,竟然说自己让老师下不来台了,真是尴尬,然后给我抛了一个职场问题。
5.主管是你的直接上级,当天你已经有了主管给你的任务,需要当天完成,然后总监又给你下达了新的任务,也需要当天完成,优先级相同,而主管和总监之间有矛盾,总监给你下达任务的时候没有通过主管,你会怎么解决这个问题?
正确的办法应该是先告诉主管总监的任务,然后再去和总监沟通。
6.期望薪资。为什么坚持留在武汉?如果斗鱼给你比较满意的offer,别的公司开出什么条件你才会去别的公司?
感觉这里是可以跟hr谈薪资的,她应该是想知道什么样的条件才能让我选他们公司吧,可是我太实诚了,啥都没说,嗯。
 
校招还拿了科大讯飞武汉、华为、中科曙光的offer。所以下面也是零散的一点面经,不知道是哪个公司的了。
1.枚举类里的属性是否==
2.数据库的隔离级别
3.索引底层用的什么数据结构,为什么索引会快 。
4.数据库的表和bean之间是怎么映射的。 
5.mybatis中#和$有什么区别,sql怎么返回自增主键的值。
6.死锁和死循环的关系 
7.怎么理解时序图的作用。  
8.不用ngnix,多个tomcat搭建还能生效吗?
9.cookie禁用后session还能使用吗? 
 
经历了两次秋招的个人的一些感想:
为什么是两次呢,哈哈哈,因为去年还陪男票经历了一次。个人觉得秋招还是要趁早准备吧,如果是今年九月份要秋招,在去年九月份的时候就可以开始慢慢刷题,平均每天一两道,不是很花时间也保持了自己做题的新鲜度。然后在上半年的时候就可以开始对自己刷的题,自己的项目,自己的基础知识进行系统性的梳理。这样在七月份开始校招提前批的时候也不至于太慌乱,不慌不忙打稳仗才比较重要。还有一个很重要的点就是,不要让自己进入到这样的境况中,就是面临的是公司选你,而不是你选公司了,我觉得无论做什么事情,主导权握在自己手里是最好的,因为这个决定了你是否在选择在做在完成你想要的生活,如果被公司挑来挑去我觉得是挺难受的。
关于选择:都是成年人了,我觉得我们应该为我们做出的每一个选择负责和承担这个选择所导致的结果,最好的办法是,在做选择之前,评估每个选择所带来的效果,以及可能造成的风险,在各样的利弊面前,我们才能做出目前状态下比较合理的选择。由于个人的目标性比较强烈,在七月份开始提前批的时候,我就已经打算了放弃一线城市一线互联网的选择,这是需要勇气的,也是需要很深的思考的,(所以我基本上没投什么外地公司,投了的也基本上都只是水了一水,所以武汉这边的选择也会更少一些,如果问我当听到身边的人拿高薪offer是什么感受,我只想说高薪offer很正常啊,每个人的追求和想要的不一样,我一直持守的观念是不羡慕不嫉妒做好自己就好了~还是刚开始说的,就是要对你做出的每个选择负责吧~)因为毕竟做技术的还是会希望能在比较好的地方得到锻炼,但是我在慢慢经历着一些事情的时候,开始发现,如果为了一份工作,需要舍弃你很多其他的追求和念想,我觉得是不值得的。(当然每个人所面临的环境和选择不一样)特别是每当我步入医院的大门时,就越来越觉得生命对我们来说多么多么重要。人生短短七八十年,一定要想好自己想要的是什么。

posted on 2018-06-10 17:17  二十年后20  阅读(1236)  评论(0编辑  收藏  举报

导航