赞
踩
2023-07-15 18:39:29
公开发布于
2024-5-21 13:03:14
以下内容源自《【面试】》
仅供学习交流使用
禁止其他平台发布时删除以下此话
本文首次发布于CSDN平台
作者是CSDN@日星月云
博客主页是https://blog.csdn.net/qq_51625007
禁止其他平台发布时删除以上此话
无
https://www.nowcoder.com/feed/main/detail/cdc7d6f87d904a75926a390cf9801777
1.自我介绍
2.问项目
3.数据库索引,索引优化,B+树
数据库优化:索引优化和查询优化
InnoDB使用B+树存储
B+树就是内部结点不存储数据,数据只存储到叶子结点上
而B树的内部结点可以存储数据
4.MySQL 隔离级别,InnoDB 引擎
读未提交
读已提交 Oracle数据库默认
可重复读 Mysql.InnoDB默认支持
串行化
MyIsam是不支持事务的
5.聚簇索引和非聚簇索引
聚簇索引就是索引即数据
InnoDB引擎中 idb文件(存储数据和索引)
非聚簇索引 索引存储数据的地址
MyIsam引擎中 .MYI存储索引 (MYIndex) .MYD存储数据 (MYData)
6.操作系统请求分页过程,调度算法,内存扩容原理
在快表里查找是否有相应的页号,查到之间调入
同时并行的在主存中查找 块号
然后调入
最佳页面置换算法
先进先出
LRU
LFU
Clock
内存扩容原理:利用虚拟内存
7.操作系统进程原理,互斥量,信号量机制
PV操作
8.计算机网络七层网络的协议,过程,ARP 协议
物理层 数据链路层 网络层 运输层 会话层 表示层 应用层
ARP:知道IP地址查出MAC地址
ARP:只使用与局域网,本网络中,
利用网络和掩码可知是否是同一网络,不在就询问默认网关,默认网关的MAC地址也是不知道的
ARP请求:广播询问:某IP地址的MAC地址是什么。并告知自己的IP地址和MAC地址
ARP响应:单播回应:我是这个IP地址,我的MAC地址是XX
还有:逆向ARP RARP:说是DHCP已经包含了该协议了
DHCP询问
DHCP响应
9.HTTPS 实现原理,对称加密和非对称加密的过程极其所处的流程
HTTP+TLS
TSL的四次过程
client hello
server hello
证书
证书
对称加密:明文 加密算法 密钥 解密算法 密文
非对称加密:明文 加密算法 公钥 私钥 解密算法 密文
10.三次握手四次挥手中各个状态位的变化以及 seq 指的是什么
三次握手 服务器 开启端口 被动接听 进入Listen状态 客户端 主动开启 发送SYN包 进入SYN-SEND状态 服务端收到发送ACK包 进入SYN-RCVD状态 客户端收到 发送ACK包进入established状态 服务端收到进入established状态 四次挥手 A发送FIN包,进入FIN-WAIT-1状态 B发送ACK包,进入CLOSE-WAIT状态 A收到进入FIN-WAIT-2状态 B发送FIN包,进入LAST-WAIT A收到发送ACK包,进入TIME-WAIT状态 B收到进入CLOSE状态 A过了2MSL时间,进入CLOSE状态 seq指的是序号 TCP首部的字段
11.Redis 数据结构,跳表原理
string raw emtr int
list
hash
set
zset 跳表
12.JMM 内存模型
主存和线程缓存之间的一致性问题
原子性 可见性 有序性
先行发生原则
13.TopK 问题,堆在内存中怎样存储,数据结构怎样
14.简单 Sql 查询
15.个人优势
https://www.nowcoder.com/discuss/509132115900907520?sourceSSR=%E5%85%B6%E4%BB%96
如果上线的项目出现问题,你怎么排查?
看日志
Linux 实时查看日志的命令?
总结Linux 中实时查看日志的3种方法
tail -f命令,-f 可以
你的项目用的是ip地址,没有用域名,域名怎么指向ip地址
首先查浏览器缓存
然后查hosts文件
查操作系统缓存
询问默认的dns服务器
迭代查询
本地服务器分别询问根服务器 顶级域名服务器 权限域名服务器
Java异常了解吗,说一说,常见的运行时异常
ThrowAble有Error和Exception
Exception 编译时异常 运行时异常Runtime Exception
常见的运行时异常:空指针异常 数组下标越界异常
怎么定位空指针异常
NULL空指针常见情况(修复和定位)
https://blog.csdn.net/Bulldozer_GD/article/details/123071395
说一说error有哪些
OOM和Stack OverFlow
线程池的原理
我说说线程怎么创建
有继承Thead类
实现Runnable接口
实现Callable接口
还有就是线程池中取线程 submit execute
当想要获取一个线程时,线程池就会看看有没有空闲线程,如果有直接返回
如果核心线程被占完的话,就会进入排队
队满的话,就需要 创建额外的工作线程 来接待任务了
如果没有的话,就有对应的拒绝策略来处理
另外就是线程的创建借助于线程工厂
redis和mysql的区别
数据库和缓存主从一致性,先更新数据库还是先更新缓存,为什么
先更新数据,后删除缓存
先更新数据库,再删除缓存还不完美,再想一个方案
延迟双删
利用消息队列进行异步操作
mysql隔离级别
读未提交 读已提交 可重复读 串行化
mysql默认的隔离级别
可重复读
mysql不可重复读的原理是什么
MVCC
mvcc介绍一下,原理
undo log
事务id
快照
在可重复读的隔离下,每读一次就会读快照
在读已提交的隔离下,第一次读就会读快照
nginx介绍,干啥的
nginx负载均衡的方式
git代码冲突怎么解决
对比差异 ,保留有效代码 , 合并
有了http,为啥还要有rpc
既然有了HTTP,为什么还要RPC?
https://blog.csdn.net/zhengren964/article/details/131478747
远程过程调用
全局异常处理器的原理是什么?
全局异常处理器这个类的核心是什么?
aop的通知介绍是什么?
面向切面编程
在连接点上执行的动作就叫通知
前置通知 后置通知 环绕通知 最后通知 异常通知
思维题:1毛钱买一个桃子,三个桃核换一个桃子,1块钱可以吃几个桃子
15个(+借一个桃核) ---------------------------- 三个桃核=一个桃肉+一个桃核 故: 一个桃核=半个桃肉 所以: 一毛钱=十个桃肉+十个桃核=十五个桃肉 理论上是十五个。 -------------------------------------- 买10个桃子,吃完 有10个桃核 换3桃 还剩1桃核 吃完3个桃 有4个桃核 换1个桃 还剩1个桃核 吃完1个桃 还有2个桃核 和老板借一个桃核 ,有3个桃核换一个桃, 吃完1个桃,还给老板一个桃核
思维题:12个球,其中1个质量不一样,称天平称几次最多可以找出里面那个不一样的球
六次
-----------------------------------------
分为甲4 乙4 丙4
甲乙称一次,如果相同就在丙中 如果不一样;但是不知道是重是轻 就在甲乙
甲丙称一次,如果相同就在乙中,如果也不相同 就在甲丙
乙丙称一次,如果相同就在甲中,如果不相同 就在乙丙
根据上三种情况,就能知道不一样的球在甲|乙|丙
4个ABCD中找出指令不一样的
AB称
BC称
AC称
如果都相同就是D
否则也能推出来到底是A|B|C
答案是三次
类似于 逻辑选做题解:2、假币谜题
算法题:输出小于n的最大数,最大数的每一位只能从2,4,9上面选
2023-07-15 20:39:29
2023-7-16 14:50:22
https://www.nowcoder.com/discuss/509810343657353216
时隔1年,甚是感慨,没想到这么快又来面试了。
一面(30分钟)2023.07.10
自我介绍
能简单说一下用了哪些设计模式
单例模式
工厂模式
适配者模式 Runable Callable
原型模式
能简单描述一下策略模式吗?策略模式和if-else有什么区别,怎么定义策略类的
Linux在一个目录下面,有100个文件,需要匹配以 ‘query’ 开头的日志,并且把数量统计一下,用什么命令 (grep -c ‘^query’ /path/to/directory/*)
Java版本用什么
8
平时有用多线程吗
对于java多线程在工作什么时候会用到?
https://www.zhihu.com/question/305327489/answer/2915344554
Tomcat每一次请求,需要获取线程
数据库连接池,每次连接需要线程
框架底层都封装好了
用过stream和lambda表达式吗
流式编程
()->{}
有一个list,包含字符串,先转换成大写,然后再对这个list进行排序
public class StringListSorting { public static void main(String[] args) { List<String> myList = new ArrayList<>(); myList.add("apple"); myList.add("banana"); myList.add("orange"); myList.add("grape"); // 转换为大写形式 List<String> uppercaseList = new ArrayList<>(); for (String str : myList) { uppercaseList.add(str.toUpperCase()); } // 或者使用流式操作 // List<String> uppercaseList = myList.stream().map(String::toUpperCase).collect(Collectors.toList()); // 对转换后的列表进行排序 Collections.sort(uppercaseList); // 或者使用流式操作 // List<String> sortedList = uppercaseList.stream().sorted().collect(Collectors.toList()); System.out.println(uppercaseList); } }
9、你们Redis的使用场景,具体怎么去用
做缓存
存储 点赞 粉丝 关注
做分布式锁
Redis 16 个常见使用场景
https://blog.csdn.net/agonie201218/article/details/123640871
10、基于Redis做分布式锁有使用Lua脚本吗
11、两张表,一个是员工表
副表
筛选出某部门工资最高的员工的name
SELECT e.name
FROM employee e
INNER JOIN department d ON e.departmentId = d.departmentId
WHERE d.departmentName = '目标部门名称'
ORDER BY e.salary DESC
LIMIT 1;
12、会用反射之类的吗
13、对数据库索引有一些优化吗
设置合理的索引,防止索引失效
全值匹配 最佳左前缀法则
覆盖索引 依据索引查询到的刚好就是需要包括返回的字段,不需要回表操做
索引条件下推ICP 先过滤后回表 VS 先回表后过滤
14、假如有sql比较慢,怎么去优化
慢查询日志
性能分析工具
看看是全表扫描,还有看看有没有使用到索引
15、三数之和
16、反问
二面(20分钟)2023.07.13
自我介绍
项目中主要做那一块的工作
项目中具体做了哪些性能优化
大数据量表除了分表还有什么优化方式(分库、加索引、数据归档)
什么情况用到Redis,怎么用,怎么做分布式锁
为什么可以Redis可以用做分布式锁
为什么不用其他的,而用Redis
比较过Redis和其他缓存框架的性能吗
Memcached能用作分布式锁吗
为什么可以Redis可以用做分布式缓存,Memcached能做到吗
有没有什么项目留下深刻印象
工作中看过什么其他技术(大概说了下k8s)
能说一下什么是配置中心吗
了解过多线程吗
为什么不要new Thread()
抛弃new Thread
https://blog.csdn.net/u012304076/article/details/45875945
性能差 功能不多 线程池统一管理
写个造成死锁的代码
public class DeadLockDemo { private static Object resource1 = new Object();//资源 1 private static Object resource2 = new Object();//资源 2 public static void main(String[] args) { new Thread(() -> { synchronized (resource1) { System.out.println(Thread.currentThread() + "get resource1"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread() + "waiting get resource2"); synchronized (resource2) { System.out.println(Thread.currentThread() + "get resource2"); } } }, "线程 1").start(); new Thread(() -> { synchronized (resource2) { System.out.println(Thread.currentThread() + "get resource2"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread() + "waiting get resource1"); synchronized (resource1) { System.out.println(Thread.currentThread() + "get resource1"); } } }, "线程 2").start(); } }
17、除了用synchronized加锁还有其他方式加锁吗
ReentrantLock
lock unlock 需要配合try catch finally
18、用ReentrantLock怎么实现
AQS state
同步队列阻塞器
19、反问
#数字马力社招#
2023-7-16 17:40:56
一、电话面
1、自我介绍
2、一些开放性问题,如如何看待理论和实践的关系
3、介绍项目,实验室的和个人做的
4、问实习相关内容
5、八股相关
- ping原理 - curl是什么,和ping的区别 - 讲一下Java有哪些集合类 - 讲一下JVM堆结构 - Java的写锁和读写锁区别 - 进程和线程区别 - java的线程和go的协程的区别 - OSI七层协议,传输层有哪些协议 - 子网掩码 - InnoDB有哪些特性 - InnoDB存储原理 - 索引相关 - 数据库隔离级别
6、做题,开放题
一面
简单介绍项目
知道哪些数据结构以及他们的特点
线性表:数组,链表,栈、队列、多维线性表
树:二叉树 BST AVL B B+ 红黑树
图:
链表增删快,那如何提高其查询效率,有没有什么想法?
加入Hash
B+树了解吗?B+树如何范围查询?B+树退化的极端情况是什么?
Mysql中索引的实现
叶子结点用是双向链表连接
页内记录使用单链表连接
跳表了解吗?
redis的zset的实现
可以进行二分查找的有序链表
它在性能上和红黑树,AVL树不相上下,但是跳表的原理非常简单,
目前在Redis和LeveIDB中都有用到。
大顶堆、小顶堆了解吗?
大顶堆:每个结点的值都大于或等于其左右孩子结点的值。堆顶元素是堆中最大的元素。
小顶堆:每个结点的值都小于或等于其左右孩子结点的值。堆顶元素是堆中最小的元素
实现长地址请求到服务端,然后服务端重定向短地址给客户端,如何实现长短地址的互相映射?
很多都是这样的,比如CSDN和blibil:App和浏览器的地址
https://blog.csdn.net/qq_43223115/article/details/118962623
① 将长地址与一个整数建立映射(一对多)
长连接与整数int64映射起来,存入Mysql中
②base62编码
进行base62编码,26个小写字母,26个大写字母,10个0-9
③拼接上域名。
那我现在有10份数据,有1000个线程来争抢,你要怎么处理?
结合我的秒杀项目来说
比如商品有十个库存,现在有1000个用户来秒杀
验证码
限流器
队列泄洪
消息队列异步
售罄标识
分布式是什么?为什么要分布式?分布式又会有哪些问题?分布式系统是如何实现事物的?
Redis集群了解吗?如何处理宕机的情况?Redis的同步策略?
LRU算法了解吗?你会如何实现它?这个算法可以应用在哪些场景下?
用到缓存中都可以使用
redis的内存淘汰策略
Mysql的Buffer Pool中
TCP为什么是三次握手?两次行不行?多次行不行?
两次会有历史连接重复连接
三次够了,四次就是把2分开两次,浪费资源
ack能携带就携带,不需要单独发送ack包
TCP的安全性是如何实现的?两台服务器之间可以同时建立多条TCP链接吗?怎么实现的?
流量控制 拥塞控制 连接管理
可以
客户端输入一个网址后,是如何拿到客服想要的数据的,是怎样在网络中传输的?
https://www.ewbang.com/community/article/details/960668555.html
cookie和session
java有哪些锁?共享锁是什么?CAS?乐观锁和悲观锁?synchronied的底层原理?锁升级?死锁怎么形成的?如何破解死锁?
二面
Java容器:List,Set,Map
Map的遍历方式
HashMap扩容为什么是扩为两倍?
Java线程同步机制(信号量,闭锁,栅栏)
对volatile的理解:常用于状态标记
八种基本数据类型的大小以及他们的封装类(顺带了解自动拆箱与装箱)
线程阻塞几种情况?如何自己实现阻塞队列?
Java垃圾回收。可达性分析->引用级别->二次标记(finalize方法)->垃圾收集 算法(4个)->回收策略(3个)->垃圾收集器(GMS、G1)。
java内存模型
TCP/IP的理解
进程和线程的区别
http状态码含义
ThreadLocal(线程本地变量),如何实现一个本地缓存
JVM内存区哪里会出现溢出?
双亲委派模型的理解,怎样将两个全路径相同的类加载到内存中?
CMS收集器和G1收集器
TCP流量控制和拥塞控制
服务器处理一个http请求的过程
例举几个Mysql优化手段
数据库死锁定义,怎样避免死锁
spring的aop是什么?如何实现的
面向对象的设计原则
策略模式的实现
操作系统的内存管理的页面淘汰 算法 ,介绍下LRU(最近最少使用算法 )
B+树的特点与优势
三面
自我介绍,说简历里没有的东西
说几个你最近在看的技术(MySQL,多线程)
口述了一个统计数据的场景题
如果这个统计数据场景不用MySQL,而是用Java来实现,怎么做
如果数据量过大,内存放不下呢
用面向对象的思想解决上面提出的问题,创建出父类,子类,方法,说一下思路
下一个场景,口述了一个登录场景,同学用线程池做登录校验,会有什么问题
如何解决这些问题
你给出的方案弊端在哪里,还有哪些方案
四面
谈谈类加载机制。
hashmap和concurenthashmap
16g机器,让你分配jvm内存怎么分配。
机器慢了怎么排查。
谈谈consul和zookeeper,还有服务发现机制。
详细说明raft协议。
谈谈consul和zookeeper区别。
服务注册的时候发现没有注册成功会是什么原因。
讲讲你认为的rpc和service mesh之间的关系。
我们都有光明的未来
祝大家考研上岸
祝大家工作顺利
祝大家得偿所愿
祝大家如愿以偿
点赞收藏关注哦
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。