java知识点理解记录

刚进公司,速成学习的技术,迫于开发项目,体现价值。很多人,或许和我一样,对很多地方的原理不能清晰了解。记录下来,方便继续模块化学习和复习。

—————— 不能只停留在会用,要多清晰原理 ——————

Java基础

1、List 和 Set 的区别?

list是有序的,数据也是可以重复的;
set是无序的,数据是不会重复的。

2、HashSet 是如何保证不重复的?

当向set集合add时候,首先先会判断hashCode是不是相同,
如果hashCode相同,在通过equal方法比较值,只有有不相同的就存。

4、HashMap 的原理

hashMap其实是通过数组和链表来实现存储的。
存储时,通过hashCode hash计算出其在数组中对应的下标,同时比对key,如果key值不同,直接将key-value存到链表中;
如果key相同,则覆盖原始的值。
获取时,直接找到hash值对应的下标,在进一步判断key是否相同,从而找到对应值。

6、final finally finalize

final:定义静态变量的关键字。
finally:捕获异常处理的关键字,不管有无异常都会执行。
finalize:垃圾回收的关键字。是在垃圾收集器清楚对象之前调用。

7、强引用 、软引用、 弱引用、虚引用

强引用:就算jvm内存溢出也不会被回收。
软引用:当内存不足的时候,会被回收。
弱引用:一旦被扫描发现,就会被回收。
虚引用:必须和引用队列使用。

8、Java反射

只有在运行的时候,才知道要用到的类是什么,才知道其完整结构并调用。
在编码的时候更加灵活,代码可以在运行的时候被装配,无需组件源码间的链接,降低了代码的耦合性。
但是,增加了内存消耗,降低了性能。

9、Arrays.sort 实现原理和 Collection 实现原理

都是排序,找到已经排好序数据的子序列,然后对剩余部分排序,然后合并起来。
List<String> strings = Arrays.asList("6", "1", "3", "1","2");
Collections.sort(strings);

String[] strArr = "6,1,3,1,2".split(",");
Arrays.sort(strArr);

10、LinkedHashMap的应用

12、异常分类以及处理机制

异常分为:不可解处理异常(Error)和可以处理异常(Exception);
        Exception分为运行时异常和非运行时异常。
捕获(try/catch)和直接抛出异常(throw)。

13、常见的连接池。

druid、c3p0、DBCP

14、nginx的操作基本命令

查看Nginx的版本号:nginx -V
启动Nginx:sudo nginx
快速停止或关闭Nginx:sudo nginx -s stop
正常停止或关闭Nginx:sudo nginx -s quit
配置文件修改重装载命令:sudo nginx -s reload

15、重写和重载

方法同名,但是参数有不同的是重载。

16、常见的两种动态代理方式。

默认是的jdk代理,然后还有cgLib代理。

17、cookie和session的区别。

无论客户端浏览器做怎么样的设置,session都应该能正常工作。客户端可以选择禁用 cookie,
但是, session 仍然是能够工作的,因为客户端无法禁用服务端的 session。

18、HashMap 和 Hashtable 的区别

1.hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法。
2.hashTable同步的,而HashMap是非同步的,效率上逼hashTable要高。
3.hashMap允许空键值,而hashTable不允许。

19、Spring 框架中用到了哪些设计模式

单例模式—在spring配置文件中定义的bean默认为单例模式。
工厂模式—BeanFactory用来创建对象的实例。

Java 并发
1、synchronized 的实现原理以及锁优化?

2、volatile 的实现原理?

3、Java 的信号灯?

4、synchronized 在静态方法和普通方法的区别?

5、怎么实现所有线程在等待某个事件的发生才会去执行?

6、CAS?CAS 有什么缺陷,如何解决?

7、synchronized 和 lock 有什么区别?

8、Hashtable 是怎么加锁的 ?

9、HashMap 的并发问题?

10、ConcurrenHashMap 介绍?1.8 中为什么要用红黑树?

11、AQS

12、如何检测死锁?怎么预防死锁?

13、Java 内存模型?

14、如何保证多线程下 i++ 结果正确?

15、线程池的种类,区别和使用场景?

16、分析线程池的实现原理和线程的调度过程?

17、线程池如何调优,最大数目如何确认?

18、ThreadLocal原理,用的时候需要注意什么?

19、CountDownLatch 和 CyclicBarrier 的用法,以及相互之间的差别?

20、LockSupport工具

21、Condition接口及其实现原理

22、Fork/Join框架的理解

23、分段锁的原理,锁力度减小的思考

24、八种阻塞队列以及各个阻塞队列的特性

Spring

1、BeanFactory 和 FactoryBean?

BeanFactory是工厂类,用于管理Bean的一个工厂;是IOC容器的核心接口。
作用是:实例化、定位、配置应用程序中的对象及建立各对象之间的关系。

但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,
它的实现与设计模式中的工厂模式和修饰器模式类似。 

2、Spring IOC 的理解,其初始化过程?

IOC容器是具有依赖注入功能的容器,其核心类是BeanFactory。
IOC容器初始化、装配及管理的对象是Bean;
IOC通过配置元数据实例化Bean、管理Bean之间的依赖关系。

1.准备配置文件,元数据,也就是Bean的注入配置。
2.容器对元数据进行解析和装配。
           解析用到的是BeanReader读取、解析;
           实例化、配置和组装Bean,是BeanDefinition。
3.实例化IOC容器,即客户端的实例化,及Bean的调用。

3、BeanFactory 和 ApplicationContext?

BeanFactory实现了IOC容器的最基本功能;
而Spring的content包下ApplicationContent类继承了BeanFactory接口,
对BeanFactory接口扩展,提供了更多企业级的支持,AOP的集成。

===beanfactory顾名思义,它的核心概念就是bean工厂,用作于bean生命周期的管理,
而applicationcontext这个概念就比较丰富了,单看名字(应用上下文)就能看出它包含的范围更广,
它继承自bean factory但不仅仅是继承自这一个接口,还有继承了其他的接口,所以它不仅仅有
bean factory相关概念,更是一个应用系统的上下文,其设计初衷应该是一个包罗万象的对外暴露的一个综合的API)

4、Spring Bean 的生命周期,如何被管理的?

5、Spring Bean 的加载过程是怎样的?

6、如果要你实现Spring AOP,请问怎么实现?

默认使用JDK的动态代理方式。
也可以强制使用CGLIB的动态代理方式。

7、如果要你实现Spring IOC,你会注意哪些问题?

控制反转、依赖注入

8、Spring 是如何管理事务的,事务管理机制?

1.通过xml配置文件配置;
2.通过注解@Transactional实现。

9、Spring 的不同事务传播行为有哪些,干什么用的?

10、Spring 中用到了那些设计模式?

单例模式—在spring配置文件中定义的bean默认为单例模式。
工厂模式—BeanFactory用来创建对象的实例。
适配器—spring aop。
观察者– spring 时间驱动模型。

11、Spring MVC 的工作原理?

人机 > Controller(控制器) > 对应Model(模型) > view(视图) > 人机

12、Spring 循环注入的原理?

13、Spring AOP的理解,各个术语,他们是怎么相互工作的?

14、Spring 如何保证 Controller 并发的安全?

分布式相关

1、Dubbo的底层实现原理和机制

2、描述一个服务从发布到被消费的详细过程

3、分布式系统怎么做服务治理

4、接口的幂等性的概念

5、消息中间件如何解决消息丢失问题

6、Dubbo的服务请求失败怎么处理

7、重连机制会不会造成错误

8、对分布式事务的理解

9、如何实现负载均衡,有哪些算法可以实现?

10、Zookeeper的用途,选举的原理是什么?

11、数据的垂直拆分水平拆分。

12、zookeeper原理和适用场景

13、zookeeper watch机制

14、redis/zk节点宕机如何处理

15、分布式集群下如何做到唯一序列号

16、如何做一个分布式锁

17、用过哪些MQ,怎么用的,和其他mq比较有什么优缺点,MQ的连接是线程安全的吗

18、MQ系统的数据如何保证不丢失

19、列举出你能想到的数据库分库分表策略;分库分表后,如何解决全表查询的问题

20、zookeeper的选举策略

21、全局ID

数据库

1、mysql分页有什么优化

2、悲观锁、乐观锁

3、组合索引,最左原则

4、mysql 的表锁、行锁

5、mysql 性能优化

1.建表时,使用合适的字段属性,设置合适的字段大小。
2.尽量使用关联查询,代替父子查询。
3.建立索引。
4.创建视图。
5.优化sql脚本。(分析sql的执行分析,避免全表扫描)

6、mysql的索引分类:B+,hash;什么情况用什么索引

7、事务的特性和隔离级别

缓存

1、Redis用过哪些数据数据,以及Redis底层怎么实现

2、Redis缓存穿透,缓存雪崩

3、如何使用Redis来实现分布式锁

4、Redis的并发竞争问题如何解决

5、Redis持久化的几种方式,优缺点是什么,怎么实现的

6、Redis的缓存失效策略

7、Redis集群,高可用,原理

8、Redis缓存分片

9、Redis的数据淘汰策略

10、Redis支持事务吗?

redis作为一个高效的分布式数据库,是支持事务的。
multi标识事务的开始,exec标识事务的结束。
其中,multi下的业务操作是在exec后,依次执行。

JVM

1、详细jvm内存模型

类装载器 :启动类装载器、用户自定义类装载器。
执行引擎:即时编译。自适应优化。
运行时数据区:
      方法区、堆 (线程共享)
      java栈、Pc寄存器和本地方法栈     (线程私有)

2、讲讲什么情况下回出现内存溢出,内存泄漏?

内存溢出:比如一个对象长度为int的,你存了一个long型的,就会内存溢出。
内存泄露:申请了的内存无法释放,长此以往,项目就会宕掉了。

3、说说Java线程栈

4、JVM 年轻代到年老代的晋升过程的判断条件是什么呢?

5、JVM 出现 fullGC 很频繁,怎么去线上排查问题?

6、类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式?

7、类的实例化顺序

加载>验证>准备>解析>初始化>使用>卸载

8、JVM垃圾回收机制,何时触发MinorGC等操作

9、JVM 中一次完整的 GC 流程(从 ygc 到 fgc)是怎样的

10、各种回收器,各自优缺点,重点CMS、G1

11、各种回收算法

标记回收
计数回收
复制回收

12、OOM错误,stackoverflow错误,permgen space错误

设计模式:

基本原则5种创建型、7种结构型、11种行为型

单一职责、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、合成聚合(复用)原则。
  1. 单例模式
public class SingleObject {
    
    //新建一个单例对象
    private static SingleObject instance = new SingleObject();
    
    //private的构造方法,不会被初始化
    private SingleObject() {};

    //对象的get方法
    public static SingleObject getInstance() {
        return instance;
    }

    public void showMessage() {
        System.out.println("这是一个单例模式");
    }

}
  1. 工厂模式
工厂方法模式的典型例子,自行车分为山地自行车和公路自行车等,
当需要买自行车时,我们直接去自行车厂里告诉厂长我们需要的自行车即可。
  1. 抽象工厂模式
抽象工厂模式主要解决接口选择的问题,典型例子是手机和电脑问题,假设抽象产品1是手机,
具体产品是Android手机和iOS手机,抽象产品2是电脑,具体产品是Windows电脑和Mac电脑,
抽象工厂是同时生产手机和电脑的公司,具体工厂是联想公司和苹果公司。
抽象工厂的优点是当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
缺点是产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象工厂里加代码,又要在具体工厂里加代码。

4.建造者模式

计算机的组装,计算机是个复杂的对象,它是有很多零件组装而成,显示器、操作系统,鼠标等,
通过创建Builder接口来控制零件的组装过程,这样当组件发生变化时,虽然经过同样的构建过程,但是
最后得到的结果不同。
  1. 观察者模式

  2. 动态代理模式

  3. 适配器模式

  4. 模板模式

  5. 策略模式

补充备注:

一、堆和栈的区别

1、栈中存放的是基本类型变量和对象的引用变量,局部变量在栈内存
2、堆内存放的是new创建的对象和数组,成员变量在堆内存

二、Java创建对象的四种方式:

1、调用new语句创建对象,最常见的一种
2、运用反射创建对象,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()实例方法
3、调用对象的clone()方法
4、 运用序列化手段,调用java.io.ObjectInputStream 对象的 readObject()方法.

三、java的Object对象中提供了那些方法?

最常见的.toString();
类加载/反射--- .getClass()方法;
hashMap --- .hashCode()和.equals()
线程 --- .wait()、.notify、.Allnotfity()
垃圾回收 --- finally()

四、抽象类和接口的区别

抽象类是对根的抽象。
接口是对行为动作的抽象。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容

  • 包含的重点内容:JAVA基础JVM 知识开源框架知识操作系统多线程TCP 与 HTTP架构设计与分布式算法数据库知...
    消失er阅读 4,308评论 1 10
  • 1.java基本数据类型 java一共8个基本数据类型 byte 1字节(1byte = 8 bit)sh...
    陽_young阅读 2,117评论 3 20
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,697评论 0 11
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,414评论 1 14
  • 1. 一位许久不联系的高中同学,突然发来了对话消息。 他说,他自觉现在好颓废啊,让我来拯救拯救他,给他找些心灵鸡汤...
    楚艺白阅读 1,304评论 7 20