写在最后
为了这次面试,也收集了很多的面试题!
以下是部分面试题截图
-
volatile、CAS、synchronized原理 什么情况下发生指令重排?各自的应用场景是什么
-
synchronized的用法以及有什么劣势 ?
-
介绍一下Syncronized锁,如果用这个关键字修饰一个静态方法,锁住了什么?如果修饰成员方法,锁住了什么?
-
当一个线程进入一个对象的synchronized方法A之后,其它线程是否可进入此对象的synchronized方法B?
-
Synchronized原理 ? monitor是什么? 是怎么定义的? 一个什么标志? 在哪里标志的?
-
那我现在有一个父类synchronized修饰非static方法和两个子类,现在两个子类调用这个方法会发生竞争吗?static的呢?为啥?
-
在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
-
synchronized底层实现,偏向锁、自旋锁、轻量级锁、重量级锁,能否从重量级到轻量级,synchronized加在类和方法上的区别;为什么是可重入的?不可中断解释一下
-
synchronized在jdk后面的版本做了优化,哪些优化
-
synchronize与lock的区别?
-
讲下Synchronized是怎么升级的?
-
线程池有什么好处?
-
Java中有几种线程池?
-
单核CPU是否会出现线程安全问题?单核cpu有必要使用线程池吗?
-
线程池设计依据是什么?让你实现一些缓存线程池,你怎么设计?
-
线程池并行计算的方式?
-
线程池运行流程,参数,策略(拒绝策略) 那这个 core 和 maximum 要怎么设的?关系是什么?线程池的场景设计,要根据IO密集型和CPU密集型来设计
-
线程submit的过程?
-
介绍一下生产者消费者模式?
-
happen-before原则
-
fast-fail和fail-safe机制,
-
Arraylist和Linkedlist线程安全吗?Java中有没有提供线程安全的版本?CopyOnWriteArrayList怎么保证读写安全的?CopyonWriteArraylist的lock用的是哪个锁
-
了解哪些阻塞队列
-
怎么定位死锁?如何观察死锁,比如用java命令
-
Java本身可以自动解决死锁问题吗?mysql可以解决吗?怎么解决的?
-
future的原理
-
无锁情况下如何保证线程安全
-
Executors中四个生成线程的实现类有什么特点,适用于什么场景
-
CLH同步队列怎么实现非公平与公平的?
-
十个线程,分别执行不同任务,如何让他们执行完后,相互等待,一同出发
-
无锁队列的实现
-
写日志类 , 满足多线程向文件中写日志,设计一下需要实现哪些方法,说一下大概思路。
==============================================================
-
讲一下非公平锁和公平锁在reetrantlock里的实现。
-
锁本质上是如何实现一个锁的操作?加锁有什么开销?可重入锁是怎么实现的。
-
如何确保N个线程可以访问N个资源同时又不导致死锁?
-
操作系统中的各种锁的实现原理,互斥锁、悲观锁、乐观锁。
-
分布式锁有哪些实现? 除了Lua解决方案呢? 怎么解除分布式锁?
-
JVM 引入的锁优化技术有哪些?
-
锁膨胀 , 锁消除
-
ReentrantReadWriteLock了解吗?ReentrantReadWriteLock 底层实现的原理?
-
自旋锁的优点
-
Segment是什么?
-
公平锁和非公平锁?
-
加锁解锁过程中,线程内具体的操作了解过吗?
-
操作系统的PV原语和JAVA多线程里面的锁有什么关系,说一下PV原语
-
银行家算法
================================================================
-
JVM内存模型
-
JVM运行时数据区域? 1.6,1.7,1.8区别?
-
String a=“a”;String b=“b”; 问"a" "b"等不等于a b
-
Java中堆栈的区别。堆栈的增长方向有哪些不同?
-
jvm最大内存限制多少 ? 在一台16G内存的机器上,JVM默认内存空间多大?
-
jvm是如何实现线程?
-
了解过字节码的编译过程吗
-
eden区,survial区?
-
垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?(垃圾回收)
-
JVM回收算法和回收器,CMS采用哪种回收算法,怎么解决内存碎片问题? 为什么年轻代要用复制算法?并发标记阶段处理速度慢的原因可能是什么。怎么进行优化
-
阐述GC算法 , 那并发量很高时,使用哪种算法?
-
GC如何调优?
-
垃圾回收触发条件 ? 是需要回收就立即回收,还是怎么办?通常哪些设为安全点?
-
GC中如何判断对象需要被回收? 一个方法中有A a = new A();这么一条语句,方法执行完后A的实例化对象在GC时能否被回收掉
-
GCRoot可以是哪些对象
-
什么时候会触发full gc? FullGC是否停顿用户线程?发生Full GC的时候,一定会发生stop the world吗?怎么避免full gc ? 频繁出现full gc应该如何排查?
-
minor gc如果运行的很频繁,可能是什么原因引起的,minor gc如果运行的很慢,可能是什么原因引起的?
-
对象怎么分配内存,基于什么原则;
-
类加载过程 ? 初始化阶段是干什么的?
-
双亲委派模型的好处是什么?
-
什么情况下用自定义类加载器?
-
对象头中都有什么信息?
-
了解过JVM调优没,基本思路是什么
-
java中内存泄露是啥,什么时候出现内存泄露? jvm的oom都怎么发生? Java 内存模型中哪一个区域不会发生 OOM 异常? 如何确定内存泄漏的位置?
-
cms算法 , 与G1的区别? CMS收集器用的什么算法?以及CMS的缺点?CMS对产生内存碎片的问题有什么解决方案吗?说下G1收集器的优点硬软弱虚引用,以及软引用的回收时机
-
java8的metaspace
-
new一个对象经历了哪些过程?jvm 里 new 对象时,堆会不会发生抢占?那你怎么设计jvm的堆的线程安全?
-
jvm虚拟机除了可以用在Java上,还可以用到其他语言上吗?
-
新生代里是怎么划分的?每个区域的比例?你觉得设计者为什么要这么划分?
-
Java自带的JVM监控软件介绍survivor空间不够怎么办
-
直接(堆外)内存的使用
1)、堆外内存定义
内存对象分配在Java虚拟机的堆以外的内存,这些内存直接受操作系统管理(而不是虚拟机),这样做的结果就是能够在一定程度上减少垃圾回收对应用程序造成的影响。使用未公开的Unsafe和NIO包下ByteBuffer来创建堆外内存。
2)、为什么使用堆外内存
1、减少了垃圾回收
使用堆外内存的话,堆外内存是直接受操作系统管理( 而不是虚拟机 )。这样做的结果就是能保持一个较小的堆内内存,以减少垃圾收集对应用的影响。
2、提升复制速度(io效率)
堆内内存由JVM管理,属于“用户态”;而堆外内存由OS管理,属于“内核态”。如果从堆内向磁盘写数据时,数据会被先复制到堆外内存,即内核缓冲区,然后再由OS写入磁盘,使用堆外内存避免了这个操作。
3、堆外内存申请
JDK的ByteBuffer类提供了一个接口allocateDirect(int capacity)进行堆外内存的申请,底层通过unsafe.allocateMemory(size)实现。Netty、Mina等框架提供的接口也是基于ByteBuffer封装的。
注:unsafe.allocateMemory(size)最底层是通过malloc方法申请的,但是这块内存需要进行手动释放,JVM并不会进行回收,幸好Unsafe提供了另一个接口freeMemory可以对申请的堆外内存进行释放。
在Cleaner 内部中通过一个列表,维护了针对每一个 directBuffer 的一个回收堆外内存的线程对象(Runnable),回收操作是发生在 Cleaner 的 clean() 方法中
4、堆外内存释放
其中first是Cleaner类的静态变量,Cleaner对象在初始化时会被添加到Clener链表中,和first形成引用关系,ReferenceQueue是用来保存需要回收的Cleaner对象。如果该DirectByteBuffer对象在一次GC中被回收了此时,只有Cleaner对象唯一保存了堆外内存的数据(开始地址、大小和容量),在下一次FGC时,把该Cleaner对象放入到ReferenceQueue中,并触发clean方法。
此时,只有Cleaner对象唯一保存了堆外内存的数据(开始地址、大小和容量),在下一次FGC时,把该Cleaner对象放入到ReferenceQueue中,并触发clean方法。
Cleaner对象的clean方法主要有两个作用:
1、把自身从Clener链表删除,从而在下次GC时能够被回收
2、释放堆外内存
32、破坏双亲委派的场景。加载同一个类怎么做。
33、提到Java全局的缓存怎么处理防止OOM
44、Java JIT听说过吗
================================================================================
-
网络编程相关的内容; 给你一个网络上图片的URL,怎么将其读取并写入本地指定磁盘
-
非阻塞io和阻塞式io的区别
-
Java中的IO有哪些类,用了哪些设计模式
-
NIO怎么实现? NIO对比于BIO优势是什么
-
NIO中buffer中在传输文件时如何工作
-
select、poll、epoll实现和区别
-
零拷贝?
-
当现在是epoll_Wait时,有一个io请求发送了过来,会发生什么?
-
Java中异步调用或者说异步IO实现了解吗?
-
Netty的使用场景
-
netty如何解决粘包和拆包问题
===================================================================
- XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
=====================================================================
-
用过哪些java工具,有过调优经验吗
-
如果线上代码出问题怎么排查?内存泄漏怎么排查?
-
JDK提供了哪些性能分析工具 , 作用
二、设计模式
==================================================================
-
java中有哪些代理模式?
-
如何实现动态代理 ? 两种动态代理的区别?
-
IO流熟悉吗,用的什么设计模式?
==================================================================
- 介绍一下单例模式?手写单例模式?懒汉式的单例模式如何实现单例?
==================================================================
-
介绍一下策略模式?
-
设计模式了解哪些,手写一下观察者模式?
=================================================================
-
说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法
-
j2ee常用的设计模式?说明工厂模式。
-
简述一下你了解的Java设计模式 开发中都用到了那些设计模式?用在什么场合?
三、Java web编程
====================================================================
-
JAVA应用服务器有那些?
-
启动项目时如何实现不在链接里输入项目名就能启动?
-
1分钟之内只能处理1000个请求,你怎么实现,手撕代码?
-
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?(JSP)
-
说一说四种会话跟踪技术
-
讲讲Request对象的主要方法
-
过滤器有哪些作用和用法?
-
请谈谈你对Javaweb开发中的监听器的理解?
-
说说web.xml文件中可以配置哪些内容?
-
get和post的区别
-
token , cookie和session的区别 , 与localstorage的区别
-
session怎么保证多次访问是同一个ID
-
谈谈Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分别是做什么的?有什么区别?
-
如何设置请求的编码以及响应内容的类型?
-
Servlet相关接口 , Servlet里面有哪些方法 ? Servlet执行时一般实现哪几个方法?
-
Servlet 3中的异步处理指的是什么?
-
servlet生命周期?servlet是单例模式么?为什么是单例?Servlet和cgi有什么区别?
-
服务器收到用户提交的表单数据,到底是调用Servlet的doGet()还是doPost()方法?
-
servlet写过么,底层是怎么处理前台传来的请求的
-
Servlet中如何获取用户提交的查询参数或表单数据?
-
Servlet中如何获取用户配置的初始化参数以及服务器上下文参数?
-
登录功能如何保证安全性。(MD5+盐)为什么用MD5,讲一下机制。还有什么保证安全的加密方式?
-
设计一个怎么使得验证码有效期,过了一段时间就过期了。
-
如何实现单点登录
====================================================================
-
forward与redirect区别,说一下你知道的状态码,redirect的状态码是多少?
-
常见的加解密算法方式了解吗?对称加密和非对称加密的算法有哪些?3DES为什么叫3DES?
-
是否单例,为什么是单例。
-
如何在基于Java的Web项目中实现文件上传和下载?
-
缓存的优点?
-
说说MVC的各个部分都有那些技术来实现?如何实现?
-
什么是DAO模式?
-
请问Java Web开发的Model 1和Model 2分别指的是什么?
-
如何保存会话状态,有哪些方式、区别如何
-
分布式session如何管理,你有哪些方案
-
布隆过滤器及其实现
-
项目中数据如何加密传输?
-
在用户成功登录之后怎么保证数据安全传输?如何保证请求合法?
-
你了解的web安全问题都有什么,什么是xss攻击? CSRF攻击 ? JSONP问题? 追问crfs攻击,怎样伪造受信用的的客户端,具体怎么伪造的。
-
系统化怎么进行分页的呢?我答了sql语句limit、数组分页还有拦截器分页。
-
tomcat的类加载机制。
-
登录逻辑?如何保证登录安全?用户携带的这个token和谁进行比较?怎么获取token?
-
什么是中间人攻击
-
安全相关,token的设计应该考虑哪些因素?
-
tomcat有哪些配置?有没有修改过tomcat的参数?如果有修改过什么?tomcat底层怎么实现的?Tomcat是类加载实现结构,它有哪些实现类加载器
-
dos攻击怎么回事,怎么解决
-
服务端是怎么验证用户的?生成的token有可能重复吗?
-
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
-
登录怎样校验密码,海量用户同时登录怎么优化
========================================================================
-
请谈谈转发和重定向的区别?
-
forward 和redirect的区别
-
BS与CS的联系与区别。
-
什么是Web Service(Web服务)?
-
大型网站在架构上应当考虑哪些问题?
-
jwt是怎么实现的
-
Tomcat启动主要负责什么工作?
-
tomcat为什么会出现假死,既然死锁是某几个线程之间出现循环等待,为什么整个tomcat会假死。
-
禁用cookie怎么办
-
单拎出来的跨域问题,了解下浏览器同源(协议,域名,端口)政策,对后端的限制(AJAX等,前端问题暂不考虑),解决方法(JSONP,WebSocket,CORS),CORS(Cross-Origin Resource Sharing)相关内容,头字段 Origin,Access-Control-Allow-Origin 等;
-
SOCKS
三、Java常用框架及组件
===================================================================
-
介绍一下spring? spring框架的优点? Spring框架为企业级开发带来的好处有哪?缺陷有哪些?怎么避免这个缺陷
-
介绍一下bean的生命周期
-
Spring里面注解用过没有?autowired 和resource区别?
-
Spring中BeanFactory和ApplicationContext的区别?
-
请问Spring中Bean的作用域有哪些?
-
Spring加载Bean的过程? Spring框架xml文件中配置bean的实例化过程?了解Spring是怎么递归地加载Bean的吗?BeanFactory和FactoryBean有什么区别?
-
Spring getBean的整个流程
-
谈谈Spring中自动装配的方式有哪些?
-
说一下IOC和AOP? DI的方式有几种?哪几种?
-
spring怎么解决循环引用的问题,比如,A对象构造时需要B对象;B对象构造时需要A对象
-
springIOC原理?说说Ioc容器的加载过程Spring IOC底层存储结构 ? 自己实现IOC要怎么做,哪些步骤?
-
aop的应用场景?
-
AOP的原理是什么? 除了动态代理还有什么?
-
拦截器和AOP的关系 Spring拦截器的底层是怎么实现的
-
你如何理解AOP中的连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)这些概念?
-
#号和$号的区别
-
Spring支持的事务管理类型有哪些?你在项目中使用哪种方式?
-
什么是Spring的声明式事务管理。
-
AOP 的 @transaction 是怎么做的?为什么不加这个注解就不是事务?
-
spring事务传播机制
-
spring中用到了哪些设计模式
-
Spring Security 的核心原理
-
如果spring的事务中抛出了IOException,会回滚吗?
-
在spring中双重检查锁有效吗
====================================================================
-
持久层设计要考虑的问题有哪些?你用过的持久层框架有哪些?
-
解释一下MyBatis中命名空间(namespace)的作用。
-
Mybatis原理
-
MyBatis中的动态SQL是什么意思?
-
MyBatis 如何获取自增主键的值?底层怎么实现?
-
mybatis 如何防止SQL注入
-
mybatis如何配置测试和开发环境下不同的链接
-
mybatis和jdbc区别,什么是一级二级缓存,为什么一般不开启二级缓存有什么问题?#KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 24: …别对应什么?mybatis中 #̲ 和 ¥ 的区别,sql注入问…{}的区别是什么?预编译的作用
-
写一下mybatis的批量插入
-
mybatis中xml是怎么解析的?
-
讲讲mybatis和jpa的区别
-
mybatis哪里用到过反射
-
mybatis的数据库表与配置文件是如何实现映射关系的
================================================================
-
Spring MVC注解的优点
-
@Controller和@RestController的区别?
-
那一个controller分别调用两个Service再调用两个Dao时,注解加在什么层,如何实现事务?那两个Service强相关呢?(还是事务传播,加入到一个事务中。)再问:怎么加入呢?(答:事务管理器),那是事务管理器里的哪个对象呢?(答:记 记不清了
-
springmvc和spring-boot区别?
-
SpringMVC的运行机制,运行机制的每一部分的相关知识?
-
拦截器和过滤器区别? springmvc拦截器和servlet过滤器先用哪个
-
springMVC中对整个请求的处理流程是怎样的?返回json的话是用哪个view?
-
spring框架从URL请求如何找到controller
-
RestFul 规范是怎么样的?
-
如何使用SpringMVC对用户写入的参数进行修改?
-
如果一个Dao有两个实现,一个连接mysql,一个oracle,service要自动注入这个类,如果直接注入的话会有冲突,怎么解决冲突?
=======================================================================
-
Spring Boot的启动函数是怎样的? 怎么找到启动类
-
springboot如何实现自动装配
-
springboot扫描配置的过程
==================================================================
-
Dubbo原理
-
讲 Dubbo SPI 的源码?
-
讲 Dubbo 服务暴露源码 + Dubbo 服务注册
-
讲一下 Dubbo 服务引用底层?
-
讲一下 Dubbo RPC 协议调用过程,使用哪些协议?
-
Dubbo 的连接
-
Dubbo 的负载均衡
-
dubbo为什么比springcloud快 , 从网络角度分析dubbo为什么比springcloud快 dubbo服务注册怎么做,过程。如果几万个服务怎么配的。怎么设计服务中心效率更高。
==================================================================
-
kafka 消费者组和分区的关系? kafka有5个消费者,4个分区,是如何消费?kafka的分区有哪些方式,分区算法?
-
kafka 应答机制,选举算法
-
kafka 消息丢失的原因? 消息丢失场景和怎么保证数据不丢失 ? 如何防止重复消费
-
kafka如何实现消息是有序的?
-
kafka如何实现多线程的消费?
-
接口防刷限流是怎么实现的,较短时间出现大量请求该如何解决
-
kafka的重复消费?
-
kafka异步刷盘,数据会不会丢
=======================================================================
-
Mybatis和Hibernate区别?
-
介绍一下你了解的Java领域的Web Service框架。
===============================================================
- ES怎么用的?倒排索引讲一下?
=====================================================================
-
rabbitmq从发送到接受之间的具体过程
-
rabbitMQ事务的底层实现原理
-
为什么使用rabbit mq?
-
rabbitmq能够多个线程进行消费吗?
-
那如果有的事件消息的数量很多,有的很少怎么办?做了负载均衡么?
=======================================================================
-
zookeeper的服务注册
-
zookeeper的节点类型
-
说下CAP理论,Zookeeper 舍弃了哪个 , Zookeeper和Eureka分别是满足CAP中的哪些 redis属于哪种 分区容错性的意义?
四、数据库
=====================================================================
-
写SQL:找出每个城市的最新一条记录。
-
一个学生表,一个课程成绩表,怎么找出学生课程的最高分数
-
插入一条数据时如何直接取到当前数据的id
-
有一组合索引(A,B,C),会出现哪几种查询方式?tag:sql语句
-
写一下创建存储过程的语句
-
建立组合唯一索引的语句
-
delete truncate 区别
-
SQL 中select…limit and offset 会有什么问题,怎么解决
-
一个考试成绩明细表,字段有id,class_name,user_name,score,找出考试分数大于90分的人数最多的班级
-
我现在要查询某一个商家某段时间内的订单金额,sql语句怎么写?
====================================================================
-
mysql和Oracle的区别?
-
数据类型(datetime timestamp)的大小
-
怎么防止sql注入?
-
一条SQL语句在MySQL中会经过怎样的过程
-
数据库两种引擎 InnoDB和MyISAM的区别?介绍一下什么时候用Innodb什么时候用MyISAM。
-
讲一下事务ACID的特性?怎么保证事务的原子性?
-
mysql数据库的事务,隔离级别 , 可重复读如何实现的?给定一个场景,银行账户相互转账, 你觉得设定什么隔离级别比较合适?
-
数据库索引介绍一下。 数据库索引适合用在什么场景下?不适合用在什么场景下?什么情况下索引会失效?
-
索引了解嘛,底层怎么实现的,什么时候会失效
-
聚族索引和非聚簇索引
-
如何让模糊查询使用索引
-
数据库乐观锁和悲观锁 ? 如何实现 ? 各有什么优缺点 ? 缺点如何解决 ?
-
mysql主从复制? 延迟了怎么办?
-
left join和right join的区别?给两张表 100行和50行,left join后有多少行?如果有一行重复呢? 知道数据库的join操作吗?谈谈这个操作怎么做
-
谈一下你对继承映射的理解。
-
说出数据库连接池的工作机制是什么?
-
JDBC中如何进行事务处理?
-
行锁和表锁的区别 ? 数据库行锁如何触发?行锁实现原理?
-
sql中limit会不会越来越慢,为什么
-
建立abc三列的索引,问ac bc ba 会不会用到索引 , 两个字段的联合索引, 是一棵树 还是两个树? 联合索引为什么要遵循最左前缀原则?
-
数据库主从同步是怎么做的
-
间隙锁的锁定范围是多少?Select * from t where id<4,这条sql中,间隙锁锁的范围是什么?是(1,4)还是(-无穷,4)?
-
MySQL宕机怎么解决?
-
一条Update语句,一定会更新索引吗
-
增删操作相比查找操作的弊端
-
like关键字进行查找会用到索引吗? like“aa%”索引是否可以 ?为什么like后跟%不走索引? mysql如何知道sql语句用没用上索引?
-
查询表中最后一个记录,哪个索引更快,为什么
-
mysql视图
-
MySQL数据库的select…for update是只锁一行数据么??分析一下
-
uuid做主键可以吗?为什么?
-
间隙锁锁的是数据还是索引? 间隙锁解决的是啥问题
-
单表更新是否需要事务?
-
mysql主键索引和unique索引区别 ? 主键索引可以用来建立复合索引吗
-
在一个事务A方法里调另一个事务B方法,映射到mysqlA和B两个事务,这两个事务可以并存吗?
-
Mysql索引 hash和btree什么情况使用
-
覆盖索引
-
mysql列扩容的时候,是否可以进行select, update
-
select … for update加锁时,宕机时锁会释放吗?会的话,原理是什么?
-
MySQL 的 binlog、bitmap , redo log 和 undo log
-
幂等的实现,fail over怎么处理
-
update … where a = 1;这句语句innoDB会加几行锁?
-
什么时候会造成数据库死锁?什么时候会造成数据库索引失效?
====================================================================
-
数据库优化方法
-
数据库自己做了哪些优化,
-
vachar 字段非常大,数据库怎么进行优化存储
-
MySQL做高可用了么?怎么做的?过程简单讲一下?
-
怎么定位数据库慢语句?怎么分析 SQL 语句的性能?如何对查询语句优化?分析SQL的字段?explain,会关注哪些字段?
-
有一个查询语句,速度特别的慢,服务器都快不行啦,你咋排查呢?
-
那怎么进行读写优化?
-
MySQL索引优化,索引设计原则。 对索引的内容有什么要求,比如年龄字段适不适合建立索引?做过索引优化不?explain语句出来的结果中的type如果为index是啥意思
-
平时有查看过sql的执行计划吗
-
怎么去监控MySQL的性能问题?怎么查看一个sql语句的执行效率?
-
数据量大时如何分库分表,原则是什么,如何管理id
-
数据库如何水平切分,垂直切分 ?
-
设计一个实时监测 MySQL 的工具,可以监测每条 SQL 语句运行时间、事务的运行和数据库的连接信息等
-
mysql进程利用率很高如何排查问题
-
MySQL 大表翻页优化怎么做,具体情境100w页之后
====================================================================
-
数据库的架构
-
mysql的通信协议
-
mysql 索引 b 和B+ 的区别是什么? B+树索引的核心在于什么? 我们知道树有很多种,为什么要选择b+树,而不选择其他?为什么要用 B+ 树而不用红黑树? 为什么B+树磁盘读写代价更低
-
为什么myisam不支持行锁
-
mycat分库分表了解吗?
-
数据库删除操作底层实现
-
Innodb如何避免幻读的?innodb怎么实现可重复读?
-
java访问的数据库的时候速度瓶颈问题是什么造成的,为什么会有瓶颈?
-
InnoDB是如何实现聚集索引的?
-
mvcc是什么怎么解决未提交读的。mvcc 适用的隔离级别,为什么
======================================================================
-
数据库的三范式? 设计表的时候一定要遵从范式吗?
-
如何设计表,从安全、性能、高并发等方面分析
====================================================================
-
如何解决跨节点的join关联查询
-
两个MySQL数据库怎么来做数据同步?
-
怎么处理跨库跨表查询,怎么做数据迁移,
-
说一下分布式事务以及多数据库高并发的处理 ? 什么是两段式,三段式,它的实现原理是什么?补偿事务?Sagas事务模型?
===================================================================
-
JDBC的反射,反射都是什么?
-
Jdo是什么?
-
Statement和PreparedStatement有什么区别?哪个性能更好?
-
使用JDBC操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能?
-
反射能获取到父类的私有方法吗?怎么防止反射破坏单例模式?
====================================================================
-
Redis哨兵模式和集群的区别?
-
Redis为什么用跳表不用其他的?介绍一下Redis的zset中的跳表zskiplist
-
讲一下RDB、AOF,优缺点,怎么选择?讲一下缓存雪崩、缓存击穿、缓存穿透、怎么避免?
-
redis为什么快?除了内存角度呢?
-
redis有哪几种数据结构?给你一个key怎么知道是用的哪种结构?Redis数据类型??
-
redis宕机后恢复数据的方式
-
怎么保证 redis 和 数据库的一致性? 如果数据库更新成功,缓存更新失败呢?
-
redis 集群的实现?
-
redis的过期规则?如何设置过期时间? 过期后是怎么处理的?
-
redis的内存置换方法
-
Redis内存泄漏,
-
Redis 主从节点是怎样通信的,传输数据是全量复制还是半增量复制
-
讲一下redis的主从复制怎么做的?
-
Redis为什么单线程但是性能高
-
aof,rdb,优点,区别?
-
redis的List能用做什么场景?
-
在一个多核cpu环境下,既然redis是单线程的,怎么提高服务器的利用率
-
redis用到哪些设计模式
-
Redis怎么解决双写一致性问题
-
影响Redis最大并发性能的主要因素
-
Redis除了有做缓存还有什么用
-
redis中热点key导致单点挂掉怎么解决
-
redis如何实现对热点数据的存储
-
redis是否支持事务
-
redis如何存一个键值对 , 如何存String
-
若存在一些排序操作,例如order by score这样的操作,在缓存中怎么进行处理
-
假设Redis中存储着一个List类型的数据,这些数据会不定期的变化,例如,论坛的帖子,按照发布时间进行排序显示。怎么确保每一次读这样的List数据,能够确保不读到空的数据?(最佳方式,利用脚本实现)
-
Redis集群负载均衡怎么搭建?
-
有序集合的底层 -字典与跳跃表 为什么用这两个结构
-
SDS优点,链表、跳表的实现与复杂度
-
那两个数据库双写不一致问题怎么解决呢?(那就先把缓存删了,再从MySQL中重新加载缓存。常见方法导致继续加问。。。)还有别的方法么?(那做序列化,将数据按照顺序一条条写入。)那如果有一条数据写入失败怎么办,MySQL成功,Redis失败?(答:再从MySQL读这条数据。总不能回滚吧?)
-
业务中redis如何保证可用性? 一些节点崩了怎么办,全都崩了咋办。。
-
如果你要对班里的学生根据分数进行排名,你觉得用redis里的哪个数据结构比较好。zset的底层是用什么数据结构实现的。
-
redis,十几万条已排好的数据在redis里,这时新来了一条数据,怎么快速更新排行榜,这个问题说了好久没说到面试官想要的答案
-
redis除了使用lua脚本还能如何实现原子性
-
redis为什么使用跳跃表,不使用红黑树
-
Redis出现多个Client同时修改redis服务器中同一个key怎么办?(redis并发竞争问题?)
-
redis的事务跟数据库的事务一样吗?
五、计算机网络
=================================================================
-
OSI、TCP/IP、五层体系结构联系与区别?
-
TCP和UDP的区别? UDP相比TCP来说最大的优点是什么?视频使用tcp还是udp,为什么?
-
为什么要有MAC地址,用IP地址不行吗
-
TCP和HTTP的keepalive分别是什么
-
给定域名有哪些方法可以获取到对应的IP,你自己获取,不是DNS。
-
怎么判断网络上发生了拥塞,重传?失序?
-
如何实现IPv6以及IPv4的检测
-
点到点和端到端的区别
-
桥接和NAT
-
osi主要协议,telnet哪一层
-
江苏放个服务器,北京访问,大概需要多少时间,按什么方法计算,能最快达到什么级别的速度
-
如何确定网络的稳定性?
-
翻墙中的墙的实现原理
-
假设你在宿舍玩游戏,突然发现特别卡,原来你舍友在用迅雷下载东西,为什么迅雷会占用网络带宽导致你玩游戏特别卡,而游戏竞争不过迅雷。
-
假如你要传一个很大的文件,怎么传?
-
从输入url到页面渲染中间过程,如果网络距离太长,怎么解决
-
ping的原理?
-
详细说一下arp
================================================================
-
讲一下TCP的连接和释放连接。
-
TCP有哪些应用场景?
-
tcp如何实现可靠传输
-
tcp为什么要建立连接
-
阐述TCP的4次挥手
-
讲一下浏览器从接收到一个URL到最后展示出页面,经历了哪些过程。tag
-
http和https的区别 ? https为什么安全? https 单向认证和双向认证的流程?
-
http的请求有哪些,应答码502和504有什么区别
-
为什么TIME_WAIT状态需要经过两个最大报文段生存时间才能到close状态?
-
说说ssl四次握手的过程
-
304状态码有什么含义?
-
如何减少TCP的时延问题
-
TIME-Wait和Close-Wait出现在什么时候,为什么需要它们?什么原因会导致服务端一直CLOSE-WAIT
-
TCP客户端发出第一个报文后状态是什么,服务端收到这个报文的状态?
-
大量TIME_WAIT?大量主机在CLOSE-WAIT状态是什么原因
-
TCP如何避免拥塞,怎么判断拥塞了。拥塞控制算法最坏的场景
-
滑动窗口是什么,滑动窗口大小怎么确定?什么场景下滑动窗口效率低
-
如何使UDP变得可靠
-
数据中心网络下TCP的缺陷不足
-
三次握手第二次失败了,客户端和服务器分别做什么
-
TCP未按序到达的包怎么处理
-
tcp传输中数据被篡改了怎么处理
-
tcp_reuse ,timestamp参数
-
为什么time_wait是2MSL,2MSL时长是多少,为什么需要将time_wait设置减小,调整时间有什么意义。(需要再深入再详细一些)如何让time_wait快速回收。
-
TCP中RTT,RTO相关计算公式,给解释一下。给了提示,tcp传输一组数据要用多长时间。
-
如何快速复用处于TIME_WAIT的连接?
-
tcp dump命令的使用?如何dump数据包然后优化网络?
-
QQ的属于tcp还是udp协议,直播是怎么实现的
-
syn攻击
-
有哪些因素会影响 tcp 的传输速率?
-
TCP的RST了解吗?
-
第二到第三次挥手之间服务器在做什么?最后一次挥手,客户端与服务端的状态?
================================================================
-
arp协议,arp攻击
-
icmp协议
-
讲一下路由器和交换机的区别?
-
路由器给局域网动态分配IP的原理吗
-
广播和单播?局域网和广域网?同一局域网下网段要相同吗?如果不是路由器,是交换机网段要相同吗?
-
路由表的结构是什么样的
-
报文乱序;有一个报文一直未收到,什么原因,怎么解决
-
BGP路由协议
-
路由的两种方式(rip, ospf),怎么实现
================================================================
-
DNS寻址过程
-
负载均衡反向代理模式优点及缺点
-
HTTP状态码 ? 304具体是什么错误?
-
如何提高HTTPS的效率
-
端口号 443 和80 分别是用于哪个协议
-
HTTP 1.1版本增加了哪些内容?有哪几种请求方式?
-
HTTP是怎么传图片的?
-
如果现在让你写一个程序能出现500的错误,你怎么写?
-
发布一个http接口需要考虑哪些方面:协议(get post),安全(白名单,token,sql注入,xss攻击等),考虑前后端分离(所以用json格式当参数和返回值,另外可以传设备类型到后台,aop统计不同设备调用次数)
-
http如何保持连接
-
如果不用http,如何保持连接
-
了解身份鉴别协议,有哪些?http证书怎么来?
-
如果让你实现一个文件上传协议,你会怎么设计??断点续传??如果这个接收端是分布式的呢???怎么控制传输速率???文件怎么存储??分布式存储怎么办???
-
http中向服务器请求一个网页,用的是以下哪个函数,get/read/post/head
-
Http 报文里有什么?
-
http1.0,1.1和2.0的区别
-
http是三次握手吗
-
短连接和长连接?
短连接:连接、传输数据、关闭连接
短连接指SOCKET连接后发送接收完数据马上断开连接。
长连接:连接、传输数据、保持连接、传输数据、、、、、关闭连接
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
19、半包:接收方没有接收到一个安装的包,只接受了部分,这种情况主要是由于TCP为提高传输效率,将一个包分配的足够大,导致接收方不能一次接收完(在长连接和短连接中都会出现)粘包:指发送方发送的若干数据到接收方接收时粘成一包,从接收缓存区看,后一包数据的头紧接着前一包数据的尾。分包:出现粘包时接收方要进行分包处理(在长链接中出现)。
20、在并发量比较大的情况下,就会出现一次接受并不能完整获取所有数据?
解决方法:1、通过包头、包长、包体的协议形式,当服务器端获取到指定包长时才说明获取完整。2、获取到指定包结束标识时,说明包获取完整。
什么时候需要考虑粘包的情况?
1、 当短连接时,不需要考虑粘包情况。
2、 如果发送数据无结构,如文件传输,这样发送方只管发送,接收方只管接受存储就好,不用考虑粘包。
3、 如果双方建立连接,需要在连接受一段时间内发送不同数据结构时,接收方创建一处理线程,对接收到的数据包进行预处理,将粘包分开。
注:粘包情况分两种:一种是粘在一起的包是完整的数据包,另一种情况是粘在一起的包有不完整的包
一个包没有固定长度,以太网限制在46-1500字节,1500就是以太网的MTU,超过这个量,TCP会为IP数据报设置偏移量进行分片传输,现在一般可允许应用层设置8k(NTFS系)的缓冲区,8k的数据由底层分片,而应用看来只是一次发送。windows的缓冲区经验值是4k,Socket本身分为两种,流(TCP)和数据报(UDP),你的问题针对这两种不同使用而结论不一样。甚至还和你是用阻塞、还是非阻塞Socket来编程有关。
1、通信长度,这个是你自己决定的,没有系统强迫你要发多大的包,实际应该根据需求和网络状况来决定。对于TCP,这个长度可以大点,但要知道,Socket内部默认的收发缓冲区大小大概是8K,你可以用SetSockOpt来改变。但对于UDP,就不要太大,一般在1024至10K。注意一点,你无论发多大的包,IP层和链路层都会把你的包进行分片发送,一般局域网就是1500左右,广域网就只有几十字节。分片后的包将经过不同的路由到达接收方,对于UDP而言,要是其中一个分片丢失,那么接收方的IP层将把整个发送包丢弃,这就形成丢包。显然,要是一个UDP发包佷大,它被分片后,链路层丢失分片的几率就佷大,你这个UDP包,就佷容易丢失,但是太小又影响效率。最好可以配置这个值,以根据不同的环境来调整到最佳状态。
send()函数返回了实际发送的长度,在网络不断的情况下,它绝不会返回(发送失败的)错误,最多就是返回0。对于TCP你可以字节写一个循环发送。当send函数返回SOCKET_ERROR时,才标志着有错误。但对于UDP,你不要写循环发送,否则将给你的接收带来极大的麻烦。所以UDP需要用SetSockOpt来改变Socket内部Buffer的大小,以能容纳你的发包。明确一点,TCP作为流,发包是不会整包到达的,而是源源不断的到,那接收方就必须组包。而UDP作为消息或数据报,它一定是整包到达接收方。
5、关于接收,一般的发包都有包边界,首要的就是你这个包的长度要让接收方知道,于是就有个包头信息,对于TCP,接收方先收这个包头信息,然后再收包数据。一次收齐整个包也可以,可要对结果是否收齐进行验证。这也就完成了组包过程。UDP,那你只能整包接收了。要是你提供的接收Buffer过小,TCP将返回实际接收的长度,余下的还可以收,而UDP不同的是,余下的数据被丢弃并返回WSAEMSGSIZE错误。注意TCP,要是你提供的Buffer佷大,那么可能收到的就是多个发包,你必须分离它们,还有就是当Buffer太小,而一次收不完Socket内部的数据,那么Socket接收事件(OnReceive),可能不会再触发,使用事件方式进行接收时,密切注意这点。这些特性就是体现了流和数据包的区别。
六、操作系统
===================================================================
-
计算机底层是用补码来计算的,为什么用补码?
-
用户态和内核态的区别? 为什么需要内核态?什么时候进入内核态?用户态切换到内核态的过程?如何实现切换?进程快照需要保存哪些必要数据?中断处理函数让你自己写如何实现?在时间片乱转的情况下,计算机有什么方法可以实现中断?(定时器)
-
什么是分时操作系统和实时操作系统 Linux是实时还是分时 ?
-
什么是大小端
-
操作系统层面 怎么解决多个cpu同时访问同一个区域
-
操作系统有几大模块? 说一下你设计操作系统要几个模块。
======================================================================
-
CentOS 和 Linux的关系?
-
64位和32位的区别?
-
用过哪些Linux命令
-
linux查看cpu和文件目录
-
top里面,内存那有buffer/cache,知道这是什么吗?
-
如何定位IO使用高的程序
-
chmod 777代表什么意思?
-
如果要查看服务器中各个进程CPU的状态用什么命令
-
linux查看内存指令,修改权限指令,如果权限相关的数字是777,代表什么含义,
-
关键字查询怎么查
-
Awk命令
-
inux查看一个文件末尾几行的命令(tail)
-
怎么查看含有某个关键字的几行(grep),具体怎么写命令
-
讲讲如何查看你项目占用的进程,讲讲如何将项目传到服务器上,讲讲如何杀死一个进程。
-
给你一个日志文件,里面包含ip、date等字段,如何求出每日的去重后的ip数量
-
Linux的软连接和硬连接
-
虚拟地址和物理地址时怎么转化的?其中用到哪些硬件? 为什么用虚拟地址
-
swap分区
-
硬盘结构,如何工作,最小单位?
-
多进程多线程浏览器(比如 Chrome),主控进程,插件进程,GPU进程,每个 tab 一个进程,tab 进程内有网络请求线程等;
-
ls、ps的内部原理,如何操作的,死锁设计的时候如何预防
-
线程调度算法,linux采用哪
==================================================================
-
怎么杀死进程?
-
线程,进程区别 ? 多线程与多进程区别,使用场景,浏览器使用哪个,为什么。
-
系统线程数量上限是多少?
-
进程和线程的区别是什么? 线程切换的时候保存哪些状态
-
解释一下LINUX下线程,GDI类。
-
Linux线程模型是什么样的,或者说Linux线程和进程的关联
-
怎么查看某个进程中的线程?
-
协程? 协程有哪些优势?把所有多线程都替换成协程实现可以嘛?
-
进程间通信方式?
-
信号量通信中,进程是如何获取到信号量的
-
进程分配了哪些资源
-
进程调度策略
-
守护进程、僵尸进程、孤儿进程,如何创建守护进程;
-
讲讲信号和信号量,它们有什么区别
===================================================================
- socket编程,BIO,NIO,epoll?
==================================================================
-
什么是页式存储?
-
操作系统里的内存碎片你怎么理解,有什么解决办法?
最后,附一张自己面试前准备的脑图:
面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典
- Java核心知识整理
- Spring全家桶(实战系列)
Step3:刷题
既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
以下是我私藏的面试题库:
很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。
最后祝愿各位身体健康,顺利拿到心仪的offer!
=================================================
-
怎么杀死进程?
-
线程,进程区别 ? 多线程与多进程区别,使用场景,浏览器使用哪个,为什么。
-
系统线程数量上限是多少?
-
进程和线程的区别是什么? 线程切换的时候保存哪些状态
-
解释一下LINUX下线程,GDI类。
-
Linux线程模型是什么样的,或者说Linux线程和进程的关联
-
怎么查看某个进程中的线程?
-
协程? 协程有哪些优势?把所有多线程都替换成协程实现可以嘛?
-
进程间通信方式?
-
信号量通信中,进程是如何获取到信号量的
-
进程分配了哪些资源
-
进程调度策略
-
守护进程、僵尸进程、孤儿进程,如何创建守护进程;
-
讲讲信号和信号量,它们有什么区别
===================================================================
- socket编程,BIO,NIO,epoll?
==================================================================
-
什么是页式存储?
-
操作系统里的内存碎片你怎么理解,有什么解决办法?
最后,附一张自己面试前准备的脑图:
[外链图片转存中…(img-9L5BLtZx-1715268788557)]
面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典
- Java核心知识整理
[外链图片转存中…(img-weGzMCT6-1715268788557)]
- Spring全家桶(实战系列)
[外链图片转存中…(img-QVXnspT8-1715268788558)]
Step3:刷题
既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
以下是我私藏的面试题库:
[外链图片转存中…(img-qmqrSccP-1715268788558)]
很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。
最后祝愿各位身体健康,顺利拿到心仪的offer!