8.14 阿里巴巴一面(新零售供应链,凉了,这是我的第一场面试),大概30分钟
HashMap和HashTable区别
HashMap 线程不安全, HashTable线程安全
HashMap实现原理(put、resize)
put 像HashMap中添加一个元素的过程。
StringBuffer和StringBuilder区别
前者线程安全,后者线程不安全。
数据库事务隔离级别
如何避免幻读
数据库引擎(Innodb)的事务支持粒度
如何实现乐观锁
Synchronized实现原理
tcp三次握手,四次挥手
osi7层模型
最后问了两个智力题:
两个粗细不均匀、长短不一的的绳子,燃烧一根分别需要60分钟,如何利用两根绳子,测量出15分钟?
一个篮球可以装多个乒乓球?
8.21有赞一面(凉了)20分钟
HashMap和ArrayList默认容量分别是多少?
HashMap和HashTable区别
HashMap什么时候扩容,几倍?
ArrayList什么时候扩容,几倍?
讲讲Java内存模型
讲讲gc算法
01背包问题,我说了dp的方案,但面试官说使用贪心算法(性价比最高优先,我当时屈服了),但是后来发现,贪心不行。
8.26 美团二面(估计凉了,但还没收到拒信)
一面:(25号晚上做了美团笔试,很差,3道算法题,只过了30%)
上来先吐槽我算法很烂,然后要考察我基础。
进程调度方式
进程与线程区别
多线程优点
进程同步有哪些方式
osi七层模型,以及对应都有什么协议
tcp三次握手和四次挥手
udp和tcp区别
http报文都有什么
客户端发起http到服务端返回的详细过程
编程实现求二叉数深度
二面:
二面主要考察场景题,让我从自己的项目出发,如果项目需要上线了,需要考虑什么问题。
看过那些架构的设计。
平时的学习方法。
8.27阿里国际(深圳)一面(凉了)
GC算法都知道哪些?分别讲讲(serial pal new、parelle scavge、serial old、parelle old、CMS)主要讲了下cms
JVM内存模型。
Zookeeper原理,当有3台服务器,一个挂了,怎么保证服务的正常使用?
Spring 怎么接受web请求(应该是Spring MVC)流程是怎样的。
AOP原理
Spring Boot启动加载过程。
9.3 葡萄城(一面+机试+二面,凉了)(C#做控件开发)
一面,两个面试官,问了计算机网络,还是那些常问的问题,我就不列出来了。
问java有什么优缺点,我说单继承,接口可以多实现,就问为什么?多承继为什么不好?(自己给自己挖了个坑)
还喜欢什么?集合。
都有哪些集合?balabala……
HashMap是怎么实现的?baabala
HashMap可以解决什么问题?我说字符频率统计。
怎么做的?比较hashcode,然后比较equals
如果字符串是变量怎么办,“abc abc”,两个abc的地址不同?暗示hashcode不同,没答出来…
git常用操作都有哪些,查看日志用啥?
如果不小心把一个很大的文件2gb,push了上去,然后发现后在远端删除了,之后别人执行git clone,会把所有的历史信息给clone下来,如何解决这个问题?
重点提的是,让我讲述项目难点的时候,我提到了跨域问题,我当时对项目还没有完全熟悉(2年前做的),一直在那讨论为什么会出现跨域(这也导致我回去之后,把项目仔细看了下,发现是我当时对项目不够书序,导致描述错误)
二面,机试:用#画直方图?,输入一组数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
做出来了之后,让支持value是复数,即在虚线下方画#,比较简单。
三面,还是2个人,比较有映像的是:
让我简单描述如何实现电梯调度算法,字符串压缩算法。(这个回答的不是很好,回家之后才想起来电梯调度算法和进程调度算法差不多)
面试官:看过你的博客(简历上写了),看你了解Hadoop,负载均衡,负载均衡都有哪些策略?
我:轮询、加权轮询、hash、最小负载
面试官:简历上写了“了解”linux和git,你使用linux的发行版本是什么?安装软件的命令?如何安装一个源里面没有的软件?如何创建指定权限的文件?
面试官:你如何学习的Java?我:先从JavaSE开始,然后做项目实践、再通过看视频学习JavaEE。
面试官:平时都看什么书?我:深入理解JVM、Effective Java、Java并发编程、Spring实战等。
面试官:Effective Java能看懂吗? 我:里面写的是Java规范、我的层次并没有达到这个境界,没看懂。
面试官:这是四大圣经之一,看不懂也正常。我:惊讶的表情(内心OS:竟然还有4个圣经,不是只有Thinking in Java吗)
面试官:交换机在哪层?我:我觉得交换机是物理设备,果断说在物理层(其实是链路层,我和集线器搞混了)
面试官:露出微笑,那路由器在哪层?我:路由器是网络设备,在网络层。
面试官:那链路层有啥设备?我:思考中:透明传输、封装成帧、插座检测。。。。然后说了不知道。。。我看面试官还在笑,我就反问,交换机是在链路层吗?面试官说是的。
面试官:那我们来聊聊Java吧,重写和重载的区别是什么?我:重写是发生在子类和父类之间,子类重写父类的方法要求方法名、参数都一样,而且访问修饰符要大于等于父类的。
面试官:那如果子类要去重写父类的一个方法,如果子类把返回值的类型给改了,那还是重写吗?我:思考了一会,说应该不是。
面试官:又笑着问:Thread类都有哪些方法?我:我能说我常用的一些吗?有sleep,yeild,join,stop,isInterrupted(),我竟然忘了说start和run?.
面试官:sleep和yeild有啥区别?我:前者是抱着锁睡眠,可以传入时间参数,后者是线程让步,可以让当前线程让出执行权,然后重新竞争执行权。
面试官:笑着问,还有吗?我:。。。。。
面试官:Object和Class有啥区别?我:。。。。Class类是Object类的父类(我竟然说这么逆天的话,说出来我自己都不信)。
面试官:一脸惊讶,笑着问我,不是说Object类是一切类的父类吗?我:我好像看到过有个继承关系(被jdk doc给坑了) 就是这张图的第一个红框浮现到我的脑海中,然后我就认为Class是Object的父类。。。。
面试官:现在有这么2个方法:是不是重载?我:想了会,一看参数不同,方法名相同,说是重载。
//1 public void m(String a, String b) {} //2 public void m(String a, String ...b){}
面试官:还有三个调用,分别会出现什么情况?我:蒙了一会,面试官说有点难,你好好想。我说第一个调用应该是执行第一个m方法,第三个应该会报错(实际上第三个是调用第二个m方法,面试官也说会报错。。。),我感觉第二个调用执行两个m都可以。
//1. m("A", "B"); //2. m("A", null); //3. m("A");
面试官:嗯。。。。你分析的有道理,所以第二个调用会报错。
面试官:(看了下我的简历)问Spring MVC和Spring Boot有什么区别?我:前者是实现MVC架构,或者将Controller使用RequestMapping给映射为http接口的,后者是属于微服务的范畴,我用后者去继承ssm框架。
面试官:那一个请求到了SpringMVC的流程是怎样的,能不能画一下?我:我知道是先被DispatcherServlet被接受,后面就不知道了(其实平时我还能扯一些出来,这实在是被虐的不行了)。。。。
面试官:看来你也只是使用,没有深入去了解它的原理。我:尴尬。。。。
面试官:那今天就到这里,你还有什么想问的吗?我:我觉得您给我的感觉和其他面试官不一样。
面试官:哪里不一样?我:其他面试官问的问题,我看一些面经什么的,基本上都差不多,您问的问题非常独到,是基础,但是也是我的盲点。
面试官:前些年,面试基本上都问HashMap什么的,这些估计你们都把源码都看完了,没什么好问的,这几年喜欢问高并发、ClassLoader、双亲委派,你们都能把他讲得很清楚,这个连我身边一些技术比较牛的同时都做不到。。所以我就很奇怪,然后后来就开始不问这些经常被问的问题了。
我:那您是比较看重基础?
面试官:不,我看重的是一个人的学习能力,潜力,就算你刷了多久多久的题,再牛,在我这里过不了,也不行,只要你在我这里过了,别人说你不行,你也行。我:哇,,,,,,真的是膜拜啊。
面试官:市面上的Java技术书我几乎都看过,大概300多本。我:哇。。。。。。
面试官:我对你简历非常感兴趣,我们组是全栈,我看你写了安卓,我还准备和你聊聊安卓,结果你说你安卓是别的同学做的。。。。我:尬笑。。。
面试官:我非常想你来我们组,和你一起合作,你在学校担任过职务,这对你的沟通能力也有帮助,但就是你的基础有点薄弱,这个非常可惜。我:尬笑。。。。并谢谢他给我机会。。。
完...
10.21 字节跳动(等Offer)
三轮技术面,一面写了2到算法题,二面写了一道,三面写了三道。
最有意思的是第三面,压力面,第一次经历,整个过程让我很紧张,勉强发挥。
自我介绍完,就让我写算法,然后不断问我各种原理,在我回答过程中,不停打断我,让我很紧张,然后继续写算法题,一共来了三次。
第一题,遍历list,并删除指定元素,(想考我for each的坑,但是我没接招,使用迭代器完成)
第二题,按照奇偶行,奇数行正序,偶数行逆序的方式打印二叉树。
第三题,写生产者消费者代码。
计算机网络:osi7层模式,对应协议有什么,都是干嘛的,建议把谢希仁的《计算机网络》传输层那一章好好看看,比如tcp的三次握手,四次挥手,流量控制,拥塞控制,看的时候,不能硬背,要自己理解,才不会忘记,而且在题目有变动的时候,也能应答如流。
操作系统:内存管理,进程调度,进程通信,linux常用命令。
数据库:事务(ACID)、三级范式(举例)、关联(join)、聚集函数、group by、order by、索引(b+树)、innodb与其他的区别(锁的粒度)
数据结构:(重头戏),除了广义表不需要重点看之外。《数据结构》严蔚敏
线性表,尤其是链表(头插法、尾插法、删除、双链表、带头结点与不带、循环链表等)、栈、队列。
哈弗曼树、二叉树、二叉排序树(删除、增加)、b树、b-树、b+树、b*树、红黑树、字典树、树的三种遍历(代码实现,递归与非递归)。
图的遍历(dfs、bfs、递归与非递归)、拓扑排序、最小生成树(Dijkstra、Foyd、Prim、kruskal)。
查找:常用的就二分查找了。
排序:冒泡、插入(常用)、选择(常用)、快速(常用)、堆(常用)、归并(常用),希尔(不常用)、基数(不常用)
口诀:不稳定:快选希堆,其他则是稳定算法。
补充:
KMP算法及改进BM算法
并查集,用于求朋友的朋友问题(最小生成树个数
三路快速排序(快排优化)
刷题:leetcode(top like100)
Java
Java基础倒是很少问,一般问源码层面问题,注意1.7和1.8的区别
1、《深入理解Java虚拟机》,最重要的是JMM(Java Memory Model),我自己的建议就是从JMM为中心,开始向四周扩展,构建知识网。
从JMM -> GC算法,GC Root的确定,线程逃逸问题,Java对象头(Synchronized实现原理),栈的原理,类加载机制问题,三级cache结构、内存屏障,即volatile关键字原理,线程调度等,全部可以从jmm发散,或者从某个点切入,也能讲到JMM。
2、集合:HashMap、HashTable、ConcurrentHashmap、LinkedHashmap、TreeMap、TreeSet、ArrayList、LinkedList、PriorityLinkedList源码等等
3、锁:乐观锁(版本号(mysql通过多版本号来解决幻读问题),cas),悲观锁(AQS,AbstractOwnableSynchronizer是重点)、ReentrantLock、CountDownLatch、CyclicBarrier、读写锁等等,与synchronized的原理对比等。
4、多线程:线程几种实现方式,状态转换,ThreadPoolExecutor参数解析,执行流程。
5、六大原则:
单一职责原则(Single Responsibility Principle SRP)
开闭原则(Open Close Principle OCP)
里氏替换原则(Liskov Substitution Principle LSP)
依赖倒转原则(Dependence Inversion Principle DIP)
接口隔离原则(Interface Segregation Principle ISP)
迪米特原则 (Least Knowledge Principle LKP)
6、常用设计模式(手写单例模式):工厂模式(bean)、代理模式(aop)、观察者模式(消息发布订阅、dubbo),说的这样都是在spring中可以联系起来的
Spring中常用的设计模式有哪些?
7、如何用线程打印abab问题,传送门
8、海量数据问题:归并排序思想,传送门
9、Spring mvc作为后端,讲述从前端请求到后端返回的全部流程,从dns解析到tcp建立连接,再到arp解析,再到反向代理,再到DispatchServlet、HandlerAdapter(通过HandlerMapping找到对应的requestmapping方法)、ModelAndView等,这个问题足以将基础和框架全部联系起来。
10、反向代理策略:轮询、随机、加权、最少连接、ip hash、dns最短等
11、四层代理(lvs)和七层代理(nginx)
12、分布式session问题
13、洗牌算法
14、zookeeper实现分布式锁,以及它的选举过程等
15、Spring ioc的原理,aop的原理(jdk和cglib,与静态代理AspectJ的区别)
16、Spring bean的是如何管理的?
17、在maven中如何出现了循环依赖问题,spring中的bean是如何注入的?
18、dubbo原理,架构图
19、一些常见的rpc框架,rpc和http有何区别
20、如何实现i++的原子操作,(加锁问题,volatile关键字(可见性(三级cache缓存失效,通过对比自身数据)、有序性(内存屏障)))
21、布隆过滤器
当然问题远远不止这么多,只是将一些我认为比较好的问题写了出来。