美文网首页
java知识点理解记录

java知识点理解记录

作者: Hush____ | 来源:发表于2018-04-19 19:05 被阅读80次

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

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

    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()
    

    四、抽象类和接口的区别

    抽象类是对根的抽象。
    接口是对行为动作的抽象。
    

    相关文章

      网友评论

          本文标题:java知识点理解记录

          本文链接:https://www.haomeiwen.com/subject/przpkftx.html