当前位置:   article > 正文

网上的面经【面试准备】

网上的面经【面试准备】

前言

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树的内部结点可以存储数据
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4.MySQL 隔离级别,InnoDB 引擎

读未提交
读已提交 Oracle数据库默认
可重复读 Mysql.InnoDB默认支持
串行化

MyIsam是不支持事务的
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

5.聚簇索引和非聚簇索引

聚簇索引就是索引即数据
InnoDB引擎中 idb文件(存储数据和索引)

非聚簇索引 索引存储数据的地址
MyIsam引擎中 .MYI存储索引 (MYIndex)  .MYD存储数据 (MYData)
  • 1
  • 2
  • 3
  • 4
  • 5

6.操作系统请求分页过程,调度算法,内存扩容原理

在快表里查找是否有相应的页号,查到之间调入
同时并行的在主存中查找 块号
然后调入

最佳页面置换算法
先进先出
LRU
LFU
Clock

内存扩容原理:利用虚拟内存
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

7.操作系统进程原理,互斥量,信号量机制


PV操作

  • 1
  • 2
  • 3

8.计算机网络七层网络的协议,过程,ARP 协议

物理层 数据链路层 网络层 运输层 会话层 表示层 应用层

ARP:知道IP地址查出MAC地址
ARP:只使用与局域网,本网络中,
利用网络和掩码可知是否是同一网络,不在就询问默认网关,默认网关的MAC地址也是不知道的
ARP请求:广播询问:某IP地址的MAC地址是什么。并告知自己的IP地址和MAC地址
ARP响应:单播回应:我是这个IP地址,我的MAC地址是XX

还有:逆向ARP RARP:说是DHCP已经包含了该协议了
DHCP询问
DHCP响应
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

9.HTTPS 实现原理,对称加密和非对称加密的过程极其所处的流程

HTTP+TLS
TSL的四次过程
client hello
server hello
证书
证书

对称加密:明文 加密算法 密钥 解密算法 密文
非对称加密:明文 加密算法 公钥 私钥 解密算法 密文

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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首部的字段
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

11.Redis 数据结构,跳表原理

string raw emtr int
list
hash 
set 
zset 跳表
  • 1
  • 2
  • 3
  • 4
  • 5

12.JMM 内存模型

主存和线程缓存之间的一致性问题
原子性 可见性 有序性
先行发生原则
  • 1
  • 2
  • 3

13.TopK 问题,堆在内存中怎样存储,数据结构怎样
14.简单 Sql 查询
15.个人优势

字节跳动日常实习一面凉经

https://www.nowcoder.com/discuss/509132115900907520?sourceSSR=%E5%85%B6%E4%BB%96

如果上线的项目出现问题,你怎么排查?

看日志
  • 1

Linux 实时查看日志的命令?
总结Linux 中实时查看日志的3种方法
tail -f命令,-f 可以

你的项目用的是ip地址,没有用域名,域名怎么指向ip地址

首先查浏览器缓存
然后查hosts文件
查操作系统缓存
询问默认的dns服务器
迭代查询
本地服务器分别询问根服务器 顶级域名服务器 权限域名服务器
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Java异常了解吗,说一说,常见的运行时异常

ThrowAble有Error和Exception
Exception 编译时异常 运行时异常Runtime Exception
常见的运行时异常:空指针异常 数组下标越界异常
  • 1
  • 2
  • 3

怎么定位空指针异常

NULL空指针常见情况(修复和定位)
https://blog.csdn.net/Bulldozer_GD/article/details/123071395

  • 1
  • 2
  • 3

说一说error有哪些

OOM和Stack OverFlow
  • 1

线程池的原理

我说说线程怎么创建
有继承Thead类
实现Runnable接口
实现Callable接口
还有就是线程池中取线程  submit execute

当想要获取一个线程时,线程池就会看看有没有空闲线程,如果有直接返回
如果核心线程被占完的话,就会进入排队
队满的话,就需要 创建额外的工作线程 来接待任务了
如果没有的话,就有对应的拒绝策略来处理
另外就是线程的创建借助于线程工厂
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

redis和mysql的区别
数据库和缓存主从一致性,先更新数据库还是先更新缓存,为什么

先更新数据,后删除缓存
  • 1

先更新数据库,再删除缓存还不完美,再想一个方案

延迟双删
利用消息队列进行异步操作
  • 1
  • 2

mysql隔离级别

读未提交 读已提交 可重复读 串行化
  • 1

mysql默认的隔离级别

可重复读
  • 1

mysql不可重复读的原理是什么

MVCC
  • 1

mvcc介绍一下,原理

undo log
事务id
快照
在可重复读的隔离下,每读一次就会读快照
在读已提交的隔离下,第一次读就会读快照
  • 1
  • 2
  • 3
  • 4
  • 5

nginx介绍,干啥的
nginx负载均衡的方式
git代码冲突怎么解决

对比差异 ,保留有效代码 , 合并
  • 1

有了http,为啥还要有rpc

既然有了HTTP,为什么还要RPC?
https://blog.csdn.net/zhengren964/article/details/131478747
远程过程调用

  • 1
  • 2
  • 3
  • 4

全局异常处理器的原理是什么?

全局异常处理器这个类的核心是什么?

aop的通知介绍是什么?

面向切面编程
在连接点上执行的动作就叫通知
前置通知 后置通知 环绕通知 最后通知 异常通知
  • 1
  • 2
  • 3

思维题:1毛钱买一个桃子,三个桃核换一个桃子,1块钱可以吃几个桃子

15个(+借一个桃核)
----------------------------
三个桃核=一个桃肉+一个桃核
故:
一个桃核=半个桃肉
所以:
一毛钱=十个桃肉+十个桃核=十五个桃肉
理论上是十五个。
--------------------------------------
买10个桃子,吃完 有10个桃核
换3桃 还剩1桃核
吃完3个桃 有4个桃核
换1个桃 还剩1个桃核
吃完1个桃 还有2个桃核
和老板借一个桃核 ,有3个桃核换一个桃,
吃完1个桃,还给老板一个桃核
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

思维题:12个球,其中1个质量不一样,称天平称几次最多可以找出里面那个不一样的球

六次
-----------------------------------------
分为甲4 乙4 丙4 
甲乙称一次,如果相同就在丙中 如果不一样;但是不知道是重是轻 就在甲乙
甲丙称一次,如果相同就在乙中,如果也不相同 就在甲丙
乙丙称一次,如果相同就在甲中,如果不相同 就在乙丙

根据上三种情况,就能知道不一样的球在甲|乙|丙
4个ABCD中找出指令不一样的
AB称
BC称 
AC称
如果都相同就是D
否则也能推出来到底是A|B|C
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

答案是三次
类似于 逻辑选做题解: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
原型模式
  • 1
  • 2
  • 3
  • 4

能简单描述一下策略模式吗?策略模式和if-else有什么区别,怎么定义策略类的


  • 1

Linux在一个目录下面,有100个文件,需要匹配以 ‘query’ 开头的日志,并且把数量统计一下,用什么命令 (grep -c ‘^query’ /path/to/directory/*)


  • 1

Java版本用什么

8
  • 1

平时有用多线程吗

对于java多线程在工作什么时候会用到?
https://www.zhihu.com/question/305327489/answer/2915344554

Tomcat每一次请求,需要获取线程
数据库连接池,每次连接需要线程
框架底层都封装好了
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

用过stream和lambda表达式吗

流式编程
()->{}
  • 1
  • 2

有一个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);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

9、你们Redis的使用场景,具体怎么去用

做缓存
存储 点赞 粉丝 关注
做分布式锁

Redis 16 个常见使用场景
https://blog.csdn.net/agonie201218/article/details/123640871
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

12、会用反射之类的吗

13、对数据库索引有一些优化吗

设置合理的索引,防止索引失效
全值匹配 最佳左前缀法则

覆盖索引		依据索引查询到的刚好就是需要包括返回的字段,不需要回表操做
索引条件下推ICP	先过滤后回表 VS 先回表后过滤
  • 1
  • 2
  • 3
  • 4
  • 5

14、假如有sql比较慢,怎么去优化

慢查询日志
性能分析工具
看看是全表扫描,还有看看有没有使用到索引
  • 1
  • 2
  • 3

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
 性能差 功能不多 线程池统一管理
  • 1
  • 2
  • 3

写个造成死锁的代码

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();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

17、除了用synchronized加锁还有其他方式加锁吗

ReentrantLock
lock unlock 需要配合try catch finally
  • 1
  • 2

18、用ReentrantLock怎么实现

AQS state
同步队列阻塞器
  • 1
  • 2

19、反问

#数字马力社招#

2023-7-16 17:40:56

阿里后台面试

一、电话面

1、自我介绍

2、一些开放性问题,如如何看待理论和实践的关系

3、介绍项目,实验室的和个人做的

4、问实习相关内容

5、八股相关

- ping原理

- curl是什么,和ping的区别

- 讲一下Java有哪些集合类

- 讲一下JVM堆结构

- Java的写锁和读写锁区别

- 进程和线程区别

- java的线程和go的协程的区别

- OSI七层协议,传输层有哪些协议

- 子网掩码

- InnoDB有哪些特性

- InnoDB存储原理

- 索引相关

- 数据库隔离级别
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

6、做题,开放题

最新Java后端面经合集 | 阿里腾讯百度字节]

最新Java后端面经合集 | 阿里腾讯百度字节

一面
简单介绍项目
知道哪些数据结构以及他们的特点

线性表:数组,链表,栈、队列、多维线性表
树:二叉树 BST AVL B B+ 红黑树
图:
  • 1
  • 2
  • 3

链表增删快,那如何提高其查询效率,有没有什么想法?

加入Hash
  • 1

B+树了解吗?B+树如何范围查询?B+树退化的极端情况是什么?

Mysql中索引的实现
叶子结点用是双向链表连接
页内记录使用单链表连接
  • 1
  • 2
  • 3

跳表了解吗?

redis的zset的实现
可以进行二分查找的有序链表
它在性能上和红黑树,AVL树不相上下,但是跳表的原理非常简单,
目前在Redis和LeveIDB中都有用到。

  • 1
  • 2
  • 3
  • 4
  • 5

大顶堆、小顶堆了解吗?

大顶堆:每个结点的值都大于或等于其左右孩子结点的值。堆顶元素是堆中最大的元素。
小顶堆:每个结点的值都小于或等于其左右孩子结点的值。堆顶元素是堆中最小的元素
  • 1
  • 2

实现长地址请求到服务端,然后服务端重定向短地址给客户端,如何实现长短地址的互相映射?

很多都是这样的,比如CSDN和blibil:App和浏览器的地址
https://blog.csdn.net/qq_43223115/article/details/118962623
① 将长地址与一个整数建立映射(一对多)
长连接与整数int64映射起来,存入Mysql中
②base62编码
进行base62编码,26个小写字母,26个大写字母,10个0-9
③拼接上域名。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

那我现在有10份数据,有1000个线程来争抢,你要怎么处理?

结合我的秒杀项目来说
比如商品有十个库存,现在有1000个用户来秒杀
验证码
限流器
队列泄洪
消息队列异步
售罄标识
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

分布式是什么?为什么要分布式?分布式又会有哪些问题?分布式系统是如何实现事物的?

Redis集群了解吗?如何处理宕机的情况?Redis的同步策略?

LRU算法了解吗?你会如何实现它?这个算法可以应用在哪些场景下?

用到缓存中都可以使用
redis的内存淘汰策略
Mysql的Buffer Pool中
  • 1
  • 2
  • 3

TCP为什么是三次握手?两次行不行?多次行不行?

两次会有历史连接重复连接
三次够了,四次就是把2分开两次,浪费资源
ack能携带就携带,不需要单独发送ack包
  • 1
  • 2
  • 3

TCP的安全性是如何实现的?两台服务器之间可以同时建立多条TCP链接吗?怎么实现的?

流量控制 拥塞控制 连接管理

可以
  • 1
  • 2
  • 3

客户端输入一个网址后,是如何拿到客服想要的数据的,是怎样在网络中传输的?

https://www.ewbang.com/community/article/details/960668555.html
  • 1

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之间的关系。

最后

我们都有光明的未来

祝大家考研上岸
祝大家工作顺利
祝大家得偿所愿
祝大家如愿以偿
点赞收藏关注哦

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/986465
推荐阅读
相关标签
  

闽ICP备14008679号