面试
晓强-
选择和努力一样重要。
展开
-
Redis缓存的雪崩、穿透和击穿
目录Redis常见的三个大问题缓存雪崩缓存穿透缓存击穿总结Redis常见的三个大问题缓存雪崩问题:⽬前电商⾸⻚以及热点数据都会去做缓存 ,⼀般缓存都是定时任务去刷新,或者是查不到之后去更新的。如果所有⾸⻚的Key失效时间都是12⼩时,中午12点刷新的,这时突然有大量用户涌入,但是缓存当时所有的Key都失效了,请求全部落数据库,数据库必然扛不住,可能DBA都没反应过来就直接挂了。解决方法:在批量往Redis存数据的时候,把每个Key的失效时间都加个随机值,这样可以保证数据不会在同⼀时间⼤⾯积失原创 2020-12-25 11:28:11 · 120 阅读 · 0 评论 -
JVM知识脑图
JVM知识脑图原创 2020-10-04 11:06:04 · 138 阅读 · 0 评论 -
进程管理——进程间通信
进程管理引言管道(最简单的方式)匿名管道命名管道消息队列共享内存(最快的方式)信号量信号套接字Socket通信引言每个进程的用户地址空间都是独立的,一般而言是不能相互访问的,但内核空间是每个进程都共享的,所以进程间通信必须通过内核。Linux内核提供了不少进程间通信的机制,我们来瞧瞧有哪些?管道(最简单的方式)Linux内核提供了不少进程间通信的方式,其中最简单的方式就是管道,管道分为匿名管道和命名管道。匿名管道顾名思义,它没有名字标识,一种只存在于内存,不存在于文件系统中的原创 2020-10-03 16:05:26 · 150 阅读 · 0 评论 -
内存管理——分页分段
目录虚拟内存内存分段内存分页操作系统知识脑图虚拟内存问题:单片机的CPU直接操作内存的【物理地址】,在这种情况下,内存中无法同时运行两个程序。假设程序A在200写入一个新值,就会擦掉程序B存放在相同位置上的所有内容。操作系统如何解决这个问题?解:引入虚拟内存。即让操作系统为每个进程分配独立的一套【虚拟地址】,如果程序访问虚拟地址时,由操作系统转换成不同的物理地址,这样不同程序运行,写入的是不同的物理地址,冲突解决了。问题:操作系统如何管理虚拟地址与物理地址之间的关系?解:主要有两原创 2020-10-03 11:22:39 · 454 阅读 · 0 评论 -
TCP的三次握手与四次挥手理解及面试题(很全面)
原文链接 本文经过借鉴书籍资料、他人博客总结出的知识点,欢迎提问 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。 确认号ack:占4个字节,转载 2020-09-21 23:14:22 · 106 阅读 · 0 评论 -
Mysql中的MVCC
原文链接 Mysql到底是怎么实现MVCC的?这个问题无数人都在问,但google中并无答案,本文尝试从Mysql源码中寻找答案。 在Mysql中MVCC是在Innodb存储引擎中得到支持的,Innodb为每行记录都实现了三个隐藏字段:6字节的事务ID(DB_TRX_ID )7字节的回滚指针(DB_ROLL_PTR)隐藏的ID6字节的事物ID用来标识该行所述的事务,7字节的回滚指针转载 2020-09-18 14:42:12 · 322 阅读 · 0 评论 -
MySQL索引类型
目录一、简介二、语句三、索引类型四、缺点五、注意事项一、简介MySQL目前主要有以下几种索引类型:1.普通索引2.唯一索引3.主键索引4.组合索引5.全文索引二、语句CREATE TABLE table_name[col_name data type][unique|fulltext][index|key]index_name[asc|desc]1.unique|fulltext为可选参数,分别表示唯一索引、全文索引2.index和key为同义词,两者作用相同,用来指定创建索引3.转载 2020-09-17 15:00:01 · 64 阅读 · 0 评论 -
项目开发中,数据库是怎么设计的?
目录数据库设计的基本步骤引言1.需求分析阶段(常用自顶向下)2.概念结构设计阶段(常用自底向上)3.逻辑结构设计阶段(E-R图)4.物理设计阶段5.数据库实施阶段6.数据库运行和维护阶段数据库设计的基本步骤按照规范设计的方法,考虑数据库及其应用系统开发全过程,将数据库设计分为以下6个阶段需求分析概念结构设计逻辑结构设计物理结构设计数据库实施数据库的运行和维护引言数据库设计通常分为6个阶段:1、分析用户的需求,包括数据、功能和性能需求;2、概念结构设计:主要采用E-R模型进行设计,包括转载 2020-09-10 16:03:49 · 5758 阅读 · 0 评论 -
浏览器输入网址后,期间发生了什么?
浏览器输入网址后,期间发生了什么?首先对URL进行解析,确定了Web服务器和文件名发送前,根据服务器域名查询对应的IP地址,首先会检查域名是否存在本地的 Hosts 文件里,没有则向 DNS 服务器发送查询请求。之后依次向路由器、ISP DNS查询是否存在【相应的对应关系】,在前面所有步骤没有缓存的情况下,本地 DNS 服务器会将请求转发到互联网上的根域,若最终依然找不到,返回目的主机不存在。通过 DNS 获取到 IP 后,就可以把 HTTP 的传输工作交给操作系统中的协议栈。协议栈原创 2020-09-10 15:47:06 · 178 阅读 · 0 评论 -
赫夫曼编码图解
目录基本介绍思想图解基本介绍赫夫曼编码也翻译为 哈弗曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,属于一种程序算法赫夫曼编码是赫夫曼树在电讯通信中的经典应用之一赫夫曼编码广泛地用于数据文件压缩,其压缩率通常在20%~90%之间赫夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出的一种编码方式,称之为最佳编码思想图解赫夫曼编码的目的是数据压缩,加密解密,将出现频率低的放在二叉树的最下面一层,从而使频率高的能被更快地找到,实现数据压缩的功能假设原创 2020-06-13 16:21:21 · 1272 阅读 · 0 评论 -
实践理解Spring声明式事务管理
目录事务概述Spring事务管理编程式事务管理声明式事务使用方式事务概述在JavaEE企业级开发的应用领域,为了保证数据的完整性和一致性,必须引入数据库事务的概念,所以事务管理是企业级应用程序开发中必不可少的技术。事务就是一组由于逻辑上紧密关联而合并成一个整体(工作单元)的多个数据库操作,这些操作要么都执行,要么都不执行事务的四个关键属性:原子性(atomicity):"原子”的本意是“不可再分”,事务的原子性表现为一个事务中涉及到的多个操作在逻辑上缺一不可。事务的原子性要求事务中的原创 2020-06-11 22:12:06 · 190 阅读 · 0 评论 -
Java实践理解AOP
目录引言AOP概述引言什么是AOP?(面试题),单纯回答面向切面编程不能令面试官满意,最好结合自己的理解。AOP概述AOP(Aspect-Oriented Programming,面向切面编程):是一种新的方法论,是对传统OOP(Obecj-Oriented Programming,面向对象编程)的补充。面向对象 — 纵向继承机制面向切面 — 横向抽取机制AOP编程的主要操作对象是切面(aspect),而切面用于模块化横切关注点(即公共功能Util)在应用AOP编程时,仍然需要原创 2020-06-10 11:57:17 · 232 阅读 · 0 评论 -
依赖注入(DI)和控制反转(IOC)的理解
目录IOC(Inversion of Control):反转控制IOC的作用IOC容器在Spring中的实现DI(Dependency Injection):依赖注入DI的具体实现依赖注入的两种方式set注入构造方法注入P命名空间字面量和ref字面量ref引用当前spring所管理范围的对象怎么给集合赋值IOC(Inversion of Control):反转控制在应用程序中的组件需要获取资源时,传统的方式是组件主动地从容器中获取所需要的资源。在这样的模式下,开发人员往往需要知道在具体容器中特定资源的原创 2020-06-06 23:32:54 · 502 阅读 · 0 评论 -
Java实现01背包--理解动态规划
动态规划动态规划算法介绍动态规划算法的最佳实践-背包问题动态规划算法介绍动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法动态规划算法与分治算法类似,其基本思想都是将待求解问题分成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合用于动态规划求解的问题,经分解得到子问题往往不是相互独立的。(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)动态规划可以通过填表的原创 2020-06-05 12:00:46 · 196 阅读 · 0 评论 -
Java实现数据结构--红黑树RBT
数据结构之红黑树RBT引言红黑树的性质红黑树与[AVL树](https://blog.csdn.net/weixin_40460171/article/details/106534276)的比较红黑树的平衡代码理解引言HashMap底层实现(JDK<=1.7数组+链表,JDK>=1.8数组+链表+红黑树);Hash值产生碰撞后,链表长度>8时会由链表转换为红黑树,而当红黑树的节点<6时,会由红黑树转换为链表。红黑树的性质红黑树是一种特殊的二叉查找树,他在每个节点增加了原创 2020-06-04 14:43:48 · 344 阅读 · 0 评论 -
并发安全核心类AQS同步器原理分析-【实战】模拟商品超卖
并发安全核心类AOS同步器原理分析Java同步器框架AQSJUC基于AQS的内部实现JUC当中同步器的实现如Lock、Latch、Barrier等,都是基于AQS框架实现AQS框架-组件管理CLH同步队列CLH队列是Craig、Landin、Hagersten三人发明的一种基于双向链表数据结构的队列,Java中的CLH队列是原CLH队列的一个变种,线程由原自旋机制改为阻塞机制。AQS将每条请求共享资源的线程封装成一个CLH锁队列的一个结点(Node)来实现锁的分配。通过实践理解原理Java同步器框架AQS原创 2020-06-03 20:02:21 · 212 阅读 · 0 评论 -
JVM虚拟机原理
JVM虚拟机原理JVM内存模型底层执行原理为什么JVM需要性能调优?为什么JVM需要采用分代收集算法?开发项目的时候,用的是什么收集器?为什么用这种收集器?为什么用这种垃圾回收算法?引言:问题1:为什么JVM需要性能调优?问题2:为什么JVM需要采用分代回收思想?问题3:开发项目的时候,用的是什么收集器?为什么用这种收集器?为什么用这种垃圾回收算法?JVM内存模型底层执行原理为什么JVM需要性能调优?因为当项目创建的用户(对象)越来越多的时候,JVM占用的内存就越来越大,导致物理机内存不原创 2020-06-02 20:58:48 · 131 阅读 · 0 评论 -
解决CAS引出来的ABA问题
引言:问题1:证明了volatile不保证原子性后,怎么让其保证原子性?问题2:使用AtomicInteger解决上述问题后,你知道AtomicInteger的实现原理吗问题3:CAS知道嘛?它是如何实现的?问题4:原子类AtomicInteger的ABA问题谈谈?原子更新引用知道吗?CAS的缺点循环时间长,开销很大只能保证一个共享变量的原子操作造成ABA问题ABA问题CAS算法实现的一个重要前提需要取出内存中某时刻的数据并在当下时刻比较并替换,那么在这个时间差会导致数据的变化。原创 2020-06-01 20:40:26 · 102 阅读 · 0 评论 -
AtomicInteger的实现原理
引言:问题1:证明了volatile不保证原子性后,怎么让其保证原子性?问题2:使用AtomicInteger解决上述问题后,你知道AtomicInteger的实现原理吗问题3:CAS知道嘛?它是如何实现的?CAS简介CAS的全称是Compare-And-Swap,**它是一条CPU并发原语**。它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。CAS并发原语体现在JAVA语言中就是sun.misc.Unsafe类中的各个方法。调用UnSafe类中的CAS方原创 2020-06-01 16:30:35 · 636 阅读 · 0 评论 -
volatile实现禁止指令重排优化
题目**你在哪些地方用到过volatile?**单例模式DCL代码单例模式volatile分析多线程模式下单例模式的问题单例模式代码:public class Singleton { //懒汉式单例类 private static volatile Singleton instance = null; private Singleton(){ System.out.println(Thread.currentThread().getName()+"原创 2020-06-01 14:16:19 · 402 阅读 · 0 评论