1. GC机制(垃圾回收机制)

  • 找到垃圾的方法:引用计数法、可达性分析法

  • 回收垃圾的方法:标记清除算法、复制算法、标记整理法、分代算法

2. JVM内存划分

  • 线程私有:程序计数器、JVM虚拟机栈、本地方法栈
  • 线程公有:堆、方法区、运行时常量池

3. 会发生OOM的区域

  • 堆:内存泄漏
  • JVM虚拟机栈和本地方法栈:递归循环
  • 方法区:早期类加载过多会OOM,现在一般不会

4. 类加载过程

1.加载:将字节码数据从不同的数据源读取到JVM内存,并映射为JVM认可的数据结构

2.链接:

    1. 验证:校验字节信息是否符合规范,避免恶意信息和不规范数据危害JVM运行安全
    2. 准备:创建静态变量,并为静态变量开辟内存空间
    3. 解析:将符号引用替换为直接引用

3.初始化:为静态变量赋值,并执行静态代码块中的逻辑

5. 双亲委派模型

1.类加载器分类

    • 启动类加载器:主要加载jre/lib下的jar文件
    • 扩展类加载器:主要加载jre/lib/ext下的jar文件
    • 应用程序类加载器:主要加载classpath下的文件

2.双亲委派模型:当加载一个类时,优先使用父类加载器加载,当父类加载器无法加载时才使用子类加载器去加载

6. HashMap的原理

  • 可以看作是数组+链表的组合。数组被分为一个个的桶。哈希值决定了键值对在数组中的寻址。具有相同哈希值的键值对会组成链表(避免哈希冲突)。当链表长度超过阈值(默认是8)的时候会触发树化,链表会变成树形结构。

7. HashMap需要关注的4个方法

1.hash方法

    • 将key的hashCode值的高位数据移位到低位进行异或运算。这么做的原因是有些key的hashCode值的差异集中在高位,而哈希寻址是忽略容量以上高位的,这种做法可以有效避免哈希冲突

2.put方法(步骤)

    1. 通过hash方法获取hash值,根据hash值寻址
    2. 如果未发生碰撞,直接放到桶中
    3. 如果发生碰撞,则以链表形式放在桶后
    4. 当链表长度大于阈值后会触发树化,将链表转换为红黑树
    5. 如果数组长度达到阈值,会调用resize方法扩容

3.get方法(步骤)

    1. 通过hash方法获取hash值,根据hash值寻址
    2. 如果与寻址到桶的key相同,直接返回对应的value
    3. 如果发生冲突,分两种情况。如果是树,则调用getTreeNode获取value;如果是链表,则循环遍历查找对应的value

4.resize方法(步骤)

    1. 将原数组扩展为原来的2倍
    2. 重新计算index索引值,将原节点重新放到新的数组中。这一步可以将原先冲突的节点分散到新的桶中

8. sleep和wait的区别

  • sleep方法是Thread类中的静态方法,wait是Object类中的方法
  • sleep并不会释放同步锁,而wait会释放同步锁
  • sleep可以在任何地方使用,而wait方法只能在同步方法或者同步方法块中使用
  • sleep中必须传入时间,而wait可以传也可以不传,不传时间的话只有notify或者notifyAll才能唤醒,传时间的话在时间之后会自动唤醒

9. final、finally、finalize的区别

  • final可以修饰类、变量和方法。修饰类代表这个类不可被继承,修饰变量代表此变量不可被改变,修饰方法表示此方法不可被重写(override)
  • finally是保证重点代码一定会执行的一种机制。通常是使用try-finally或者try-catch-finally来进行文件流的关闭等操作
  • finalize是Object类中的一个方法。它的设计目的是保证对象在垃圾回收前完成特定资源的回收。finalize机制已不推荐使用,并且在JDK9已经被标记为deprecated

10. 常见的单例模式

  • 饿汉式、双重判断的懒汉式、静态内部类实现的单例(最推荐的方式)、枚举实现的单例

单例对象实例需要有volatile修饰,是因为:mInstance = new SingleTon()包含三个操作(给mInstance分配内存,调用SingleTon的构造方法初始化成员变量,将mInstance指向分配的内存空间),又由于JVM会发生指令重排,所以可能调用顺序会发生错误。这样会导致报错。而volatile的作用有保持可见性和禁止指令重排

11. java中引用类型的区别

  • 强引用:指的是通过new对象创建的引用,垃圾回收器即使在内存不足的情况下也不会回收具有强引用的对象
  • 软引用:是通过SoftRefrence实现的,在内存不足之前会被垃圾回收器回收。可用于存储一些内存敏感的缓存
  • 弱引用:是通过WeakRefrence实现的,垃圾回收器只要扫描到就会将其回收。可用于存储一些内存敏感的缓存
  • 虚引用:是通过FanttomRefrence实现的,随时有可能被回收。可用于跟踪对象被垃圾回收的活动,当一个虚引用关联的对象被GC回收之前会受到一条系统通知

12. volatile的原理是在生成的汇编代码中多了一个lock前缀指令,这个前缀指令相当于一个内存屏障,这个屏障有三个作用

  1. 确保指令重排的时候不会把屏障后的指令排在屏障前,确保不会把屏障前的指令排在屏障后
  2. 修改缓存中的共享变量后立即刷新到主存中
  3. 当执行写操作时会导致其他CPU中的缓存无效

13. http与https的区别

  • https需要CA证书,很少免费,需要一定费用
  • http是明文传输,安全性低;而https是http的基础上通过ssl加密,安全性高
  • 默认端口不同。http是80,https是443

14. https的加密算法

  • 称加密:加密和解密用的都是相同的秘钥,优点是速度快,缺点是安全性低。常见的算法有DES、AES等等
  • 非对称加密:非对称加密有一个密钥对,分为公钥和私钥。一般来说,私钥自己持有,公钥可以公开给对方,优点是安全性比对称加密高,缺点是数据传输效率比对称加密低。采用公钥加密的信息只有对应的私钥可以解密。常见的算法有RSA等

正式场景中一般都是采用对称加密和非对称加密结合的方式,使用非对称加密来完成秘钥的传递,然后使用对称加密实现数据的传递。这样保证了安全性又提高了传输效率

大家如果有什么疑问或者建议可以通过评论或者邮件的方式联系我,欢迎大家的评论~

阅读笔记:基础知识(Java篇)的更多相关文章

  1. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

  2. 【进阶之路】Redis基础知识两篇就满足(二)

    导言 大家好,我是南橘,一名练习时常两年半的java练习生,这是我在博客园的第二篇文章,当然,都是要从别处搬运过来的,不过以后新的文章也会在博客园同步发布,希望大家能多多支持^_^ 这篇文章的出现,首 ...

  3. 【进阶之路】Redis基础知识两篇就满足(一)

    导言 大家好,我是南橘,一名练习时常两年半的java练习生,这是我在博客园的第一篇文章,当然,都是要从别处搬运过来的,不过以后新的文章也会在博客园同步发布,希望大家能多多支持^_^ 这篇文章的出现,首 ...

  4. SQL数据库基础知识-巩固篇<一>

    SQL数据库基础知识-巩固篇<一>... =============== 首先展示两款我个人很喜欢的数据库-专用于平时个人SQL技术的练习<特点:体积小,好安装和好卸载,功能完全够用 ...

  5. JavaScript 基础知识 - BOM篇

    前言 本篇文章是JavaScript基础知识的BOM篇,如果前面的<JavaScript基础知识-DOM篇>看完了,现在就可以学习BOM了. 注意: 所有的案例都在这里链接: 提取密码密码 ...

  6. day01<计算机基础知识&Java语言基础>

    计算机基础知识(计算机概述) 计算机基础知识(软件开发和计算机语言概述) 计算机基础知识(人机交互) 计算机基础知识(键盘功能键和快捷键) 计算机基础知识(如何打开DOS控制台) 计算机基础知识(常见 ...

  7. 10-MySQlL DBA笔记-基础知识

    第四部分 运维篇 首先来了解一下数据库的定义,数据库是高效的.可靠的.易用的.安全的多用户存储引擎,我们可以通过它访问大量的持久化数据.我们管理和维护数据库,本质上也是要确保如上的特性,尽可能地保证数 ...

  8. JQuery基础知识梳理篇

    这周没事,优化线上项目,因为前端都在赶项目,我又若菜.于是前端数据展示也要自己来.看javascript看到吐,决定梳理一下Jquery基础知识.敲黑板) 闲扯结束,进入正题. 选择器 介绍 jque ...

  9. JAVA基础知识|java虚拟机(JVM)

    一.JVM简介 java语言是跨平台的,兼容各种操作系统.实现跨平台的基石就是虚拟机(JVM),虚拟机不是跨平台的,所以不同的操作系统需要安装不同的jdk版本(jre=jvm+类库:jdk=jre+开 ...

  10. SQLServer学习笔记<>.基础知识,一些基本命令,单表查询(null top用法,with ties附加属性,over开窗函数),排名函数

    Sqlserver基础知识 (1)创建数据库 创建数据库有两种方式,手动创建和编写sql脚本创建,在这里我采用脚本的方式创建一个名称为TSQLFundamentals2008的数据库.脚本如下:   ...

随机推荐

  1. Java工程师修炼之路(校招总结)

    Java工程师修炼之路(校招总结) 前言 在下本是跨专业渣考研的985渣硕一枚,经历研究生两年的学习积累,有幸于2019秋季招聘中拿到几个公司的研发岗offer,包括百度,阿里,腾讯,今日头条,网易, ...

  2. EF Core in Action 中文翻译 第一部分导航

    Entityframework Core in action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Core ...

  3. idea配置tomcat运行按钮置灰,下拉没有自定义的tomcat选项

    一.问题 下拉没有自定义tomcat的选项 run按钮置灰,点不了 二.解决 添加自己的tomcat时,一定要点加号,不要用那个默认的.

  4. css基础系列

    盒子模型 盒子模型的概念 高和宽的设置 边框的设置 内边距的设置 外边距的设置 盒子的计算 元素显示的方式 盒子模型: border边框,margin外边距,padding内部距,content内容, ...

  5. Angular(01)-- 架构概览

    声明 本系列文章内容梳理自以下来源: Angular 官方中文版教程 官方的教程,其实已经很详细且易懂,这里再次梳理的目的在于复习和巩固相关知识点,刚开始接触学习 Angular 的还是建议以官网为主 ...

  6. 基于weex的app开发脚手架weexplus学习笔记

    认识weexplus weexplus是基于weex官方的二次开发版本,weex和react native一样同属第2代跨平台技术,解决了第一代性能低下,体验不好的问题,同时保留了第一代 多平台一套代 ...

  7. scp传输提示bash: scp: command not found

    其中一端缺少scp相关的包源[oracle@rac1 dump_dir]$ scp /mnt/dump_dir/expdp_orders_2tabs2* 192.168.X.247:/home/ora ...

  8. 国内常用DNS

    114.114.114.114 国内移动,电信,联通通用DNS 223.5.5.5 阿里 223.6.6.6 阿里 180.76.76.76 百度

  9. 不一样的 SQL Server 日期格式化

    不一样的 SQL Server 日期格式化 Intro 最近统计一些数据,需要按天/按小时/按分钟来统计,涉及到一些日期的格式化,网上看了一些文章大部分都是使用 CONVERT 来转换的,SQL Se ...

  10. keil4编译Error: User Command terminated, Exit-Code = 1解决

    编译出错结果如下图: 通过分析可看出,错误原因是:调用fromelf.exe指令的路径不对.Keil中设置的是 E:\Keil\ARM\BIN40\fromelf.exe(安装Keil位置不同,此处显 ...