复习
文章平均质量分 66
冲冲冲!!!
lhj_loveFang_1105
稳住不慌
展开
-
秋招后知识点查漏补缺
Java中object类中的常见方法hashCode()首先这个方法的返回值是int类型,所以hashcode算出来的hash值都是int范围内的值:-2^31 ~ 2^31 - 1默认的hashCode是将内存地址转换为hash值,重写过后才会是自定义的计算方式equals(Object obj)默认的equals方法和==的功能是一样的,==比较的是两个对象的地址是否相同。为什么要重写呢?因为如果不重写equals方法,当将自定义对象放到map或者set中时;如果这时两个对象的ha原创 2021-10-18 19:21:12 · 210 阅读 · 0 评论 -
MySQL为什么推荐自增主键ID为主键及MySQL的调优
页的概念在计算机里,无论是内存还是磁盘,操作系统都是按页的大小进行读取的(页大小通常为 4 kb),磁盘每次读取都会预读,会提前将连续的数据读入内存中,这样就避免了多次 IO,这就是计算机中有名的局部性原理,即我用到一块数据,很大可能这块数据附近的数据也会被用到,干脆一起加载,省得多次 IO 拖慢速度, 这个连续数据有多大呢,必须是操作系统页大小的整数倍。所以MySQL 的页,默认值为 16 KB,也就是说对于 B+ 树的节点,最好设置成页的大小(16 KB),这样一个 B+ 树上的节点就只会有一次 I原创 2021-04-05 15:12:26 · 1997 阅读 · 2 评论 -
IP,DNS,经典面试题:从一个浏览器上输入URL,最终看到页面内容,这中间经历了哪些过程?
IP1.地址管理2.路由选择IPv4地址不够怎么办?1.动态分配2.NAT网络地址转换(本质上是用一个外网IP,代表一组内网的设备)3.IPv6 16个字节来表示IP地址网段划分把一个IP地址分为两个部分:1.网络号2.主机号a.同一个局域网内部的设备,网络号都是相同的,但是主机号都是不同的。b.两个相邻的局域网(同一 个路由器连接的),要求网络号不能相同。那从哪里到哪里是网络号,哪里又是主机号呢?1.经典的方法吧IP地址分成了ABCDE五个类别2.使用子网掩码来进行划分原创 2020-07-09 14:26:47 · 414 阅读 · 0 评论 -
Java中的IO
概述Java 的 I/O 大概可以分成以下几类:磁盘操作:File字节操作:InputStream 和 OutputStream字符操作:Reader 和 Writer对象操作:Serializable网络操作:Socket新的输入/输出:NIO磁盘操作File 类可以用于表示文件和目录的信息,但是它不表示文件的内容。递归地列出一个目录下所有文件:public static void listAllFiles(File dir) { if (dir == null || !原创 2021-04-03 17:25:25 · 163 阅读 · 0 评论 -
Java并发扩充
实现接口 VS 继承 Thread实现接口会更好一些,因为:Java 不支持多重继承,因此继承了 Thread 类就无法继承其它类,但是可以实现多个接口;类可能只要求可执行就行,继承整个 Thread 类开销过大。Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问,第一个是 JVM 实现的 synchronized,而另一个是 JDK 实现的 ReentrantLock。Java 内存模型试图屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一..原创 2021-04-03 13:30:26 · 138 阅读 · 0 评论 -
Java基础扩充~
JVM 会在编译时期将 boolean 类型的数据转换为 int,使用 1 来表示 true,0 表示 false。new Integer(123) 每次都会新建一个对象;Integer.valueOf(123) 会使用缓存池中的对象,多次调用会取得同一个对象的引用。valueOf() 方法的实现比较简单,就是先判断值是否在缓存池中,如果在的话就直接返回缓存池的内容。String 被声明为 final,因此它不可被继承。(Integer 等包装类也不能被继承)在 Java 8 中,String .原创 2021-04-02 12:18:54 · 139 阅读 · 0 评论 -
常见HTTP状态码
1XX 信息100 Continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。2XX 成功200 OK204 No Content :请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。206 Partial Content :表示客户端进行了范围请求,响应报文包含由 Content-Range 指定范围的实体内容。3XX 重定向301 Moved Permanently原创 2021-03-31 18:10:04 · 147 阅读 · 0 评论 -
操作系统常见调度算法一举拿下~
大纲进程调度算法(CPU调度算法)先来先服务调度算法最短作业优先调度算法高响应比优先调度算法时间片轮转调度算法最高优先级调度算法页面置换算法最佳页面置换算法先进先出置换算法最近最久未使用的置换算法时钟页面置换算法最不常用置换算法磁盘调度算法先来先服务算法最短寻道时间优先算法扫描算法(电梯调度算法)循环扫描算法LOOK与C-LOOK算法进程调度算法(CPU调度算法)先来先服务调度算法每次从就绪队列选择最先进入队列的进程,然后一直运行,直到原创 2021-03-31 14:48:33 · 237 阅读 · 0 评论 -
进程间的通信方式
方式管道消息队列共享内存信号量信号socket每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。管道匿名管道$ ps auxf | grep mysql上面命令行里的「|」竖线就是一个管道,它的功能是将前一个命令(ps auxf)的输出,作为后一个命令(grep mysql)的输入,从这功能描述,可以看出管道传输数据是单向的,如果想相互通信,我们需要创建两个管道才行。命名管道管道还有另外一原创 2021-03-30 15:07:25 · 205 阅读 · 0 评论 -
TCP三次握手,四次挥手补充
概述TCP连接:用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket、序列号和窗口大小称为连接。建立一个 TCP 连接是需要客户端与服务器端达成三个信息的共识。Socket:由 IP 地址和端口号组成序列号:用来解决乱序问题等窗口大小:用来做流量控制如何唯一确定一个 TCP 连接呢?四元组:源地址源端口目的地址目的端口TCP和UDP区别TCP面向连接。UDP不需要连接TCP是一对一两点服务,UDP支持一对一,一对多,原创 2021-03-30 13:33:57 · 201 阅读 · 2 评论 -
CMS和G1垃圾收集器
CMSCMS(Concurrent Mark Sweep) 收集器是一种以获取最短回收停顿时间为目标的收集器。 目前很大一部分的Java应用集中在互联网网站或者基于浏览器的B/S系统的服务端上, 这类应用通常都会较为关注服务的响应速度, 希望系统停顿时间尽可能短, 以给用户带来良好的交互体验。 CMS收集器就非常符合这类应用的需求。从名字(包含“Mark Sweep”) 上就可以看出CMS收集器是基于标记-清除算法实现的, 它的运作过程相对于前面几种收集器来说要更复杂一些, 整个过程分为四个步骤, 包括:原创 2021-03-28 12:29:56 · 169 阅读 · 1 评论 -
JVM运行时数据区
运行时数据区Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁本地方法栈native :凡是带了native关键字的,说明java的作用范围达不到了,回去调用底层c语言的库!会进入本地方法栈调用本地方法本地接口:JNIJNI作用:扩展java的使用,融合不同的编程语言为ava所用!最初:C、C++。Java诞生的时候c、C++横行原创 2021-01-20 13:55:30 · 81 阅读 · 0 评论 -
双亲委派机制
JVM流程结构其中大部分垃圾都是在方法区和堆中的,其他区域中没啥垃圾。双亲委派JVM四种类加载器如上图。他们这种之间的层次管理,就成为双亲委派模型。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性。当我们比较两个类是否相等的时候,前提是:只有在这两个类是由同一个类加载器加载为前提下才有意义的如果从JVM角度来讲的话,类的加载器只有两种:启动类加载器。这个类是C++写的,是JVM虚拟机自身的一部分;另一种就是所有其他类的类加载器了。是Java写的,原创 2021-01-20 12:27:42 · 110 阅读 · 0 评论 -
线程的状态
线程对象在不同的运行时期有不同的状态,状态信息就存在于State枚举类中线程状态有如上6种。NEW状态是线程实例化后还从未执行start()方法时的状态RUNNABLE状态是线程进入运行的状态TERMINATED是线程被销毁时的状态。TIMED_WAITING代表线程执行了Thread.sleep()方法,呈等待状态,等待时间到达,继续向下运行。BLOCKED状态出现在某一个线程在等待锁的时候。WAITING是线程执行了Object.wait(方法后所处的状态。...原创 2021-02-14 19:44:41 · 148 阅读 · 0 评论 -
Java中的反射及常见API
概述每个类都有一个 Class 对象,包含了与类有关的信息。当编译一个新类时,会产生一个同名的 .class 文件,该文件内容保存着 Class 对象。通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。程序中一般的对象的类型都是在编译期就确定下来的,而 Java 反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。主要用途反射最重要的用途就是开发各种通用框架。很多框架(比如原创 2021-03-27 18:08:42 · 1169 阅读 · 1 评论 -
Java中泛型常见面试题
Java中的泛型是什么 ? 使用泛型的好处是什么?在集合中存储对象并在使用前进行类型转换是多么的不方便。泛型防止了那种情况的发生。它提供了编译期的类型安全,确保你只能把正确类型的对象放入集合中,避免了在运行时出现ClassCastException。Java的泛型是如何工作的 ? 什么是类型擦除 ?泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息。什么是泛型中的限定通配符和非限定通配符 ?限定通配符对类型进行了限制。有两种限定通配符,一种是.原创 2021-03-27 17:10:16 · 204 阅读 · 0 评论 -
cookie和session的区别
概述cookie机制采用的是在客户端保持状态的方案。而session机制采用的是一种在服务器端保持状态的解决方案。cookie是在服务器返回的HTTP响应的中的set-cookie字段中的,这时候浏览器会解析这个响应并把cookie存在一个本地文件。而session是在服务端,服务器使用一种类似散列表的结构来存储,当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过原创 2021-03-26 15:52:14 · 136 阅读 · 0 评论 -
线程池再理解
线程池参数corePoolSize:线程池的核心线程数量maximumPoolSize:线程池的最大线程数keepAliveTime:当线程数大于核心线程数时,多余的空闲线程存活的最长时间unit:时间单位workQueue:任务队列,用来储存等待执行任务的队列threadFactory:线程工厂,用来创建线程,一般默认即可-handler:拒绝策略,当提交的任务过多而不能及时处理时,我们可以定制策略来处理任务线程池工作原理在创建完线程池之后,默认情况下,线程池中并没有任何线程,等到原创 2021-03-26 12:58:07 · 142 阅读 · 0 评论 -
MySQL的MVCC和幻读解决策略
MVCCInnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现。这两个列,一个保存了行的创建时间,一个保存行的删除时间,并不是实际的时间,而是系统版本号。每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号作比较,MVCC只在可重读读和提交读两种隔离级别下工作。可重复读下的MVCC的操作方法SELECTInnoDB会根据以下两个条件检查每行记录:1.InnoDB只查询版本早于当前事务版本的数据行(也就是,行的系统版本原创 2021-03-26 12:37:25 · 173 阅读 · 0 评论 -
数据库的事务隔离级别怎么实现的?
事务隔离级别针对四个锁带来的问题:脏读,不可重复读,丢失更新,幻读1.未提交读:四个问题都没有解决。他在读取数据时不会加锁,但是在更新数据时会对其加行级共享锁,事务结束后释放。例: 事务A读取某行记录时,事务B也能对这行记录读取更新,当事务B更新记录时,事务A读取到事务B修改的版本,即使事务B未提交。2.已提交读:解决了脏读问题。解决方法:给写数据加行级排它锁,事务结束释放,给读数据加行级共享锁,读完便会释放。例: 事务A负责读,事务B负责写,A读完数据后释放共享锁,B更新数据,事务还未结束,A再原创 2021-03-24 13:28:44 · 246 阅读 · 0 评论 -
ArrayList和LinkedList详解
ArrayListArrayList底层是用数组实现的存储。特点:查询效率高,增删效率低,线程不安全。使用频率很高。通过无参构造方法的方式ArrayList()初始化,则赋值底层数Object[] elementData为一个默认空数组Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}所以数组容量为0,只有真正对数据进行添加add时,才分配默认DEFAULT_CAPACITY = 10的初始容量。扩容1.第一步他会重新定义一个原创 2021-03-23 19:45:30 · 394 阅读 · 0 评论 -
HashMap超详细介绍
概述HashMap是我们非常常用的数据结构,由数组和链表组合构成的数据结构。大概如下,数组里面每个地方都存了Key-Value这样的实例,在Java7叫Entry在Java8中叫Node。因为他本身所有的位置都为null,在put插入的时候会根据key的hash去计算一个index值。哈希冲突当遇到哈希冲突,可以使用链地址法:每一个节点都会保存自身的hash、key、value、以及下个节点,我看看Node的源码。哈希冲突时节点如何插入链表java8之前是头插法,就是说新来的值会取代原原创 2021-03-23 17:50:31 · 627 阅读 · 0 评论 -
Redis内存淘汰策略
Redis内存我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小。通过在Redis安装目录下面的redis.conf配置文件中进行设置。如果不设置最大内存大小或者设置最大内存大小为0,在64位操作系统下不限制内存大小,在32位操作系统下最多使用3GB内存Redis内存淘汰当Redis内存用完的时候,再对其中添加数据不就没有内存了嘛?Redis提供了几种策略来处理这种情况:noeviction原创 2021-03-22 18:55:39 · 121 阅读 · 0 评论 -
Redis知识扩充
RDB持久化根据执行持久化的对象不同又分为SAVA和BGSAVA两种方式SAVA即让Redis服务进程来执行持久化,所以直到RDB持久化结束之前,Redis服务进程会一直处于阻塞状态,无法处理任何命令。BGSAVE则会通过fork()来创建一个子进程,然后让子进程来接管RDB持久化,而父进程继续处理命令请求为了保证文件的安全以及容量更小,RDB持续化所生成的RDB文件是一个经过压缩的二进制文件,通过这个文件就可以还原数据库的状态。由于命令太多时,时间消耗会更大,AOF引入了重写的机制,即..原创 2021-03-22 18:21:44 · 130 阅读 · 0 评论 -
Redis分布式事务和事务锁
分布式事务之前我们的一系列操作都是在一个应用的一个数据库中完成的,保证了事务ACID特性,在分布式中就会涉及跨应用,跨库的操作,就涉及到分布式事务。分布式事务锁原理分布式锁是控制分布式系统之间同步访问共享资源的一种方式。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性。核心思想在被保护的redis节点加一把锁, 让这把锁和被保护的redis节点建立直接映射在访问这个redis之前都去看看这把锁在不在如果不存在锁,说原创 2021-03-22 18:18:41 · 483 阅读 · 0 评论 -
Redis的集群
概述集群是Redis在3.0版本正式推出的分布式解决方案,有效地解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以得到有效解决,并且集群模式有效解决了哨兵模式中哨兵的消耗和哨兵工作的低效率性。集群服务是Redis多机运行的最完美的终极方案, 其完全抛弃了主从同步和哨兵模式, 真正实现了多主多从。分布式存储分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集。假设有10万个用户在该网站登录, 如果要存储原创 2021-03-22 17:35:13 · 239 阅读 · 0 评论 -
Redis保证了ACID原则
原子性Redis中的事务,如果出现命令错误比如指令不存在,那么整个事务中的命令都不会被执行,但如果是语法性错误,那么除了错误指令抛出异常,其他指令正常执行。此外,Redis单条指令也是保证原子性的,比如添加多个元素,其中一个出现错误,那么都不会添加成功。一致性入队错误: 如果一个事务在入队命令的过程中,出现了命令不存在,或者命令的格式不正确等情况,那么Redis将拒绝执行这个事务执行错误: 即使在事务的执行过程中发生了错误,服务器也不会中断事务的执行,它会继续执行事务中余下的其他命令,并且已执行原创 2021-03-21 15:22:26 · 264 阅读 · 0 评论 -
Redis中的跳跃表详解
简介跳跃表(skiplist)是一种随机化的数据结构,是一种可以与平衡树媲美的层次化链表结构——查找、删除、添加等操作都可以在对数期望时间下完成。Redis 的五种基本结构中,有一个叫做 有序列表 zset 的数据结构,它类似于 Java 中的 SortedSet 和 HashMap 的结合体,一方面它是一个 set 保证了内部 value 的唯一性,另一方面又可以给每个 value 赋予一个排序的权重值 score,来达到 排序 的目的。它的内部实现就依赖了一种叫做 「跳跃列表」 的数据结构。本原创 2021-03-21 14:50:35 · 521 阅读 · 0 评论 -
ThreadLocal原理探究和内存泄漏问题
什么是ThreadLocalThreadLocal提供了线程的局部变量,每个线程都可以通过set()和get()来对这个局部变量进行操作,但不会和其他线程的局部变量进行冲突,实现了线程的数据隔离。应用场景管理Connection在学JDBC的时候,为了方便操作写了一个简单数据库连接池,需要数据库连接池的理由也很简单,频繁创建和关闭Connection是一件非常耗费资源的操作,因此需要创建数据库连接池。那么,数据库连接池的连接怎么管理呢??我们交由ThreadLocal来进行管理。为什么交给它来管原创 2021-03-20 16:51:30 · 155 阅读 · 0 评论 -
Volatile再理解~
概述都知道他是实现共享变量在多线程之间的可见性,那么有没有想过是什么导致了这种不可见?变量在多个CPU之间共享(处理器角度实现可见性)现代计算机内存模型。其实早期计算机中cpu和内存的速度是差不多的,但在现代计算机中,cpu的指令速度远超内存的存取速度,由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲。将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再原创 2021-03-20 15:02:03 · 150 阅读 · 0 评论