java面试题汇总

2021最新

7.20京东一面电话面

基础

switch支持使用string吗?1.6,1.7,1.8版本对switch对string的支持
switch支持枚举类型吗?
常见的运行异常都有哪些?
hashMap底层数据结构,如何扩容的?

JVM

JVM内存回收,如何判断这块内存不用了,可以回收了?
你知道的设计模式有哪些?spring框架中有哪些用到了这些设计模式?

数据结构

数据结构:用两个栈实现一个队列。

多线程

终止线程的方式?
thread.stop()在java1.8中是什么情况?
如何将三种终止线程的方式进行结合?使线程结束的更加优雅?

MyBatis

MyBatis二级缓存如何实现的?尽可能深入的讲解一下。
二级缓存和一级缓存的区别是什么?

数据库

B+树的底层数据结构?相关的原理讲一下。
叶子结点存储的数据是一整条数据还是某个字段?
为什么选用innoDB,什么场景使用innoDB?(innoDB和MyISAM之间的区别)

Redis

Redis基本数据类型都有什么?
zset底层如何实现的?用score值保证有序,score值可以重复吗?
如果score值一样,用什么排序?两次取值一样吗?
Redis string单个key最大容量是多少?
string是安全的吗?
Redis主从复制,主从复制的优点是什么?缺点是什么?从库的作用是什么?

项目相关

遇到过什么问题,怎么解决的?

shopee后端一面二面面经

1.判断链表有环?多种方法

2.数组中只有一个数的出现次数是1,其他数的出现次数都是2次,怎么快速找到这个数–异或操作

一般都会问还有没有其他方法,直到答不上来。

3.B+树VAL的对比

4.linux系统运行缓慢,通过什么命令查看

5.i++操作是否能保证线程安全

6.跳跃表和二叉树对比

7.组合索引(a,b,c),那么where (a= and b> and c=)、(a= and c=)、(b= and c=)会不会用到索引?

8.栈为啥会比堆快

9.C++中的原子变量

10.https的handshake过程

11.悲观锁和乐观锁,并发情况下,非要在这两个中选择一个的话,选哪个?

12.mysql中的锁

13.MySQL中的for update

14.排序算法的稳定性和复杂度

15.TCP可靠性和拥塞控制

16.time wait的作用

17.DNS的流程

18.怎么判断父子进程

19.可重复读解决了幻读?

20.-rwx——分别是啥?分别对应:文件的所有者、文件的组以及所有其他用户。

手撕代码:

二叉树的非递归中序和后序遍历

面试总时长一个小时,会有提问环节。

第二天收到二面通知。

shopee二面

进程、线程和协程

C++进程怎么创建

大部分时间都在聊项目

手撕代码:

括号生成(leetcode 22)

字节客户端开发面经 —— 一二三面&offer

一面

  1. 首先自我介绍一下吧,讲讲你的项目
  2. 知道TCP吗?介绍一下TCP,包括三次握手的原理和意义
  3. UDP呢?它和TCP的区别?
  4. TCP的拥塞控制和流量控制是怎么样的?
  5. HTTP是一种什么样的协议?
  6. HTTPS和HTTP区别?
  7. 7层模型和5层模型
  8. 操作系统方面,知道进程和线程吗?它们的区别和联系?
  9. 协程是怎么样的?
  10. 作业调度和页面置换的算法有哪些?
  11. 什么是死锁?解决办法有哪些?
  12. 数据库事务的隔离级别?
  13. 代码题:冒泡排序、归并排序、堆排序、快排

二面

  1. 自我介绍
  2. 项目当中用到的编程语言是什么?技术难点在哪?
  3. 项目是个人完成还是团队完成?团队完成的话,你们的分工合作是怎么安排的?
  4. TCP协议报文的字段有哪些?它们的作用?
  5. HTTPS有了解吗?它具体是怎么加密的?
  6. 堆和栈的区别?
  7. 多线程和多进程有什么区别?
  8. 进程之间怎么通信?
  9. LRU算法的原理和实现?
  10. 内存泄漏是怎么造成的?如何避免?
  11. 各大排序算法的时间复杂度和空间复杂度?稳定性?
  12. 知道智能指针吗?它的原理是怎么样的?
  13. 代码题:求连续子序列的和的最大值

三面

  1. 自我介绍
  2. 讲讲面向过程、面向对象的区别?
  3. 队列和栈的区别和用途?
  4. 数组和链表的区别以及优缺点?
  5. 什么是线程安全?它的机制是怎么样的?
  6. 线程池是怎么样的?
  7. 进程的通信方式有哪些?
  8. 内核态和用户态的区别?为什么要这样区分?
  9. 数据库乐观锁和悲观锁是怎么样的?
  10. 数据库索引?
  11. 算法题:根据规则实现一个游戏

百度后端一二三面面经(成都)

一面

  1. 自我介绍/项目介绍
  2. 接口和抽象类的区别
  3. 用的Java哪个版本,现在最新版本是哪个
  4. 线程的状态、状态转移条件、创建方式、和进程的区别
  5. JVM垃圾回收聊一聊
  6. Linux常用命令说一说
  7. Docker常用命令
  8. 网络七层模型有哪些,应用层有什么协议,网络层有什么协议,传输层有什么协议,TCP/UDP区别
  9. 设计模式知道哪些,本地IDE手写单例模式,volatile的作用是什么
  10. 手撕反转链表,括号匹配
  11. 说说自己的优点

二面

  1. 输入URL发生了什么
  2. 定义一个类,一个get方法,一个add方法,数据流中的中位数(剑指Offer),写完之后让改进….我加了并发锁控制。
  3. 一个诡异的问题:如果你问的问题面试官恰巧不知道,你怎么获取答案?

三面

  1. 直接项目介绍…省略自我介绍
  2. 说一下你的项目亮点
  3. 平时花时间最长的方面是什么
  4. 团队合作有遇到什么问题吗
  5. 项目怎么找问题,遇到问题怎么解决
  6. 项目技术选型的问题
  7. 输入一个URL发生了什么(可能是二面回答得不好,三面又问了一遍)
  8. 有做性能测试吗,怎么做的,有哪些考虑因素
  9. 项目怎么测试的,(我说了postman,面试官似乎并不满意….
  10. 研究生,本科期间都做了什么
  11. 最有成就感的事情
  12. 有什么优缺点

京东科技提前批 一面 35min

一、项目

雪花算法原理、如何解决时钟回拨、为啥顺序的ID

RabbitMQ原理,为啥选这个

异步是啥、有啥缺点、和同步对比

lua+Redis为啥保证原子性、集群下lua失效怎么办

zookeeper和redis分布式锁区别

hystrix策略、区别

二、八股:

JVM:

GC

详细说说CMS

JRE和JDK区别

如何判断需要回收

标记整理详细的流程

数据库:

讲讲有啥索引

回表

覆盖、非覆盖

联合

B+和B

B+和Hash

锁:

synchronized和Lock原理上的区别

synchronized锁升级

讲讲AQS

多读少写用啥锁

京东提前批一面凉经(30min)

  1. 自我介绍
  2. 项目介绍(估计是项目罗里吧嗦讲得太久,导致后面面试官没问什么问题)
  3. HashMap 和 HashTable 的区别
  4. ArrayList 和 LinkedList 的区别,插入的时间复杂度
  5. String 和 StringBuffer 的区别
  6. 基本数据类型有哪些
  7. Java 中二进制 11111111 转成十进制是多少(没听清,不知道问的是不是这个),你是怎么思考出来的呢(答了-128,思考了一会说不会…)
  8. SpringBoot 事务的注解是什么,你平时用到过什么注解(太久没做项目忘得差不多了,只说了个 lombok 插件里面的注解…好羞耻)
  9. 给定一个场景:一个数组中的数字两两重复,现在在里面随机位置中插入一个,你要怎么找出来呢?(脑淤血直接答了暴力解法)后来问了面试官可以用 map 或者异或

虾皮提前批一面+二面+HR面经

算法和java

  1. hashmap怎么实现的
  2. hashmap拉链怎么优化
  3. Java自定义对象在使用HashMap时要使用两个方法,是哪两个方法
  4. hashCode()和equals()在HashMap中是怎么用的
  5. 业务上实现hashCode()会有哪些考虑? 我回答的不好,只说了考虑根据对象特点设计hashCode()防止数据倾斜,没说这个函数要快和如果equals相同hashcode也要相同
  6. HashMap是怎么扩容的
  7. HashMap数组长度扩充为2倍是怎么移动的
  8. 栈和队列的概念 如何用两个栈实现一个队列
  9. 快速排序说一下,时间复杂度,具体的一次递归partition的过程
  10. 快速排序是稳定的吗?业务上什么时候要求一个排序稳定 我想到了类似kafka这种消息队列,原来的数据有一个时间的顺序,数据里面有分值,按分值排序也不想打乱原有时间顺序

操作系统

  1. 进程与线程的区别
  2. 线程会共享哪些资源 只回答了JMM的 应该还要学一下linux的
  3. JMM里面线程共享和独占的资源有哪些
  4. JAVA堆区和方法区放了什么
  5. JAVA除了堆区方法区还有其他什么区
  6. 讲一下一个函数在栈里面的执行过程
  7. Linux命令,看内存和cpu(top) 查看某个端口的连接(netstat|grep) 看一个返回有多少行(wc 没答上来) 磁盘空间占用情况(df du 没答上来)

MySql

  1. Innodb和Mysaim的区别
  2. 聚簇索引和非聚簇索引,有什么好处
  3. explain做了什么
  4. MVCC简单的原理,为了解决什么问题,MVCC的好处

JVM

  1. Java GC怎么确认对象是否要回收
  2. 可达分析根节点都是哪些东西
  3. Java双亲委派模式
  4. 有哪些应用会破坏双亲委派模式?回答了tomcat,但没回答上来为什么

二面 7月18 14:00 45分钟

  1. 红黑树和AVL树了解吗,对比一下
  2. skiplist介绍一下,怎么实现,redis里面的skiplist和传统的skiplist有什么区别(只答上来了双向和有序集合还用了hash的结构,其实还有key score的区别)
  3. Mysql里面B+索引和hash索引对比(之前没看,只能往hash的优缺点扯,不知道什么时候用hash索引)
  4. ping用到了什么协议,属于哪一层的协议,ping能ping ip,能不能知道ip某个端口能不能访问
  5. https介绍,证书到底怎么防止中间人攻击的(前两天看了逻辑还是讲的不清楚,里面涉及的密钥太多了,面试官让捋清楚)
  6. 给一个二进制数,转十进制,16进制,32进制
  7. 常用的中文编码你知道吗,我们网站有泰语你认为应该用哪个(不知道,只说了utf-8),utf-8是定长还是变长(没看,只记得是3个字节,错了)
  8. 扔一个骰子N次,出现1-6的点,用最少的字节保存这N次的结果(其实是想问变长编码,奈何没看过,跪)
  9. 给你三个版本号 v2.0.1 v2.1.4 v2.8.9 怎么用linux正则匹配这几个版本号
  10. chmod 755代表什么
  11. 你和某个团队合作,你调他的接口有问题,导致你的接口有问题,业务方找你,该怎么处理?
  12. 如果你找另一个团队的人说有问题,他不改你怎么办
  13. 讲一下你之前实习最难的一个任务

字节跳动后端提前批二面(感觉寄了

简历上只要写了的技术栈基本都会问的比较仔细,大家在准备的时候一定要仔细看看自己简历呀。

八股文照常问,问了下线程池之类的。

面试官人还蛮好的,蛮和蔼的,只能说自己技术不到家,还要多多准备,算是一个教训吧以为被了八股文就好了。

算法题先叫我做一个就是两个线程交替增加变量,线程A输出1,3,5,。。。,99,线程B输出2,4,6,8,。。。。,100。这个我用信号量来做的,就是用锁,然后面试官问我有没有其他方法,我说暂时想不到了。总之最后还是写出来了。

然后让我做一个二叉树的右视图。完蛋,二叉树一下想不起来怎么搞了,什么前序遍历,中序遍历忘光了,想了几分钟想不出来就给我换了一个题目

第三个题目是让你找最长不重复 子字符串,我用hashmap做,写是写出来了,但是hashmap的clear指令不知道就用了new hashmap,面试官说你如果这样的话肯定不是O(n)了呀,然后就告诉我clear方法。

联发科嵌入式软件开发提前批一面面经

为什么你只介绍两个项目,其他的你不说吗?

堆和栈有什么区别? 使用堆有什么好处吗?
重写与重载有什么区别?

static的作用? static函数能不能访问其他非static的变量?为什么?

struct和class的默认访问权限?

接口和抽象基类是什么?有什么区别?

你说的是pimpl,和我抽象基类和接口有啥关系?

子类可以继承多个抽象基类吗,为什么?

引用和指针有什么区别?为什么要用指针、为什么要用引用? 你能不能举一个只能使用指针的场景? 引用的地址可变吗?

static修饰的函数可以被覆盖吗?

了解字符串吗,能不能说说streambuf和stringbuf

操作系统中的多线程是如何实现的?
多线程解决了什么问题?

多线程中为什么存在同步问题?怎么解决同步问题?

你写过多线程吗?怎么写的,什么场景?

TCP怎么保证可靠性?

socket编程相关,你的数据怎么发送的?send、read。。你没有listen accept bind吗?

你对TCP做了哪些优化? 你为什么修改TCP协议栈?

为什么你说局域网环境下可以使用1-ACK重传? 使用3-ACK重传是因为乱序吗?

为什么你传输的包长度在几十~几百字节之间?

如果某个请求响应失败了,你是如何处理的?

你的项目如何保证传输安全?HTTPS传输,是你自己写的吗,还是操作系统实现的?我:….

老面试题

58同城

1. Java二面

  1. 说一说反射(然后又问了 spring Aop 实现原理, 答了一个动态代理, AspectJ 就说不出了)
  2. 一个分析时间复杂度的题目
  3. 了解模板设计模式吗
  4. 场景题: 有 100 个门 100 个人, 编号都是 1-100, 每个人过一遍门, 如果门编号是人编号的整数倍, 改变门状态, 门一开始是关闭的, 问最后哪些门打开。
  5. 消息中间件如何解决消息丢失问题
  6. Dubbo 的服务请求失败怎么处理
  7. 对分布式事务的理解
  8. 深入分析几个设计模式
阅读更多

leetcode-2

2. 两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

题目链接:https://leetcode-cn.com/problems/add-two-numbers/

阅读更多

论文翻译-Beyond Self-attention_External Attention using Two Linear Layers for Visual Tasks

摘要

Attention机制,尤其是self-attention,在视觉任务的深度特征表征中起着越来越重要的作用。

self-attention通过使用所有位置的成对相似性计算特征的加权和来更新每个位置的特征,以捕捉单个样本内的长期相关性。然而,self-attention具有$n^2$复杂度,忽略了不同样本之间的潜在相关性。

本文提出了一种新的Attention机制,称为外部注意力机制,它基于两个外部的、小的、可学习的和共享的记忆单元,只需使用两个级联线性层和两个归一化层就可以很容易地实现,它可以方便地取代现有流行体系结构中的self-attention。

外部注意力机制具有线性复杂度,隐含地考虑所有样本之间的相关性。关于图像分类,语义分割,图像生成,点云分类和点云分割任务的广泛实验表明,我们的方法为self-attention和其一些变体提供了可比或卓越的性能,具有较低的计算和存储成本。

阅读更多

Glyce-用于汉字表示的字形向量

摘要

显而易见,像中文这样的标识语言的自然语言处理任务应该受益于这些语言中字形信息的使用。然而,由于字形中缺乏丰富的象形证据,标准计算机视觉模型对字符数据的泛化能力较弱,如何有效地利用字形信息仍有待探索。

在这篇文章中,我们通过提出汉字表示的字形向量Glyce来解决这个问题。

我们有三大创新:(1)利用中国历史文字(如青铜器文字、篆书、繁体字等)丰富文字中的象形证据;(2)我们设计了适合汉字图像处理的CNN结构(称为天田字格-CNN);(3)在多任务学习环境中,我们使用图像分类作为辅助任务,以提高模型的泛化能力。

我们表明,在广泛的中文自然语言处理任务中,基于字形的模型能够一致地优于基于单词/字符ID的模型。我们能够为各种中文自然语言处理任务设置最新的结果,包括标注(NER,CWS,POS),句子对分类,单句分类任务,依存句法分析,以及语义角色标注。例如,该模型在OntoNotes数据集NER上的F1得分为80.6,在BERT上的F1得分为+1.5;在复旦语料库上的文本分类准确率几乎达到99.8%。

阅读更多