记一次面试经历

2018年社招面试记录(2017年毕业,算一年半经验吧)

目录

面试记录

面试知识点总结

面试经验

面试收获

面试记录

  • 微医:

聊聊你做的项目,主要负责什么?

项目是怎么部署的?用到了哪些命令?线上出了问题都是怎么解决的?

linux如何查找一个字符串出现的个数?

spring mvc流程说一下,项目启动时servlet做了些什么?

有哪些参数注解?有哪些bean注解?

@Autowrite和@Resource区别说一下

Hash碰撞怎么解决的?

concurrentHashMap如何实现线程安全?

AtomticInterger如何实现的?

你在项目里redis是怎么用的?

Es分词怎么分的?

说一下JVM分区

说一下GC

哪些可以作为GC Root?

OOM溢出有哪些原因?如何判断?

rpc了解吗?

你用过哪个MQ?

 

  • 嘀嗒出行:

一面:

笔试题,自定义一个异常类,异常时发送邮件,但是五分钟内只能发送一次,如何实现?考虑到线程安全又该如何改进?

Http 请求几部分?都包含什么?

几种排序时间复杂度(归并)

说几个Tomcat和Jvm调优参数?具体怎么操作?

说一下NIO

Full GC频繁 stop the world怎么处理或避免?

说一下MQ吧,自己搭过吗?

你都是如何保证代码规范的?

在编程上有什么心得?那几个原则要理解

如何对系统性能进行提升?

从cdn,负载均衡,es,redis,数据库设计,db缓存,mybatis缓存,索引,Sql优化说了一下。没说分库分表和读写分离。

自己平时怎么学习的?

二面:

pv面试,就一道题。

一个txt文件,里边一行一个手机号,判断一个电话号码在不在里面,怎么做,用最佳方式实现?

这道题真的没get到考点在那磨叽了半天
 

  • 喜马拉雅FM:

说一下做的项目,都用了什么技术?

设计模式说几个,然后问你都用过哪些

我说用过单例,然后问双重检查机制实现单例模式对象为什么用volatile修饰

然后又让说一下volatile应用场景

消息的应用场景说一下

你们系统登录是怎么实现的?

线程池创建方式说一下,几个参数什么意思?newSingleExecutor怎么用?

索引底层是什么?索引如何实现的?

线程间如何通信?然后接着问有什么区别?

Java读写锁说一下

数据库如何提高性能?

说一下dubbo

Spring如何实现事物的?具体怎么操作?

事物传播机制说几种

 

  • 平安:

一面:

笔试一:写个单例

说一下为什么你这个单例是可靠的,顺带问了一下volatile

笔试二:乱序字母的一个字符串按ABC排序

画一下jvm内存图(1.7之前的就行)

什么情况下从新生代到老年代?

三个对象互相调用形成闭环,会gc吗?

gearman是个什么东西?

es如何索引的?

说一些sql优化,索引使用,索引失效

说一下红黑树(这个问题是在问hashmap的时候顺带问的)

二面:

问项目,聊人生

三面:

问项目,聊人生

二面之后还有个在线的价值观测试

 

  • 快看漫画:

笔试:

一个字符串,判断他是不是对称的(有空字符算作不对称)

你在第一个项目里负责什么业务?

画一下第二个项目的流程图

qps是多少?项目怎么部署的?

mysql,redis,es都开启多少个线程?请求时间设置了多少?

搜索模块你是怎么重构的?

你们系统的线上的jvm怎么设置的?

画一下线程状态转化图

ArrayList和LinkedList区别,ArrayList的底层,查找和删除最好和最坏复杂度,为什么?扩容说一下

说一下抽象和接口的

如何保证一个队列是线程安全的?

synchronized和lock的区别

failfast机制说一下

锁池

读写锁

 

  • 京东:

写个快排

说一下aop实现原理,spring代理模式原理,如何在一个方法前后各输出一句字符串。

多线程循环输出ABAB。

countDownLatch说一下,可以用在哪些地方

创建线程方式,线程池。

如何自己实现一个阻塞队列

如何实现一个LRU cache(LinkedHashMap)

设计模式,框架应用,你实际使用过哪些?

设计一个秒杀系统,即可以应对高并发又可以防止机器刷还要保证数据准确(防止超卖)还要对服务器最小的压力。

可以从水平扩展机器,静态化资源,限流(有损服务),不直接操作DB,可以使用mq或redis缓解DB压力

 

  • 58:

笔试

三个运动员跑1000米,裁判员发令后同时开跑,输出各自跑完花费的时间

用java实现一个单向链表,实现put和get功能

用java模拟实现浏览器前进或后退功能

说一下类加载过程

说一下mysql索引如何实现的

redis如何持久化?什么场景使用哪个方式?

dubbo如何实现自动注册和发现的

 

  • 58:

一面:

三道笔试

求一亿个无序数里最小的1000个数,topN问题一般都有哪些思路?分治+堆排

两个有序数组求交集。(二分查找变一下就行)

一本书,求出现最多的字的次数。

Fork/Join

为什么要用spring?用自己的话说一下aop和ioc

aop如何工作的?

spring容器是干嘛的?让你自己写一个容器怎么实现呢

了解什么jvm监控工具?

如何查看一个应用线程?

你是怎么对消息进行优化的?

redis里用Map和String有什么区别?例如存储用户会话缓存

Rpc框架需要注意什么(协议,序列化,IO)

HashMap为什么不是线程安全的?

LinkedList与ArrayList区别?分析一下

如果让你实现一个RPC框架,你怎么实现?(代理-获参-系列化-tcp-nio-反射-序列化-返回结果)

二面:

说说你对移动端后台和javaweb应用后台理解。

版本兼容性你都怎么保证的?

你对接口都是怎么优化的?

需求可能导致现有接口不符合,怎么处理或避免这种事?

es内部机制说一下。节点,分片以及如何运作?

和mysql对比你有什么理解(他指的是es的分布式存储方式,不是倒排索引)

我要对1000万条数据进行操作,有什么处理策略?

MySql是如何与Redis同步的?出了问题怎么办?起个线程心跳执行是一种策略

说一下你项目里可以优化的地方

说一下你印象最深的一些解决问题的例子

三面:

写个程序反转字符串

画个项目或模块的流程图

 

  • 阿里(电话面试):

说一下String,然后再说一下StringBuffer和StringBuilder

说一下抽象类和接口,为什么这么设计

说一下异常,运行时异常可以捕获吗?最大基类是什么?

hashMap put一个元素过程说一下,为什么不是线程安全的,会发生什么,concurrentHashMap get过程说一下,为什么是线程安全的?1.8之后做了什么改进?

为什么TreeMap是有序的,按照什么排序?

除了TreeMap还有什么是有序的?

hashTable说一下

sleep wait notify说一下

notify和notifyAll区别

说一下synchronized,有什么可以替代他的?

cas是什么?从原理上解析一下

volatile是什么?可以保证原子性吗?为什么?

指令排序说一下

内存屏障说一下

事物四个特性说一下

隔离级别说一下,间隙锁干什么的

git的merge和rebase什么作用?

linux命令查看cpu除了基本命令还有呢?

 

  • 人人网:

一道脑筋急转弯

两道算法题

字符串压缩,即aabbccc => 2a2b3c

循环数组查找,即5678123查找x

说一下你们系统用到的数据库表

 

  • 人人贷:

算法:求一串数的最大连续子数组

算法:实现大整数加法

算法:n个有序数列获取最大m个数

用程序写个树

sql:找出工资大于部门平均工资的员工

简述aop ioc

 

  • 借贷宝:

一面:

说一下乐观锁悲观锁(不用管java的还是db的,思想都差不多,知道什么说什么)

信号量说一下

二面:

转账问题如何保证?分别说一下单库和分布式库(2PC,补偿事务TCC和本地消息表)事务

collections.sort内部使用什么算法排序的

算法:写个开方运算

1m的空间能不能保存100万个8位数?

垃圾回收过程从头到尾,从一个对象创建到销毁说一下整个过程

三面:

找各种刁钻的问题,压你的薪资

 

  • VIPKID:

一面:

几种引擎的区别,索引实现原理

数据库如何保证一致性

JVM1.7和1.8有什么区别

cms回收器如何工作的?说一下四个过程,G1说一下,相比CMS有什么优势

spring mvc启动过程,哪一步可以做一些扩展(例如静态资源映射,拦截器,参数注入等)

二面:

说一下left join的原理(笛卡尔积 - on筛选 - join - where再过滤 )

抢购问题 单库和分布式情况下如何实现

linux的awk说一下,给了一道题忘了

一千万个数里取10个最小的数,用什么算法,堆排序,为什么用堆排序?

说一下堆排序的过程

三面:

问项目

 

  • 首汽约车

一面:

类加载过程(主要问准备,类构造,实例构造阶段这两个方法。静态块,静态方法,静态变量,实例变量等等换着法问)

说一下观察者模式

二面:

linux awk命令

es内部用的什么结构,一个插入过程中es里的节点以及分片是如何工作的

联合索引实现原理

Bean生命周期

三次握手

499状态码代表什么?

自己写过什么注解

spring boot相比spring mvc有什么优势

事务传播机制说一下,一般什么场景用哪个?

首汽约车订单表两亿条数据如何进行拆分?

可以水平拆分,最好分库,分库要优于分表(考虑资源)

从哪个角度拆分?

时间,城市, 或者 hashid ?

如何实现uuid?机器码+时间码+自增数

三面:

问项目

 

另外还有两家后面发现问的问题都差不多就没再做记录了

还会问一下网络,前端等方面的问题

 

面试知识点总结

一:Java

集合:

  • hashmap和concurrenthashmap源码一般必问,最好看1.8版本的,ArrayList和LinkedList区别,TreeMap和LinkedHashMap区别以及原因(就是问底层用的什么数据结构实现的)?
  • 还有一些juc下的,queue,stack等十几种常见的接口或实现类要了解实现原理以及使用场景

异常:

  • 了解整个异常体系Throwable,error,exception,RuntimeExceptiion,以及检查时异常。
  • 一个比较常见的考点:try-catch-finally(1,finally一定会执行,2,返回值是在finally之前确定的然后会存起来,3,return的优先级是finally > catch > try。所以finally中放return会提前退出)

多线程:

  • 知道线程的几个状态,以及可能是什么原因从一个状态变为另一个状态
  • 线程池几个参数以及各个意义,线程池接受一个任务为什么设计成这样?(因为在队列里不需要获取全局锁)
  • synchronized,理解原理,锁是加在对象上的,但是要靠monitor判断。volatile可见性,防止指令重排序(指令的happens-before要知道)
  • CAS,AQS原理以及在哪些地方使用了他们?深入理解一下,整个并发体系的好多实现类基本就是靠他俩了
  • Lock ReentrantLock Condition ReadWriteLock
  • 原子类的实现原理,juc下的并发容器
  • 要会使用一些并发框架,例如:Fork/Join,countDownLatch,信号量,线程屏障

《java并发编程的艺术》

JVM:

  • 各个区是干什么的,从一个类加载,实例化,调用执行某个方法,到对象被回收整个过程要明白流程,以及涉及到的数据在各个区之间的转换
  • GC算法,垃圾回收过程,收集器以及区别
  • 要知道1.7和1.8的区别,目前网上的资料大多是针对老版本的JVM

《深入理解JVM虚拟机》

NIO:

  • 何为非阻塞IO
  • selector,channel,buffer
  • NIO用处或优势,Netty要知道,TCP或RPC框架方面可能牵扯着会问到

其他:

比如Java为什么是多态的,依靠什么来实现的?为什么要设计泛型这个东西?jdk不同版本加了哪些些东西?还有stream,枚举,序列化等等

 

二:数据库

InnoDB,MyISAM区别,知道索引实现原理以及为什么这么实现(例如聚簇索引是什么东西,二级索引为什么是要用B+树结构的)

了解sql执行过程(join 或 where连表 以及使用索引),这样可以更好的进行sql优化

数据库事务,比如ACID(用redo和undo机制保证原子性和持久性,锁或多版本保证隔离性,'AID'共同保证'C'一致性),其中锁(悲观)又会按照使用方式和粒度进行划分

explain

 

三:Spring

为什么用spring?(有什么好处)

spring启动过程(启动过程中serlvetcontext webapplicationcontext dispatcherservlet都会做什么)

生命周期(配置文件里的init-method和destroy-method方法,BeanNameWare,BeanFactoryWare,InitiazingBean,DiposableBean接口,BeanPostProceossor后置处理器实习类要知道他们的作用和执行顺序)

作用域

aop是怎么实现的,jkd代理和cglib什么区别

aop实现事务和传播机制具体配置以xml为例简单描述一下

springboot和apringmvc的对比

 

四:算法和数据结构

算法:常见的排序(面试的时候最好不要写冒泡这种高复杂度的),查找算法以及每种的时间空间复杂度,给你一串数要写出了接下来几步的变化

链表插入,反转,删除等

树的前序、中序遍历,或者是按照递归和非递归(那就是迭代了)方式,或者是按照深度广度优先级分。求树的最大(小)深度,查找节点等操作

 

五:linux

查看内存,cpu,硬盘,进程。每种命令的结果比如ps的pid id分别是什么

文件命令,权限命令

查看日志相关操作,比如grep 管道 set tail head等命令,查看多少行到多少行的?查看某个字符串个数出现个数?

或者更复杂的需要awk的,首汽约车和vipkid问了两次

linux如何开启一个任务?如何开启mysql主从复制功能?等等

 

六:Git,Maven等开发工具

比如常见的一些问题:rebase和merge区别?stash什么作用?你们项目是如何做代码管理的?jar包冲突怎么办?如何不加载重复的jar包?

 

七:各种中间件和其他技术

es肯定会问系统怎么用的,如何分词,脑裂等问题。有两家问过es实现原理

redis肯定会问怎么用的,还会一些主从分离,数据持久化,incr,实现分布式锁等问题。

rpc(包括dubbo,springcloud,grpc)至少会一样,会问怎么用的(好处以及如何配置),有一家还问了自己怎么实现一个类似dubbo的框架(实现方式:一般请求方通过动态代理,JDK里的Proxy。通过重写Proxy InvocationHandler接口里的invoke方法实现。这个环节获取方法名,参数,返回类型,并且序列化参数。之后一般使用tcp进行网络传输,服务端一般使用同步非阻塞的NIO框架例如netty进行数据接收。服务端接受到请求中的方法和参数后通过反射调用真实的方法。然后将返回值序列化封装返回给客户端。)

kafka,jekins等

 

八:项目

简历上出现的项目都会问

口述一下项目的业务,可能会让你画个时序图,模块图之类的,然后可能会抓住某个模块问细节实现。

项目涉及的配置也会问,比如用的什么连接redis?事务怎么配置的?隔离机制是怎么样的?db怎么备份的?es用了几个type?日志怎么配置的?日志文件放在哪等等

 

九:必考的两道题:

单例模式和设计一个秒杀系统。每一道都被问过多次。单例考察基础,秒杀系统考察知识面(宽度)和经验

一道由单例引发的面试经验:https://www.cnblogs.com/xiexj/p/6845029.html#4082170

 

面试经验

  • 简历要认真写,不会的不要出现在简历上,不会比说错要好

  • 好的公司一定要留在后面投,可以先面几家,面试个十几天和没面试之前差距是很大的,起码在应对面试上。这点在毕业不久同学身上最明显。

  • 不要等到你准备好了也过了招聘季了,淡季不好找,所以一定要提前准备。尤其是毕业不久的同学,在找工作难度和准备时间都没优势。

 

面试收获

一:知识体系化,不要分散要打通,比如synchronized这个关键字,单独讲多线程和JVM里可能都会讲到,可以关联起来理解

二:深入理解,切记死背,要理解为什么这么设计,可以多看一些源码

三:多动手,比如几个线程框架,可以多敲几个例子验证一下

四:加深对项目的理解,不要只是了解自己负责的一个模块

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(其他)