阅读笔记:基础知识(Java篇)

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等

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

 

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

转载于:https://www.cnblogs.com/lanxingren/p/9830911.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle和mysql数据实时同步_异构数据源的CDC实时同步系统——最终选型实战

引言:《异构数据源的CDC实时同步系统》 系列第一篇 (已完成)《零编码打造异构数据实时同步系统——异构数据源CDC之2》 系列第二篇(已完成)《零编码打造异构数据实时同步系统——异构数据源CDC之3》 系列第三篇(已完成)《异构数据源的CDC实时同步系统——最终选型实…

使用DynamoDBMapper插入DynamoDB项目

在上一篇文章中,我们使用DynamoDBMapper来将DynamoDB表映射到Java对象。 插入时,我们的动作几乎相同,但是方式更方便。 为了插入项目,您要做的就是使用对象映射器持久化对象 在我们的例子中,我们将创建一个执行简单插…

在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器,sqlserver

今早开机发现,打开SQL Server 2008 的 SQL Server Management Studio,输入sa的密码发现,无法登陆数据库?提示以下错误: “在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请…

matlab 与数据库操作

第一部分:读取数据其相关信息查看 1. 配置数据源 (1).“控制面板”----“管理工具”——“数据源(ODBC)”——“添加”——“创建数据源名称和选择数据库文件”。具体操作见数据源配置: http://blog.c…

PHP05

php05 1、音乐案例删除部分 1)通过执行某些PHP代码获取到指定的数据,填充到html的指定位置 accept属性也可以直接写扩展名,多个扩展名间用英文的逗号分隔 accept".lrc" 允许选中多个文件,文件域属性:multiple 直接写该属…

算术运算导致溢出_CPU的控制器与运算器

计算机基础方面的知识,对于一些非科班出身的同学来讲,一直是他们心中的痛,而对于科班出身的同学,很多同学在工作之后,也意识到自身所学知识的不足与欠缺,想回头补补基础知识。关于计算机基础的课程很多&…

Windows下,Netbeans使用C++的配置方法

如果尚未安装 NetBeans IDE,请转至http://www.netbeans.org/community/releases/,然后下载包含最近的 C/C 支持的 IDE 版本。 如果已安装 NetBeans IDE 但未包含 C/C 支持,请完成以下步骤为 IDE 添加 C/C 支持。 从主菜单中选择“工具”>“…

为了简单起见,Arquillian Chameleon

使用Arquillian时,您需要做的一件事就是定义要在哪个容器下执行所有测试。 这是通过在适配器的类路径中添加依赖项并取决于所使用的模式(嵌入式,托管或远程)来下载的来完成的。 手动安装应用程序服务器。 例如,当在嵌…

matlab 读取文件夹底下所有txt文件

读取matlab 文件夹底下所有的txt 文件包括子文件夹底下的文件。 dirsdir(H:\DCE); for i1:length(dirs); if (dirs(i).isdir && ~strcmp(dirs(i).name,.) && ~strcmp(dirs(i).name,..) ) str_path[H:\DCE\, dirs(i).name]; filedir([str_path,\*.txt]);…

BZOJ4856 JSOI2016 病毒感染 区间DP

传送门 原Word文档 题意:太长不给 这种题目一看就是区间DP 设$f_i$表示治愈了前$i$个村子的时候最少死了多少村民,又设前缀和为$sum_i$,通过枚举折返时最后经过的村子$j$,并且提前计算$i1$到$N$中死的村民数量,可以得到…

go get 的不再src目录中_Go 每日一库之 sqlc:根据 sql 生成代码

简介在 Go 语言中编写数据库操作代码真的非常痛苦!database/sql标准库提供的都是比较底层的接口。我们需要编写大量重复的代码。大量的模板代码不仅写起来烦,而且还容易出错。有时候字段类型修改了一下,可能就需要改动很多地方;添…

查看linux服务器的系统信息

查看linux服务器的系统信息新接手了几台linux的服务器,第一步当然是要了解这些服务器的软硬件配置.现在就写出我这次用的一些命令.首先当然要取得机器的IP,用户名和密码(呵呵,不知道就找原来的管理员要哈)登陆之后,首先看到的就是机器的名称,一般提示符就有了,如[rootlocalhost…

Windows下更改MySQL数据库的存储位置

一.同一主机下位置的转移 在mysql安装完成后,要修改数据库存储的位置,比如从安装目录下的C:\Program Files\MySQL\MySQL Server 5.0\Data文件夹转移到D:\mySQLData文件夹。 1、在D:\下新建mySQLData文件夹 2、停止MySQL服务,将C:\Program Fil…

apk去除签名验证工具安卓版_App 签名过期或泄露怎么办?别担心,Google 已经给出解决方案!...

一、序在将 App 发布到市场之前,很重要的一个步骤就是为 APK 进行签名,大部分时候,这个操作隐藏在了打包的流程中,而不被我们注意到。签名的作用,除了证明 App 的所有权之外,还可以帮助 Android 市场和设备…

初入WEBOTS半个月来的一点总结

对于我这一个从十一假期结束后才刚刚接触webots的小白来说,webots简直就是一个噩梦。在这里记录一下噩梦的发展历程。 在最初安装webots时就遇到了麻烦。安装7.0.3总是出问题。程序找不到接入点。替换dll文件也没有用更新运行库也不行。最好索性重新买固态硬盘做了个…

skype 回放设备出现问题

最近用skype拨打电话换台电脑会出现“回放设备出现问题”,拨通号码后会自动跳掉无法拨通 一直更新声音驱动器,结果发现跟声卡驱动半毛钱关系都没有,是要插入耳麦。

sonar java_修复Sonar中常见的Java安全代码冲突

sonar java本文旨在向您展示如何快速修复最常见的Java安全代码冲突。 它假定您熟悉代码规则和违规的概念以及Sonar如何对其进行报告。 但是,如果您以前从未听过这些术语,则可以阅读Sonar Concepts或即将出版的有关Sonar的书 ,以获取更详细的解…

linux服务器性能查看

################### cpu性能查看 ############################################################1、查看物理cpu个数:cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l2、查看每个物理cpu中的core个数:cat /proc/cpuinfo |grep "…

android sdk 安装_Appium+python自动化1-环境安装(上)

前言appium可以说是做app自动化测试最火的一个框架,它的主要优势是支持android和ios,另外脚本语言也是支持java和Python。小编擅长Python,所以接下来的教程是appiumpython的实例。学习appium最大的难处在于环境的安装,80%的人死于…

Mean

题目描述 NiroBC 是猫咪学堂一年级的新生,开学第一天,学堂组织了一场迎新会,在 迎新会上,猫咪们会互相赠送礼物。 一年级的新生共有 N 只猫咪,编号为 1 . . . N(包括 NiroBC 自己),其…