面试刷题11-15

招聘要求:

  • 熟悉 Spring MyBatis 等主流开源组件和框架
  • 高并发、多线程开发、分布式系统,异步消息和微服务框架
  • 数据库有较强的设计能力,熟悉 Hadoop Spark 等大数据处理框架和平台

面试大概不到两小时……

  1. 自我介绍,公司面试官介绍……略
  2. MySQL有哪些锁?

乐观锁,悲观锁,行锁,表锁

  1. 解释一下ACID都是什么

ACID是衡量事务的四个特性:

  • 原子性(Atomicity,或称不可分割性)
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持久性(Durability)
  1. Innodb中索引的实现 B+树……
  2. AUTO_INCREMENT原理(考察并发情况)
  3. 数据库的索引有哪几种?为什么要用B+树来做索引?组合索引和几个单个的索引有什么区别?数据库的大表查询优化了解吗?MVCC机制了解不?MVCC机制有什么问题?怎么去解决这个问题?mysql慢语句调优做过吗?说说你是怎么做的?

按照索引列值的唯一性,索引可分为唯一索引和非唯一索引

MVCC 分布式版本控制

 

  1. Redis了解吗?你说说怎么用redis实现分布式锁?
  2. Redis常用数据结构及底层数据结构实现
  3. 如何解决 Redis 的并发竞争 Key 问题

加锁

  1. 如何保证缓存与数据库双写时的数据一致性?
  2. 死锁产生的原因

死锁产生的4个必要条件?
产生死锁的必要条件:

互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。
请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。
环路等待条件:在发生死锁时,必然存在一个进程--资源的环形链。
 

  1. 进程、线程区别,什么时候用线程
  2. 如何实现一个线程池,Java中线程池如何进行配置
  3. linux中有哪些常见的指令,进行介绍
  4. select、poll、epoll有没有了解过,讲解一下
  5. 线程切换,引申到Java阻塞➡️运行
  6. 页面置换算法有哪些 介绍一下

最近最久未使用(LRU)算法

先进先出置换算法(FIFO)

聊项目……聊未来,谈人生理想……

 

总结:数据存储的为题为主,关系型数据库和内存数据库redis

 


一面:
io为什么会阻塞。
nio的底层实现原理

NIO的特点:

应用程序的线程需要不断的进行 I/O 系统调用,轮询数据是否已经准备好,如果没有准备好,继续轮询,直到完成系统调用为止。

NIO的优点:每次发起的 IO 系统调用,在内核的等待数据过程中可以立即返回。用户线程不会阻塞,实时性较好。

NIO的缺点:需要不断的重复发起IO系统调用,这种不断的轮询,将会不断地询问内核,这将占用大量的 CPU 时间,系统资源利用率较低。

总之,NIO模型在高并发场景下,也是不可用的。一般 Web 服务器不使用这种 IO 模型。一般很少直接使用这种模型,而是在其他IO模型中使用非阻塞IO这一特性。java的实际开发中,也不会涉及这种IO模型。

再次说明,Java NIO(New IO) 不是IO模型中的NIO模型,而是另外的一种模型,叫做IO多路复用模型( IO multiplexing )。


nio 为什么是非阻塞的,如果selector有数据了,如何通知channel

用select/epoll的优势在于,它可以同时处理成千上万个连接(connection)。与一条线程维护一个连接相比,I/O多路复用技术的最大优势是:系统不必创建线程,也不必维护这些线程,从而大大减小了系统的开销。

Java的NIO(new IO)技术,使用的就是IO多路复用模型。在linux系统上,使用的是epoll系统调用。

多路复用IO的缺点:

本质上,select/epoll系统调用,属于同步IO,也是阻塞IO。都需要在读写事件就绪后,自己负责进行读写,也就是说这个读写过程是阻塞的。

如何充分的解除线程的阻塞呢?那就是异步IO模型。


tcp三次握手
为什么tcp是三次而不是两次。
死锁的概念(用一个场景来模拟死锁)
死锁如何避免的
如果发生了死锁怎么办
ArrayList 跟LinkedList
arrayList如何动态扩展

hashmap内部原理
hashmap是不是线程安全的
如何保证hashmap线程安全。
concurrentHashmap的内部结构

static关键字
static关键字修饰的方法和属性什么时候加载

gc发生的时间
gc  root节点的种类

两道算法题
将数组中的重复元素删除

[1,1,1,2,3,4,5,5,5,6,6]
[1,2,3,4,5,6]

双指针
求两个数的最小公倍数


二面
讲项目
tcp四次挥手
手撸单例模式

数据库的四大隔离,解决的问题

redis中zset 结构

第二,第三范式
算法:给一个0,1构成的二维数组,上下左右相连的1,构成一个岛,求岛面积
[[0,0,1,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,1,1,0,1,0,0,0,0,0,0,0,0],
[0,1,0,0,1,1,0,0,1,0,1,0,0],
[0,1,0,0,1,1,0,0,1,1,1,0,0],
[0,0,0,0,0,0,0,0,0,0,1,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,0,0,0,0,0,0,1,1,0,0,0,0]];

 

1. 数组跟链表的区别
2. 并发跟并行的区别
3. osi七层
4. 判断一个字符串是不是回文字符串
5. 求两个字符串的最长公共子串
6. 测试一个手机端的登录界面
7. 问问题环节


 

写在前面:

研究生前期主要从事机器视觉方向。18年下半年由于项目需求开始学习Java,包括Java基础,JVM,并发,Spring,Springboot,Mybatis,redis,MQ等等,同时也间歇性地刷题。秋招投递了大约20家公司,其中面试开始时间为19年9月中旬,话不多说,面经奉上!

 

小米:

一面:

1、String,Stringbuffer,StringBuilder的区别,为什么被final修饰就不能被继承。

2、讲一下volitale关键字,说一下为什么不保证原子性。

3、抽象类和接口的区别。

4、用没有用过多线程?讲一下多线程的实现方式,call和run的区别。

5、讲一下线程池的执行步骤,以及参数设置。

6、将数组里面非0的元素移到前面,0元素移到后面(不改变相对位置)。

冒泡排序思路

二面:

1、 用两个栈实现一个队列。

2、 对你之前写的代码进行一些修改,写成泛型。

3、 对1中的方法进行线程安全的改造。

4、 Synchronized用法,锁。

5、 数据结构,树的遍历,排序算法复杂度分析。

6、 TCP,UDP,Http,Http请求头,Https。

7、 项目细节,思考。

 

有赞:

一面:

1、 项目。

2、 HashMap(头插,扩容为什么是2,成环,转红黑树节点数目为什么是8)。

3、 开放性,HashMap不用同步/并发容器,实现线程安全。

4、 JVM运行时内存,高并发环境如何避免OOM。

5、 类加载机制,不同加载器之间的关系。

6、 GC,不同收集器区别。

7、 线程池,如果服务下线如何处理线程池。

8、 谈谈对Spring里面IOC和AOP的理解,Spring如何解决循环依赖。

9、 平时对python的使用,和Java对比区别。

10、学习习惯。

 

 

顺丰科技:

一面:

1、 项目中的算法实现。

2、 网络7层模型有哪些,wifi属于哪一层。

属于数据链路层和物理层

3、 随机数产生算法。

4、 索引原理,索引失效,索引优化。

5、 死锁

6、 不借助中间变量交换2个数。

 

 

新浪微博:

一面:

1、 20个有序数组,找出其中最大的10个数。

2、 URL请求过程,DNS端口,三次握手,四次挥手,拥塞控制。

3、 HashMap源码。

4、 新建一个对象的流程。(从类加载开始讲)

5、 Java内存模型和线程安全,讲一讲volatile。

6、 Java线程池。

7、 JVM内存和GC。

8、 项目算法实现,如何自定义数据库连接池,如何保证连接存活,意义是什么。

二面:

1、 项目细节,实现原理。

2、 JVM与GC,如果大访问量,哪部分可能会OOM,如何处理。

3、 索引原理,索引失效。

HR:

 

浙江大华:

一面:

有同学发过了,我就不发了

二面:

1、 项目介绍。

2、 Redis基本数据类型,持久化方式。

3、 RabbitMQ如何保证消息可靠。

4、 SpringMVC执行流程。

5、 Spring中IOC的实现。

6、 Spring事务以及传播机制。

7、 Mybatis中“#”和“$”的区别。

HR面:

 

贝贝:

一面:

1、 项目介绍,项目中的算法设计,解决问题。

2、 JVM内存和GC。

3、 Java内存模型。

4、 Synchronized和reentrantLock的区别。

5、 Sleep和wait的区别。

6、 MQ的幂等性。

二面:

基本就怼项目,你项目为什么不做成集群版本?主要是基于兴趣吗?

HR面:

 

中兴:

一面:

1、 项目介绍。

2、 Java面向对象介绍。

3、 List和Set区别。

4、 Get和Post区别。

5、 HTTPs请求建立过程。

6、 DDOS攻击。

7、 数据加密。

HR面:

 

百世:

一面:

1、 项目介绍。

2、 http建立连接的过程,如何释放,发生异常了怎么办。

3、 TCP连接建立,释放。

4、 事务,隔离级别,隔离级别的实现,读写锁配合。

5、 索引原理,建索引需要注意什么。

6、 java synchronized和reentrantLock的区别,底层实现,AQS,Monitor,CAS。

7、 Java内存模型,线程安全。

8、 JVM和GC。

9、 1、)翻转二叉树的左右子树;2)、二叉树的层次遍历。

二面:

1、 写一个单例模式,锁住的那个类用的什么类加载器。

2、 面向对象设计银行取号系统。

3、 霍夫变换,条形码检测。

4、 平时看什么书,问了问微积分。

HR:

 

头条:

一面:

1、 具体场景,索引分析,索引失效。

2、 threadLocal原理。

3、 进程和线程的区别。

4、 做题:leetcode

 

 

 

华为:

一面:

1、 做题:选择填空题,编程题(数组里面的每一个元素,找到该元素后面第一个比他大的数)

2、 项目介绍。

3、 JVM内存和GC。

4、 类加载机制。

5、 Java多线程。

二面:

1、 做题:翻译,编程题(不大于n的数中1的个数)。

2、 HTTPs。

3、 SSL。

4、 TCP,UDP。

5、 Java性能调优。

6、 Linux基本操作。

HR面:

 

 

美团:

一面:

1、 final关键字。

2、 重写equals,hashcode。

3、 线程池。

4、 JVM内存与GC。

5、 MQ选型对比。

6、 Redis基本数据类型以及持久化方式,Redis底层数据结构,Redis淘汰策略。

7、 Mysql事务,不可重复读和幻读的区别,可重复读底层实现。

8、 Redis,数据库同步,Mysql优化。

9、 编程:实现2个线程循环打印。

二面:

1、 项目细节,难点。

2、 Synchronized和reentrantLock实现区别。

3、 Spring中IOC的实现。

4、 Bean的生命周期。

5、 场景题:如何采集10个商铺的商品信息。

6、 常用数据结构以及应用。

7、 常用算法以及应用(贪心,dp,分治,回溯,分支限界)。

三面:

1、 项目实现。

2、 MQ对比,项目思考,反思中间件。

3、 实现字符串的字典序排序(编码风格规范)。

4、 面向对象改造。

5、 将长URL变为固定长度的短URL。

6、 微服务理解,如何划分。

7、 讲一讲常用数据结构。

HR面:

 

 

简历挂:

vivo

1、 笔试挂:

网易,滴滴,携程,360,wps,海康(后4个挂的莫名其妙)

2、 一面挂:

有赞,顺丰科技,字节跳动,招银网络

3、 面完了不给挂:

小米,中兴

 

最终拿到offer的有:美团,华为,微博,大华,百世,贝贝

 

给师弟师妹们的建议就是尽早投递,广撒网(虽然我都没做到🙃)!祝大家offer多多!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值