计算机网络、数据库、操作系统有学过吗
TCP三次握手的过程
seq x
ack x+1 seq y
ack y+1
拥塞避免的方法
慢开始、拥塞避免、快恢复、快重传
数据库创建索引的语法
CREATE INDEX indexName ON table_name (column_name)
什么是平衡二叉树
左子树和右子树插值不超过一
怎么判断循环链表
hashset、快慢指针
Linux语言基础
- chmod 授权
- ps -ef | grep 查看进程
- kill -9 杀死进程
- tail -f 实时读取日志
- netstat -anp | grep 查看端口号
- ping 测试地址
- mkdir 创建文件夹
- rmdir 删除文件夹
- touch 创建文件
- rm 删除文件
- mv 移除文件
- cp 复制文件
- cat 查看文件
java基础:final的作用,修饰函数时呢?
变量不可修改、类不可继承、方法不能重写
set,list,map是否都继承了collection
map没有
spring框架了解吗,平时怎么学习java的
Spring IOC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。
Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候Spring AOP会使用 Cglib 生成一个被代理对象的子类来作为代理。
9.10一面
聊项目
redis说说你的了解,数据类型,持久化方案,内存删除策略。
- 数据类型
- string 缓存 session共享 分布式锁
- list 消息队列
- hash 存储对象
- set 集合
- zset 排行榜
- 持久化
- aof 命令
- rdb 快照 默认
- 内存删除策略
- 定时删除
- 创建一个定时器,当key有过期时间时,时间一到,定时器任务就会立即执行 将expires区域和k-v区域都删除
- 优点:节约内存
- 缺点:cpu压力较大,此时无论cpu负载量多高,都会占用cpu来释放,影响redis的吞吐量
- 惰性删除
- 数据过期后,并不会立刻删除 等到该数据下次访问的时候,redis才会删除该数据,并返回该值为nil
- 优点:节省cpu的资源
- 缺点:可能存在大量的,无人访问的数据会一直存在服务器
- 定期删除
- 每秒钟定期对redis中每个库的数据进行轮询 轮询的数据,对过期的数据随机删除一部分 如果随机删除的数据占轮训数据的比例超过一定值,继续轮询删除
redis双删不一致情况。
- 先删除缓存再更新数据库
- a删除缓存;b读db写入缓存;a更新db;a再删除缓存
- 先更新数据库再删除缓存
- 缓存失效,a读取db;b更新db删除缓存;写入缓存
说一说JVM的类加载过程。
加载 验证 准备 解析 初始化
介绍实习项目
用过哪些数据库
mysql redis
说一说mysql数据库底层数据结构的优点和缺点
b+树
如何优化慢sql
发现慢SQL
show processlist
查询当前慢sql的语句- 开启慢日志
set global slow_query_log=1;
优化慢SQL
explain sql语句
的方式查看慢sql的执行计划
- type 表示表的连接类型
- key 表示实际使用的索引
- rows 扫描出的行数(估算的行数)
- 分析该SQL语句索引使用情况,全表扫描情况
静态方法和非静态方法的区别
调用方式、从属、加载实际
知道什么是 threadlocal 吗
ThreadLocal本身并不存储值,它只是作为一个key来让线程从ThreadLocalMap获取value。
说一说mvc架构的好处
低耦合性、高重用性和可适用性、较低的生命周期成本、快速的部署、可维护性
软件研发工程师面经
SpringBoot 对 Spring 的改进
监控、启动器、自动配置
项目中如何用到 Spring
了解 IoC 吗,说一下对于 IoC 的理解
Spring IOC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。
MyBatis 如何使用,源码有了解吗
配置Mybtis核心配置文件(一般将其命名为 mybatis-config.xml)
根据核心配置文件创建 SqlSessionFactory 对象
通过 SqlSessionFactory 对象创建 SqlSession 对象
通过 SqlSession 对象操作数据库 CRUD
提交事务
释放资源
登陆模块如何做的
链表与队列的使用场景
多写少读、多读少写
TCP 为何要进行三次握手
同一个网段下的主机如何通信 ,不同网段下的主机如何通信
广播协议 路由转发
GC 垃圾回收算法
分代 清除 复制 压缩
什么是线程安全
多线程操作无数据丢失
如何判断死锁,怎么避免死锁
双方都持有锁并需要避免多次锁定、加锁顺序执行
设计模式的六大原则
单一原则(Single Responsibility Principle):一个类或者一个方法只负责一项职责,尽量做到类的只有一个行为原因引起变化;
里氏替换原则(LSP liskov substitution principle):子类可以扩展父类的功能,但不能改变原有父类的功能;
依赖倒置原则(dependence inversion principle):面向接口编程;(通过接口作为参数实现应用场景)
接口隔离原则(interface segregation principle):建立单一接口;(扩展为类也是一种接口,一切皆接口)
迪米特原则(law of demeter LOD):最少知道原则,尽量降低类与类之间的耦合;
开闭原则(open closed principle):用抽象构建架构,用实现扩展原则;
JVM 调优参数
-Xms4g 初始堆大小4g
-Xmx4g 最大堆大小4g
-XX:+UseParNewGC 设置年轻代为并行收集
-XX:+UseConcMarkSweepGC 老年代使用CMS内存收集
-XX:+HeapDumpOnOutOfMemoryError 出现堆内存溢出时,自动导出堆内存 dump 快照
如何判断对象是否死亡
无其他引用 可达性算法
自定义线程池的最大线程数如何设定
某一个项目隔天上线,但前一晚出现bug,你会怎么做
淘宝商城如何实现个性推送,谈谈你的理解
HashMap 底层了解吗
为什么加载因子是 0.75
过高 碰撞过多 过低 扩容过多
有什么语言也能够实现跨平台
全局变量的缺点,介绍一个小实例
长期占用内存、难以定位修改、不利于后期的维护
为什么要有包装类
泛型、null值、序列化接口