[笔记]后端面试知识点准备

  • ThreadLocal引起脏数据

  • ThreadLocal引起的内存泄漏

https://blog.csdn.net/huyunqiang111/article/details/90602943

https://blog.csdn.net/qq_42742861/article/details/90649837

如何减少线程上下文切换

https://www.cnblogs.com/scru/p/14506703.html

  1. 无锁并发编程。多线程竞争锁,会引起上下文切换。如果是多线程处理数据时,可以根据hash分段处理数据,避免锁竞争

  2. CAS算法。java的 atomic原子类 ,compare and swap,比较再交换,也是一直无锁算法。内存值V,旧的预期值A,要修改的新值B。如果内存值和A相同,则修改成B,否则什么都不做。CAS算法与sychronized相对,算是乐观锁。

3 减少不必要的线程数量

4.协程,在单线程里实现多任务的调用。协程是运行在线程之上,当一个协程完成后,可以主动让出,让另一个协程运行在上面

讲一下BIO, NIO, IO多路复用

https://www.cnblogs.com/study-makes-me-happy/p/9603290.html

BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

AIO(NIO.2):异步非阻塞式IO,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。

用没用过线程池,介绍一下线程池的参数

https://blog.csdn.net/pi31415926535x/article/details/115818490#t29

容器用过哪些

ConcurrentHashMap:并发版HashMap

CopyOnWriteArrayList:并发版ArrayList

CopyOnWriteArraySet:并发Set

ConcurrentLinkedQueue:并发队列(基于链表)

ConcurrentLinkedDeque:并发队列(基于双向链表)

ConcurrentSkipListMap:基于跳表的并发Map

ConcurrentSkipListSet:基于跳表的并发Set

ArrayBlockingQueue:阻塞队列(基于数组)

LinkedBlockingQueue:阻塞队列(基于链表)

LinkedBlockingDeque:阻塞队列(基于双向链表)

PriorityBlockingQueue:线程安全的优先队列

SynchronousQueue:读写成对的队列

LinkedTransferQueue:基于链表的数据交换队列

DelayQueue:延时队列

JVM


说一说jvm工作流程

jvm怎么判断哪些对象应该回收

https://www.cnblogs.com/thisiswhy/p/12354864.html

引用计数算法和可达性分析

在对象中添加一个引用计数器,每当一个地方引用它时,计数器就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。不能解决循环依赖的问题

可达性分析算法的思路就是通过一系列的“GC Roots”,也就是根对象作为起始节点集合,从根节点开始,根据引用关系向下搜索,搜索过程所走过的路径称为引用链,如果某个对象到GC Roots间没有任何引用链相连。

  • 哪些对象可作为GC Roots?

虚拟机栈(栈帧中的本地变量表)中引用的对象;

方法区中类静态属于引用的对象;

方法区中常量引用的对象;

本地方法栈中JNI(即一般说的Native方法)引用的对象。

  • java里面有哪几种引用

强引用,软引用,弱引用,虚引用

强引用:是指创建一个对象并把这个对象赋给一个引用变量

软引用:SoftReference aSoftRef=new SoftReference(aRef); 如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收它;

弱引用:弱引用也是用来描述非必需对象的,当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。

虚引用:如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。

  • 引用不可达的对象什么时候才会被真正回收?

至少要 经历两次标记过程:

第一次标记:如果对象在进行可达性分析后发现没有与GC Roots相连接的引用链,那它将会被第一次标记。

第二次标记:经过第一次标记后的对象,根据 此对象是否有必要执行finalize()方法 进行筛选,随后会由收集器对F-Queue中的对象进行第二次小规模的标记。具体如下:

双亲委派机制

  • 三种类型类加载器

引导类加载器jvm、扩展类加载器jre、系统类加载器jdk、(自定义类加载器)

  • 双亲委派机制描述

某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。

jmm内存模型

https://zhuanlan.zhihu.com/p/29881777

对象头中有什么内容?

https://zhuanlan.zhihu.com/p/124278272

Java对象创建的过程

https://zhuanlan.zhihu.com/p/143743569

讲解一下CMS垃圾回收器的具体回收过程以及特点

java.class是在哪种类加载器里面

新生代survivor为什么要分两部分

老年代的回收算法有什么

cms介绍一下

full gc发生在什么时候

多线程如果多次调用start会怎么样

什么情况下会触发full gc

Java web框架

============================================================================

spring


AOP IOC 的原理

看过Spring的源代码吗(了解很少)

spring注解

https://blog.csdn.net/u010648555/article/details/76299467

@Component :标准一个普通的spring Bean类。 @Repository:标注一个DAO组件类。 @Service:标注一个业务逻辑组件类。 @Controller:标注一个控制器组件类。 这些都是注解在平时的开发过程中出镜率极高,@Component、@Repository、@Service、@Controller实质上属于同一类注解,用法相同,功能相同,区别在于标识组件的类型。 @Component可以代替@Repository、@Service、@Controller,因为这三个注解是被@Component标注的。如下代码

@Target({ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Component

public @interface Controller {

String value() default “”;

}

spring 生命周期(不会),spring循环引用(不会),mybatis底层流程(没搞懂问题,不会)

拦截器和过滤器的区别?

②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。

③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。

⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

权限管理问了一个小问题,表示不会。

controller层,访问一个url的过程是怎样的

bean的生命周期、bean互相依赖怎么实现

说一下spring,把你了解的都说一下(说了自己的理解、spring的优点、注解、@autowired@resource区别、IOC、AOP等)

两种动态代理的区别

MVCC


https://juejin.cn/post/6871046354018238472

Spring中的三级反转

怎么通过注解注入的@Autowird,@Resource等

接口和抽象类的设计思路(面试官提到Spring中的约定大于配置)

Spring-bean的循环依赖以及解决方式

dispatcherservlet流程

mybatis


说一下Mybatis(说了优点、resultMap/resultType区别,#/$)

为什么要用Mybatis,最大的好处是什么

Tomcat


类加载以及双亲委派介绍一下,tomcat类加载器了解吗(不了解)

https://www.cnblogs.com/aspirant/p/8991830.html

不遵循双亲委派

数据库

=====================================================================

https://blog.csdn.net/qq_17623363/article/details/115014444

mysql读的时候加锁么(我说读锁,面试官说读的是快照,不加锁,我就又提到MVCC)

https://cloud.tencent.com/developer/article/1169873

B+树相对B树的优势?


联合索引的底层实现是?

主键索引、二级索引、联合索引的区别;

假设有联合索引(a,b,c),判断下面哪些用到联合索引

select * from A where a=x and b=x;

select * from A where a=x and c=x;

select * from A where b=x and c=x;

下面两个查找那个效率高?这题我直接不知道

select * from A where a=x and b=x order by c;

select * from A where a=x and c=x order by b;

使用explain解析sql,里面的using where 和using index分别是什么意思?

选择索引的时候,mysql如何决定使用哪一个索引?

linux里面死锁了,有什么方法可以解决?

什么是事务


数据库的隔离级别


怎样防止大事务,及处理办法


如何防止sql注入


mysql的存储引擎


mysql有哪些索引


聚集索引和非聚集索引的区别

https://blog.csdn.net/riemann_/article/details/90324846

说一说联合索引和覆盖索引

InnoDB和MyISAM的区别

mysql使用B+树索引而不使用B树或者hash索引

事务隔离级别,脏读和幻读如何解决的。

数据库隔离级别以及可能产生的问题

分别解释脏读,不可重复度,幻读(不可重复读和幻读的区别在哪里)

数据库中的聚合函数

innoDB底层索引和行锁、表锁的关系

B+树和B树的区别,为什么要使用B+树不用B树?

红黑树有了解吗,和平衡二叉树有什么区别

mysql的innodb引擎吗?相比于其他引擎有什么优缺点

索引的底层实现是怎么样的

为什么用B+树,其他的哈希数组或者其他树不能存储吗

MySQL的binlog undo redolog

为什么innodb是RR的级别

有一个很大的表,有客户id和订单号两列,需要分表 现在我主要的功能是要查看每个客户ID有什么订单,还有就是订单号属于哪个用户,我怎么分表合适

了解缓存嘛

联表查询sql语句

介绍一下数据库的聚簇索引和非聚簇索引的区别,它们底层的数据结构是什么?为什么不用B树?

介绍一下数据库的四种隔离机制以及他们能分别解决什么并发事务带来的问题?什么是幻读,什么是不可重复读?

数据库是如何解决幻读的?原理是什么?(这里要深入回答MVCC实现原理和间隙锁)

如果说缓存了一个热数据,突然过期失效了。请求全部打在了数据库上会导致服务器崩溃,这里有什么比较好的解决办法?(先说一下这种情况是缓存击穿,然后我的回答是设置热数据永不过期)

乐观锁和悲观锁

数据库的乐观锁怎么实现(具体一点)

mysql主从复制说一下,为什么这样做

long sql怎么优化,比如:分页查询速度很慢

用主键索引和唯一索引有什么区别

加很多间隙锁的问题

如果解决mysql中的死锁问题(面试官的意思是用队列控制,相当于公平锁)

计网

====================================================================

TCP


https://luo-shaoxiong.gitee.io/erxiong-demo/#/./docs/%E7%BD%91%E7%BB%9C

TCP协议是如何保证可靠的

https://blog.csdn.net/liuchenxia8/article/details/80428157

校验和

序列号

确认应答

超时重传

连接管理

流量控制

拥塞控制

time-wait作用?用哪个命令可以查看?

  • 可靠地实现了TCP全双工连接的终止

  • 为使旧的数据包在网络因过期而消失

负载均衡


负载均衡有哪些算法

https://zhuanlan.zhihu.com/p/151835622

hash 随机 轮询 权重轮询 权重交叉轮询

Nginx 默认的负载均衡策略就是一种改进的加权轮询策略

其他


cookie session区别 用户信息存在哪

https://blog.csdn.net/chen13333336677/article/details/100939030

讲一下https。为什么要采用混合加密的方式?相对于直接采用非对称加密效率是快了还是慢了

https://luo-shaoxiong.gitee.io/erxiong-demo/#/./docs/%E7%BD%91%E7%BB%9C

用户在浏览器发起HTTPS请求(如 https://www.mogu.com/),默认使用服务端的443端口进行连接;

HTTPS需要使用一套CA数字证书,证书内会附带一个公钥Pub,而与之对应的私钥Private保留在服务端不公开;

服务端收到请求,返回配置好的包含公钥Pub的证书给客户端;

客户端收到证书,校验合法性,主要包括是否在有效期内、证书的域名与请求的域名是否匹配,上一级证书是否有效(递归判断,直到判断到系统内置或浏览器配置好的根证书),如果不通过,则显示HTTPS警告信息,如果通过则继续;

客户端生成一个用于对称加密的随机Key,并用证书内的公钥Pub进行加密,发送给服务端;

服务端收到随机Key的密文,使用与公钥Pub配对的私钥Private进行解密,得到客户端真正想发送的随机Key;

服务端使用客户端发送过来的随机Key对要传输的HTTP数据进行对称加密,将密文返回客户端;

客户端使用随机Key对称解密密文,得到HTTP数据明文;

后续HTTPS请求使用之前交换好的随机Key进行对称加解密。

RSA

http状态码3xx是什么?302和303的区别是什么

常见的HTTP相应状态码:

200:请求被正常处理

204:请求被受理但没有资源可以返回

206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。

301:永久性重定向

302:临时重定向

303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上

304:发送附带条件的请求时,条件不满足时返回,与重定向无关

307:临时重定向,与302类似,只是强制要求使用POST方法

400:请求报文语法有误,服务器无法识别

401:请求需要认证

403:请求的对应资源禁止被访问

404:服务器无法找到对应资源

500:服务器内部错误

503:服务器正忙

HTTP协议了解吗?说一下请求头有哪些内容

HTTP Request Header 请求头

Accept:指定客户端能够接收的内容类型。

Accept-Charset:浏览器可以接受的字符编码集。

Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型。

Accept-Language:浏览器可接受的语言。

Accept-Ranges:可以请求网页实体的一个或者多个子范围字段。

AuthorizationHTTP:授权的授权证书。

Cache-Control:指定请求和响应遵循的缓存机制。

Connection:表示是否需要持久连接。(HTTP 1.1默认进行持久连接)

CookieHTTP:请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。

Content-Length:请求的内容长度。

Content-Type:请求的与实体对应的MIME信息。

Date:请求发送的日期和时间。

Expect:请求的特定的服务器行为。

From:发出请求的用户的Email。

Host:指定请求的服务器的域名和端口号。

If-Match:只有请求内容与实体相匹配才有效。

If-Modified-Since:如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码。

If-None-Match:如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变。

If-Range:如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。

If-Unmodified-Since:只在实体在指定时间之后未被修改才请求成功。

Max-Forwards:限制信息通过代理和网关传送的时间。

Pragma:用来包含实现特定的指令。

Proxy-Authorization:连接到代理的授权证书。

Range:只请求实体的一部分,指定范围。

Referer:先前网页的地址,当前请求网页紧随其后,即来路。

TE:客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息。

Upgrade:向服务器指定某种传输协议以便服务器进行转换(如果支持。

User-AgentUser-Agent:的内容包含发出请求的用户信息。

Via:通知中间网关或代理服务器地址,通信协议。

Warning:关于消息实体的警告信息

HTTP Responses Header 响应头

Accept-Ranges:表明服务器是否支持指定范围请求及哪种类型的分段请求。

Age:从原始服务器到代理缓存形成的估算时间(以秒计,非负)。

Allow:对某网络资源的有效的请求行为,不允许则返回405。

Cache-Control:告诉所有的缓存机制是否可以缓存及哪种类型。

Content-Encodingweb:服务器支持的返回内容压缩编码类型。。

Content-Language:响应体的语言。

Content-Length:响应体的长度。

Content-Location:请求资源可替代的备用的另一地址。

Content-MD5:返回资源的MD5校验值。

Content-Range:在整个返回体中本部分的字节位置。

Content-Type:返回内容的MIME类型。

Date:原始服务器消息发出的时间。

ETag:请求变量的实体标签的当前值。

Expires:响应过期的日期和时间。

Last-Modified:请求资源的最后修改时间。

Location:用来重定向接收方到非请求URL的位置来完成请求或标识新的资源。

Pragma:包括实现特定的指令,它可应用到响应链上的任何接收方。

Proxy-Authenticate:它指出认证方案和可应用到代理的该URL上的参数。

refresh:应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持)

Retry-After:如果实体暂时不可取,通知客户端在指定时间之后再次尝试。

Serverweb:服务器软件名称。

Set-Cookie:设置Http Cookie。

Trailer:指出头域在分块传输编码的尾部存在。

Transfer-Encoding:文件传输编码。

Vary:告诉下游代理是使用缓存响应还是从原始服务器请求。

Via:告知代理客户端响应是通过哪里发送的。

Warning:警告实体可能存在的问题。

WWW-Authenticate:表明客户端请求实体应该使用的授权方案。

一次TCP连接上能传多少个http请求?(实际上问的就是长连接短连接,分类讨论即可)

在 HTTP/1.1 中 Connection 默认是 keep-alive 故可以进行多个http请求(长连接)

https://blog.csdn.net/ywlmsm1224811/article/details/96436768

用UDP进行传输的话,假设要发送1000M的文件,但是接收限制是800M,能传成功吗?如果能成功,怎么传?如果不成功,说出不成功的理由。(这里我答的是不成功,回答的理由是UDP是没有拆包功能的,所以会直接传输失败。面试官点头说了个好的,我也不知道对不对)。

为什么要CA认证,这么做的意义是?

  • HTTPS需要使用一套CA数字证书,证书内会附带一个公钥Pub,而与之对应的私钥Private保留在服务端不公开;

  • 客户端收到证书,校验合法性,主要包括是否在有效期内、证书的域名与请求的域名是否匹配,上一级证书是否有效(递归判断,直到判断到系统内置或浏览器配置好的根证书),如果不通过,则显示HTTPS警告信息,如果通过则继续;

  • 借助CA机构和系统根证书的机制保证了HTTPS证书的公信力。

拥塞控制

输入url发生了什么

https://zhuanlan.zhihu.com/p/43369093

IP地址和MAC地址关系,为何需要两个地址

https://blog.csdn.net/zs18753479279/article/details/115611132

os

====================================================================

进程和线程的通信(管道,信号量等)

管道的区别

信号量底层是如何工作的(没答出来,估计特别扣分,因为楼主是典型的八股文选手,操作系统能问这么多是我没想到的)

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。

面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-U0NZY8ua-1713381997146)]

[外链图片转存中…(img-hZjYa0Qm-1713381997147)]

[外链图片转存中…(img-vey1uBva-1713381997147)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。

面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!

[外链图片转存中…(img-3z3uVRvv-1713381997147)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值