# 基础
---
### `String`,`StringBuffer`,`StringBuilder`的区别是什么? `String` 为什么是不可变的?
1. String是字符串常量,StringBuffer和StringBuilder是字符串变量,后两者字符内容可变,前者不可变。
2. JDK中String类的声明是一个final类
3. StringBuffer是线程安全的,而StringBuilder是非线程安全的
4. StringBuilder的效率高
### 接口和抽象类的区别
1. 接口可以多继承,抽象类不能多继承
2. 接口只能做方法申明,抽象类也可以方法申明,也可以方法实现;
3. 接口是一组行为规范,抽象类是个不完整的类,注重于族的概念;
4. 接口定义的变量只能是公共的静态常量,抽象类中的变量是普通变量;
### 反射的原理,反射创建类实例的三种方式是什么?
原理:通过操作class文件,加载类的字节码,然后反射出字节码中的构造函数,方法以及变量,达到在程序运行状态下,改变程序结构或变量类型的目的。
三种创建方式:
1. 通过类的静态成员变量class获取Class类:`Class class1 = Foo.class`;
2. 已知类的对象,通过`getClass`方法:`Class class2 = foo1.getClass()`;
3. 已知类的全路径,通过:`Class class3 = Class.forName(fullpath)`;
获取实例:`class1.newInstance()`;
### JDK有哪些实现代理方法?JDK动态代理和CGlib动态代理有什么区别?
### 描述动态代理的几种实现方式?相应的优缺点?
两种方式:
1. JDK反射机制提供的代理
主要通过`java.lang.reflect.Proxy`类实现,通过`newProxyInstance`方法创建目标类的代理对想,从而实现对目标类的功能增强。在此 之前必须要创建一个`InvocationHandler`接口的代理类并实现它的方法`invoke()`,在该方法中完成对目标类的功能增强。
2. CGLIB代理
### 写出三种单例模式的实现。
```java
// 1. 饿汉模式((线程安全,调用效率高,但是不能延时加载):)
public class ImageLoader{
private static ImageLoader instance = new ImageLoader;
private ImageLoader(){}
public static ImageLoader getInstance(){
return instance;
}
}
// 2. 懒汉式(线程安全,调用效率不高,但是能延时加载):
public class SingletonDemo2 {
//类初始化时,不初始化这个对象(延时加载,真正用的时候再创建)
private static SingletonDemo2 instance;
//构造器私有化
private SingletonDemo2(){}
//方法同步,调用效率低
public static synchronized SingletonDemo2 getInstance(){
if(instance==null){
instance=new SingletonDemo2();
}
return instance;
}
}
// 3. 静态内部类实现模式(线程安全,调用效率高,可以延时加载)
public class SingletonDemo3 {
private static class SingletonClassInstance{
private static final SingletonDemo3 instance=new SingletonDemo3();
}
private SingletonDemo3(){}
public static SingletonDemo3 getInstance(){
return SingletonClassInstance.instance;
}
}
```
### 多线程的几种实现方式。
> 1. 什么是线程安全?
1. 继承Thread类创建线程
2. 实现Runnable接口创建线程
3. 实现Callable接口通过FutureTask包装器来创建Thread线程;
### 有三个线程t1、t2、t3。确保三个线程t1执行完后t2执行,t2执行完成后t3执行?
### 介绍下Java内存模型
https://zhuanlan.zhihu.com/p/29881777
### JVM区域划分(JVM)
运行数据区主要有:
1. 程序计数器
也叫PC寄存区,用来指示执行哪条命令。是每个线程私有的。
2. Java栈
局部变量表、操作数栈、指向运行时常量池的引用、方法返回地址
3. 本地方法栈
4. 堆
5. 方法区
线程共享的区域。储存了每个类的信息(包括类的名称、方法信息、字段信息),静态变量、常量以及编译器编译的代码。
### 垃圾收集算法主要有哪些?(JVM)
### 类实例化的顺序,比如父类静态数据、构造函数、字段、子类静态数据、构造函数、字段,在new时的顺序(JVM)
### JVM内存的新生代、老年代、持久代。(JVM)
### 描述一次完整的GC流程。(JVM)
### 你知道的JVM参数(JVM)
# 数据库
---
### 数据库隔离级别有哪些,各自的含义是什么,MYSQL默认的隔离级别是是什么?
### 什么是幻读
### Mysql有哪些存储引擎,各自优缺点。
### 高并发下,如何做到安全的修改同一行数据。
### 乐观锁和悲观锁是什么?
### 一张表有几千万的数据,CURD慢,如何优化?
### MySQL调优
https://www.cnblogs.com/claireyuancy/p/7258314.html
### 什么是SQL注入,怎样避免?
sql注入是讲sql代码,添加到输入参数中,传递到sql服务器解析并执行的攻击方法。
1. 不要使用动态的sql
2. 不要将敏感数据保留在纯文本中
3. 现在数据库权限和特权
### Redis
- 什么是 Redis?
- Redis 的特点有哪些?
- Redis 支持的数据类型
- 为什么 Redis 需要把所有数据放到内存中?
- Redis 适用场景有哪些?
- Redis 常用的业务场景有哪些?
- Memcache 与 Redis 的区别都有哪些?
- Redis 相比 memcached 有哪些优势?
- Redis常用的命令有哪些?
- Redis 是单线程的吗?
- Redis 为什么设计成单线程的?
- 一个字符串类型的值能存储最大容量是多少?
- Redis 各个数据类型最大存储量分别是多少?
- Redis 持久化机制有哪些?区别是什么?
- 请介绍一下 RDB、AOF 两种持久化机制的优缺点?
- 什么是缓存穿透?怎么解决?
- 什么是缓存雪崩?怎么解决?
- Redis 支持的 Java 客户端有哪些?简单说明一下特点。
- 缓存的更新策略有几种?分别有什么注意事项?
- 什么是分布式锁?有什么作用?
- 分布式锁可以通过什么来实现?
- 介绍一下分布式锁实现需要注意的事项?
- Redis 怎么实现分布式锁?
- 常见的淘汰算法有哪些?
- Redis 淘汰策略有哪些?
- Redis 缓存失效策略有哪些?
- Redis 的持久化机制有几种方式?
- 请介绍一下持久化机制 RDB, AOF 的优缺点分别是什么?
- Redis 通讯协议是什么?有什么特点?
- 请介绍一下 Redis 的数据类型 SortedSet(zset) 以及底层实现机制?
- Redis 集群最大节点个数是多少?
- Redis 集群的主从复制模型是怎样的?
- Redis 如何做内存优化?
- Redis 事务相关命令有哪些?
- 什么是 Redis 事务?原理是什么?
- Redis 事务的注意点有哪些?
- Redis 为什么不支持回滚?
- 请介绍一下 Redis 集群实现方案
- 请介绍一下 Redis 常见的业务使用场景?
- Redis 集群会有写操作丢失吗?为什么?
- 请介绍一下 Redis 的 Pipeline (管道),以及使用场景
- 请说明一下 Redis 的批量命令与 Pipeline 有什么不同?
- Redis 慢查询是什么?通过什么配置?
- Redis 的慢查询修复经验有哪些?怎么修复的?
- 请介绍一下 Redis 的发布订阅功能
- 请介绍几个可能导致 Redis 阻塞的原因
- 怎么去发现 Redis 阻塞异常情况?
- 如何发现大对象
- Redis 的内存消耗分类有哪些?内存统计使用什么命令?
- 简单介绍一下 Redis 的内存管理方式有哪些?
- 如何设置 Redis 的内存上限?有什么作用?
- 什么是 bigkey?有什么影响?
- 怎么发现bigkey?
- 请简单描述一下 Jedis 的基本使用方法?
- Jedis连接池链接方法有什么优点?
- 冷热数据表示什么意思?
- 缓存命中率表示什么?
- 怎么提高缓存命中率?
- 如何优化 Redis 服务的性能?
- 如何实现本地缓存?请描述一下你知道的方式
- 请介绍一下 Spring 注解缓存
- 如果 AOF 文件的数据出现异常, Redis服务怎么处理?
- Redis 的主从复制模式有什么优缺点?
- Redis sentinel (哨兵) 模式优缺点有哪些?
- Redis 集群架构模式有哪几种?
- 如何设置 Redis 的最大连接数?查看Redis的最大连接数?查看Redis的当前连接数?
- Redis 的链表数据结构的特征有哪些?
- 请介绍一下 Redis 的 String 类型底层实现?
- Redis 的 String 类型使用 SSD 方式实现的好处?
- 设计一下在交易网站首页展示当天最热门售卖商品的前五十名商品列表?
# 框架
---
### 什么是依赖注入?
> 1. 依赖注入有哪些方式
### AOP和IOC的工作机制
### 什么是面向切面
### Spring的加载流程
### Spring AOP的实现原理
### Spring如何管理事务
### SpringBoot的启动机制
### Spring的controller是单例还是多例的
# 网络
---
### `Session`和`Cookie`的区别是什么?
- 前端
- C1-Javascript
- H5图片分块和断点续传
- JavascriptPatterns[Stoyanstefanov]
- macotask和microtask
- 前端代码生成器
- 跨域
- 页面回到顶部滚动按钮实现
- C2-CSS
- 浏览器的一些单位
- 盒模型
- 移动端判断横竖屏
- C3-框架
- ReactNative
- 开发环境搭建(安卓篇)
- Vue
- vue+pdfjs使用
- vue+typescript使用实践
- vue+webpack3.x集成typescript
- Vue源码3
- vue源码分析1
- vue源码分析2
- vue笔记
- C4-工具
- git
- Gitlab-CICD
- mock规则
- vscode-settings
- webpack自定义命令,切换代理地址
- 正则表达式
- 深入浅出webpack
- C5-Node
- express
- express源码阅读
- nightmare使用指南
- 爬虫1.0
- C6-微信
- 微信
- C7-Canvas
- 基础API
- 前端随笔笔记
- 后端
- C1-Java
- shiro
- C2-Linux
- ffmpeg
- ITerm
- Linux
- MongoDB安装
- MySql安装
- Ngnix反向代理
- 常见错误
- 备忘
- mac
- 备忘-Work
- 备忘Link
- 服务器资源
- 教程
- Hexo个人博客搭建笔录
- 文档
- CSS编码规范
- 前端编码规范
- 随笔
- 整理
- 正则
- 链接收藏
- 面试
- CodeWars题库
- CodeWars题库(二)
- Java社招面试题
- Java面试
- Web面试
- 前端笔试题
- 笔试题