• 主要供日后自己复习用,仅罗列知识点

    JavaSE

  • 泛型

    • 什么是泛型
    • 什么是泛型擦除
    • 介绍一下泛型常用的通配符
      • TEKV?
  • == 与 equals()的区别
    • == 对于基本类型和引用类型的作用效果
      • 对于基本类型比较的是
      • 对于饮用类型比较的是
    • equals() 作用效果
      • 判断两个对象是否相等,存在于object类中
    • equals() 方法的两种情况
      • 类覆盖了equals()方法
        • 按照覆盖方法定义的规则判断
      • 类没有覆盖
        • 按照object类中对引用地址进行判断 等价于 ==
    • String类的equals()方法
      • 是经过重写的,object类中的equals比较的是地址,string中的equals比较的是值
  • hashcode()与equals()
    • hashcode()的作用
      • 减少比较的成本,提高比较的效率
    • 为什么要有hashcode
      • 以hashSet的源码中的putval方法举例
        • hashset 中存放对象,且不允许有重复,在进行元素添加的时候,首先比对对象的的hashcode,
    • 为什么重写equals()时必须重写hashcode()方法
      • 两个相等对象的hashcode也必须是相等的,如果equals方法判断两个对象相等,那么他闷的hashcode也必须相等
      • 如果重写equals但是没有重写hashcode会导致equals判断相等,但是hashcode值不同
  • 基本数据类型
    • int,long,short,char,boolean,float,double,byte
  • 包装类型的常量池技术
    • 哪些有缓存,哪些无缓存,有缓存的包装类型的数据范围
      • integer 有缓存,character有缓存
  • 自动装箱与拆箱指什么,原理是什么?
    • 装箱
      • 基本类型使用包装类型包装起来
    • 拆箱
      • 包装类型转换为基本类型
    • 分别调用的方法
      • 装箱其实调用的就是 包装类.valueOf()方法
      • 拆箱则是 包装类型.xxxValue()方法
    • 频繁拆装箱会造成什么?
      • 会造成不必要的性能损耗
  • JavaOOP
    • 成员变量与局部变量的区别有哪些
      • 从语法形式上来看
      • 从变量在内存中的存储方式来看
      • 村变量在内存中的生存时间上来看
      • 从变量是否有默认值来看
    • 创建一个对象用什么运算符,对象实体与对象引用有什么不同?
    • 对象的相等 与 指向他们的引用相等,二者有什么不同
    • 以个类的构造方法的作用是什么
      • 如果一个类没有声明构造方法,那该程序是否可以正常执行?为什么?
    • 构造方法的特点?是否可以被重写 override
  • 面向对象三大特性
    • 封装
    • 继承
      • 继承相关 子类与父类的关系,访问限制
    • 多态
      • 静态绑定与动态绑定指的是什么
      • 向下转型与向上转型指的是什么,分别是什么使用背景
      • 向上转型的实现原理是什么
      • 多态实现的三个条件是什么
  • String ,StringBuffer,StringBuilder 的区别是什么,String为什么是不可变
    • String 底层是一个char[] 数组,同时被private final 进行了修饰
    • 线程安全行方面
      • stringbuffer 安全 单效率相对较低
      • stringbuilder 不安全 但是效率更高
    • 性能方面
    • 三者使用场景总结
      • 操作少量数据 使用string
      • 单线程操作字符缓冲区下操作大量数据 stringbuilder
      • 多县城操作自负缓冲区下操作大量数据 stringbuffer
  • Object类常见方法总结
  • 深拷贝和浅拷贝区别了解么,什么是引用拷贝
    • 浅拷贝
      • 会在堆上创建一个新的对象,引用栈中愿对象地址,如果对象内部属性有引用类型,会直接复制 内部属性的引用地址。
    • 深拷贝
      • 完全复制整个对象,如果内部有引用类型属性,则一并复制,而非单纯复制引用地址
  • 反射
    • 反射的作用
    • 通过反射获取类的方式有哪4种
      • 全类名 - 知晓类全路径的情况下
      • 对象getClass() - 拥有对象实例的情况下
      • 类.Class - 知道具体类的情况下
      • 类加载起loadClass 全路径获取 - 同 知晓类全路径的情况下
    • 反射相关api
      • 获取 成员属性
      • 获取 成员方法
      • 获取 构造方法
      • 调用 成员方法
    • 暴力获取,setAccessable true
  • 异常
  • I/O流
    • 序列化
    • 反序列化
    • java 序列化中如果有些字段不想进行序列化怎么办
    • java 中的 io流分为几种?
      • 按照流的流向划分
      • 按照操作单元划分
      • 按照流的角色划分
    • 既然有了字节流,为什么还要有字符流
      • 问题本质想问:不管是文件读写还是网络发送接收,信息的最小存储单元都是字节,那为什么 I/O 流操作要分为字节流操作和字符流操作呢?
  • 代理详解 javaguide 未学习,后补完
  • io详解,后补完

    Java 集合框架基础&面试要点

  • List,Set,Querue,Map 四者区别

  • 如何选用集合
  • 为什么要使用集合?
  • Collection 子接口 LIst
    • ArrayList 和 Vector 的区别
    • ArrayList 和 LinkedList 的区别
      • 底层数据结构
      • 线程安全,
      • 插入删除是否受元素位置影响
      • 是否支持快速随机访问
      • 内存占用空间
      • 双向链表 双向循环链表
    • ArrayList 的扩容机制
  • Collection 自接口 set
    • comparable 和 comparator的区别
      • Comparator 定制排序
      • 重写compareTo方法实现定制排序
  • 无序性和不可重复性的含义是什么
  • 比较HashSet LinkedHashSet 和 TreeSet三者异同
    • 线程是否安全
    • 底层数据结构方面
    • 应用场景
  • Collection子接口之 Queue
    • Queue 与 Deque 的区别
  • Map接口
    • hashmap和hashtable的区别
      • 线程安全方面
      • 效率方面
      • null key & null value 方面
      • 初始容量和 每次 扩充容量大小方面
      • 底层数据结构
    • hashMap和hashSet区别
      • 实现接口方面
      • 存储对象方面
      • 添加元素方面
    • hashMap 和 TreeMap区别
    • hashSet 如何检查重复
  • HashMap的底层实现
  • hashMap的长度为什么是2的幂次方
  • hashMap 有哪几种遍历方式
  • currentHashmap 和hashtable的区别

    • 底层数据结构区别
    • 实现线程安全的方式

      Java 集合使用注意点总结

  • 集合判空

  • 集合转Map
  • 集合遍历
  • 集合去重复
  • 集合转数组‘
  • 数组转集合的坑点

    Java arrayList 源码 及 扩容机制分析

    Java 并发常见知识点

  • https://www.cnblogs.com/yjd_hycf_space/p/7526608.html

  • 什么是线程
  • 什么是进程
  • 什么是上下文切换
  • 如何预防和避免线程死锁
  • 实现多线程的方法(4种
    • callable
      • a:创建Callable接口的实现类 ,并实现Call方法
        b:创建Callable实现类的实现,使用FutureTask类包装Callable对象,该FutureTask对象封装了Callable对象的Call方法的返回值
        c:使用FutureTask对象作为Thread对象的target创建并启动线程
        d:调用FutureTask对象的get()来获取子线程执行结束的返回值
    • 线程池
      • executors
  • Thread 和 runnable的区别
  • 线程状态都有哪几种,其中阻塞状态有哪三种
    • 等待阻塞
    • 同步阻塞
    • 其他阻塞
  • 线程调度
    • 线程优先级
    • 线程睡眠
    • 线程等待
    • 线程让步
    • 线程加入
    • 线程唤醒
  • 线程数据传递
    • 构造方法传递
    • 函数回调传递
  • 如何取得多线程运行的返回值?
  • callable 接口 和 future接口的区别?
  1. (1)Callable规定的方法是call(),而Runnable规定的方法是run().
  2. (2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。
  3. (3)call()方法可抛出异常,而run()方法是不能抛出异常的。
  4. (4)运行Callable任务可拿到一个Future对象, Future表示异步计算的结果。
  5. 它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。
  6. 通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。
  7. Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。
  • 简述线程与进程的关系,区别,优缺点?
    • jvm角度,理解堆栈,方法区
  • 程序计数器为什么是私有的?
  • 虚拟机栈和本地方法栈为什么是私有的?
  • 一句话简单了解堆和方法区
  • 并发并行的区别
    • 并发: 同一时间段,多个任务都在执行 (单位时间内不一定同时执行);
    • 并行: 单位时间内,多个任务同时执行。
  • 为什么使用多线程
  • 多线程可能会带来什么问题
    • oom,死锁,线程不安全等等,超买超卖
  • 线程生命周期和状态
  • 说说sleep()方法和wait() 方法区别与共同点
    • 区别
      • sleep方法没有释放锁,wait方法是释放锁的
      • wait() 通常被用来线程之间的交互/通信,sleep() 常用来暂停执行
      • wait() 方法调用之后,线程不会自动苏醒,需要别的线程调用同一个对象上的notify() 或者notifyAll()方法,sleep方法执行完成之后,线程会自动苏醒。或者使用wait()的重载方法 wait(long timeout),超时之后线程会自动苏醒
    • 共同点
      • 两者都可以用来暂停线程执行
  • 为什么调用start() 方法会执行run() 方法,为什么不直接调用run方法?
    • start方法会启动一个线程进入就绪状态,分配到cpu时间片就可以开始运行,start()会执行线程的准备工作,自动执行run方法的内容
    • 直接执行run() 方法会把run()方法当成一个main线程下的普通方法去执行
  • 说说对synchronized 关键字的理解
  • 说说自己是怎么使用synchronized关键字的
    • 修饰实力方法
    • 修饰静态方法
    • 修饰代码块
  • 构造方法是否可以使用synchornized进行修饰?
  • synchronized 关键字的底层原理
    • jvm
  • jdk1.6之后的synchornized关键字进行了哪些层面的优化,可详细介绍一下么?

    volatile 关键字

  • CPU 缓存模型

    • 为什么要弄一个cpu告诉缓存呢
  • 说说synchronized 关键字和 volatile 关键字的区别

    • 二者关系是互补
    • volatile 本质是告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主内存中读取,
    • synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞
    • volatile仅能使用在变量级别,synchronized则可以使用在变量,方法,和类级别的
    • volatile仅能实现变量的修改可见性,不能保证原子性,而synchronized可以保证变量的修改可见性和原子性
    • volatile不会造成线程的阻塞,synchronized可能会造成线程的阻塞
    • volatile标记的变量不会被编译器优化,synchronized标记的变量可以被编译器优化

      ThreadLocal

  • ThreadLocal内存泄漏问题

  • 强引用,弱引用的区别
  • 为什么ThreadLocal的key是若饮用,如果是强引用会又什么问题

    为什么使用了synchronize,lock 还要再使用 分布式锁

    线程池

  • 为什么要用线程池

  • 实现runnable接口和callable接口的区别
  • 线程池对象方法 ,execute() 方法和 submit() 方法的区别是什么?

    如何创建线程池

  • 构造方法实现

  • 通过Executor框架的工具类 Execuotrs 来进行实现

    • FixedThreadPool
    • SingleThreadExecutor
    • CachedThreadPool

      计算机网络常见知识点

  • OSI 与 tcp/ip 各层结构与功能,都有那些协议

    • osi 七层都有哪七层
    • TCP/IP 四层协议都有那四层
    • 五层协议指什么
  • TCP 三次握手和四次挥手
  • TCP/UDP 协议区别
  • 浏览器中输入 url地址 到 现实页面的过程
  • HTTP 长链接,短链接
  • HTTP 不是保存状态的协议,如何保存用户状态
  • cookie 被禁用的情况怎么办
  • cookie的作用是什么,和session又什么区别
  • URI 和 URL 的区别是什么
  • HTTP 和HTTPS 的区别

    • 端口上
    • 安全性和资源消耗

      Redis

  • redis除了做缓存还能做什么

    • 分布式锁
    • 限流
    • 消息队列
    • 复杂业务场景
  • 数据类型
    • String
    • list
    • hash
    • set
    • soted set
    • bitmap
  • Redis 给缓存数据设置过期时间有什么用
  • 过期除了有助于缓解内存的消耗,还有其他的作用嘛
  • Redis 的持久化机制了解么
    • rdb
    • aof
  • Redis 事务 跟 平常理解的关系型数据库的事务有什么区别�?
  • 缓存穿透 怎么解决 ?
  • 缓存击穿 怎么解决?
  • 缓存雪崩 怎么解决?
  • 如何保证缓存和数据库数据的一致性
  • Redis的分布式锁 redisson
    • 看门狗的原理
  • 分布式锁

    • 本地锁,分布式锁,区别是什么。

      面对一个接口你将如何测试?

  • 等价类

  • 边界值
  • 空值
  • 越权
  • 操作关键性数据的接口
    • 并发,测试超买,超卖,超领,整体思维为时序图时间暂停思路。 目的为测试高并发下对于重要数据资源有没有加锁,有没有bug。
  • sql注入

    简单JVM要点

  • jvm内存模型

    • 就是jvm内部构造,堆,栈,方法区,分别用来做什么
  • 并发变成之下,哪些部分是共享,哪些为线程私有
  • 强饮用,若饮用,需饮用,软引用都是什么意思,有什么区别,为什么要这么区分

    • 关联问题 threadlocal 为什么将key设计成软引用

      Spring系

  • spring的事务管理方式

    • 编程式事务管理
    • 声明式事务管理
      • 本质是什么?
  • spring事务传播级别

一、Propagation (事务的传播属性)
Propagation :key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用:
PROPAGATION_REQUIRED —支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS —支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY—支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW —新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED —以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER —以非事务方式执行,如果当前存在事务,则抛出异常

  • 事务隔离级别

    • acid

      SpringBoot

  • 什么是springBoot

  • Springboot有那些优点
  • 核心竹节是哪个? 主要是有哪几个注解组成的?
    • SpringBootConfiguration 组合了@Configuration 注解
    • EnableAutoConfigguration 打开自动配置功能,也可以关闭某个自动配置的选项 exclude
    • CompontScan
  • 什么是JavaConfig
  • SpringBoot 自动配置原理是什么
    • @EnableAutoConfiguration 给容器导入META-INF/spring.factories 里定义的自动配置类。
  • Springboot 配置加载的顺序是怎样的?
    • properties文件
    • yaml文件
    • 系统环境变量
    • 命令行参数
  • Spring Boot 中的 starter 到底是什么 ?
  • 微服务中如何实现session共享
    • 在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享 session ,常见的方案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的 session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上的 session 。这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实现,使得 session 的同步操作对开发人员而言是透明的,非常简便。
  • 说说spring里面用了哪些设计模式
    • 单例模式
    • 工厂模式
    • 代理模式
    • 模板方法模式
  • IOC AOP的理解
    • IOC
      • BeanFactory ApplicationContext 两种ioc容器,来进行对Bean的管理
    • AOP
      • 面向切面编程
      • Spring主要提供了 Aspect 切面、JoinPoint 连接点、PointCut 切入点、Advice 增强等实现方式。
  • BeanFactory 和 FactoryBean 有什么区别
    • BeanFactory 是bean的工厂,applicationContext的爸爸,ioc容器的核心,负责生产和管理bean对象
    • FactoryBean 是 Bean,可以通过实现 FactoryBean 接口定制实例化 Bean 的逻辑,通过代理一个Bean对象,对方法前后做一些操作。