
笔记
文章平均质量分 84
小问号阿
谦虚学习,一步一脚印
展开
-
2022年5月份面试题集合
没回答上来或者回答的不够好的面试题集合目录第一家mysql什么时候使用行锁,什么时候使用表锁?介绍一下mysql的虚拟表?RabbitMQ和RocketMQ的区别?Spring的AOP你在项目中怎么用?第一家mysql什么时候使用行锁,什么时候使用表锁?介绍一下mysql的虚拟表?RabbitMQ和RocketMQ的区别?Spring的AOP你在项目中怎么用?........................原创 2022-05-17 20:54:14 · 1715 阅读 · 2 评论 -
面试题:你能说一下Redis的常见应用场景吗?
1. 基础内存数据库redis是一个key-value型的数据库(相比较之下,mysql是关联数据库),也就是说,一个key对应着一个value,这是保证高效的手段之一。另外,redis的所有数据使用的时候都存储在内存之中。这包含了两层含义:1、单台redis能存放多少数据,取决于其内存的大小,如果需要存放更多的数据,可以增加内存或者做集群。2、redis支持将数据持久化到硬盘中(aof和rdb)。但是,不会直接对磁盘进行读取。这种持久化,一般是用于在服务器重启时,先把数据持久化,重启后再从硬盘原创 2021-01-30 19:56:29 · 486 阅读 · 0 评论 -
面试题:计算机网络
计算机网络1、OSI与TCP/IP各层的结构与功能,都有哪些协议?2、TCP协议的三次握手和四次挥手三次握手图解为什么要三次握手为什么要传回 SYN传了 SYN,为啥还要传 ACK四次挥手为什么要四次挥手3、TCP,UDP 协议的区别(重点)4、TCP 协议如何保证可靠传输?5、ARQ协议6、滑动窗口和流量控制7、在浏览器中输入url地址 ->> 显示主页的过程(重点)8、HTTP长连接,短连接9、HTTP是不保存状态的协议,如何保存用户状态?10、Cookie的作用是什么?和Session有什原创 2020-05-31 20:46:28 · 377 阅读 · 0 评论 -
面试题:Spring
Spring面试题1、什么是 Spring 框架?2、@RestController vs @Controller3、谈谈自己对于 Spring IoC 和 AOP 的理解4、Spring Aop和AspectJ Aop的区别5、Bean的生命周期6、Spring MVC执行流程1、什么是 Spring 框架?Spring是一种轻量级框架,主要核心功能是ioc和aop,core组件是spring所有组件的核心,Beans和context是实现ioc的基础,aop是用来实现面向切面编程的。2、@Rest原创 2020-05-30 15:41:44 · 449 阅读 · 0 评论 -
面试题:JVM
面试题:JVM1、介绍下 JVM和内部结构。2、分别介绍一下程序计数器、虚拟机栈、本地方法栈、堆和方法区。2.1 程序计数器2.2 虚拟机栈2.3 本地方法栈2.4 堆2.5 方法区2.6 永久代和元空间的区别是什么?3、讲一下类加载的过程4、对象创建的过程5、如何判断对象是否死亡?(两种方法)7、垃圾收集有哪些算法,各自的特点?1、介绍下 JVM和内部结构。JVM是java虚拟机的缩写,java虚拟机是一种规范,其中包括了堆、方法区、虚拟机栈、本地方法栈、程序计数器等部分。java虚拟机主要作用是ja原创 2020-05-29 17:35:35 · 368 阅读 · 0 评论 -
面试题:Java多线程
Java多线程面试题1、什么是进程,什么是线程?2、请简要描述线程与进程的关系,区别及优缺点?3、为什么程序计数器、虚拟机栈、本地方法栈是线程私有的?4、说说并发与并行的区别?5、为什么要使用多线程呢?多线程会产生什么问题?6、说说线程的生命周期和状态?7、什么是上下文切换?8、什么是线程死锁?如何避免死锁?9、说说 sleep() 方法和 wait() 方法区别和共同点?10、为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?11、说一说自己对于 s原创 2020-05-27 22:04:54 · 2278 阅读 · 0 评论 -
面试题:java集合
Java集合面试题1、说说List、Set、Map的区别?2、Arraylist 与 LinkedList 区别?3、ArrayList 与 Vector 区别呢?为什么要用Arraylist取代Vector呢?4、说一说 ArrayList 的扩容机制吧5、HashMap 和 Hashtable 的区别1、说说List、Set、Map的区别?List:可以存储一组有序可重复的对象。Set:可以存储一组不重复的对象。Map:以K,V键值对存储。在Map中通过key去找value。Map中的Key不能原创 2020-05-27 11:44:56 · 285 阅读 · 0 评论 -
个人笔记:ActiveMQ从入门到精通
笔记是根据尚硅谷视频而来,笔记也是从b站里的大神的评论里copy的,只是为了自己再复习一下,所以算抄一份。视频地址:www.bilibili.com/video/av55976700文章目录1.课程基本大纲2.入门概述2.1 MQ的产品种类和对比2.2 MQ的产生背景2.3 MQ的主要作用2.4 MQ的定义2.5 MQ的特点3.ActiveMQ安装和控制台3.1 ActiveMQ安装3.2 ActiveMQ控制台4.入门案例、MQ标准、API详解4.1 pom.xml导入依赖4.2 JMS编码总体规范4原创 2020-05-15 23:47:21 · 1609 阅读 · 0 评论 -
回深圳后三次面试总结
三家公司分别是龙华的小工作室、科技园的小公司、龙岗的百来人的公司,但都没进,在面试的时候节奏把握的不好,一到技术面就急于表现自己,说话很快,回想起来有很多错误,但当下自己没发现,太紧张了估计。基础薄弱,面试官问的问题都是以前看过的面试题,但是都忘了。首先罗列一下技术面问到的问题。1、两个单链表,求它们的交集。2、字符串匹配问题,讲一下KMP算法。3、讲一下java的static关键字。4...原创 2019-12-26 13:28:40 · 266 阅读 · 0 评论 -
深入计算机组成原理(二十二)冒险和预测(一):hazard是“危”也是“机”
过去两讲,我为你讲解了流水线设计CPU所需要的基本概念。接下来,我们看看,要想通过流水线设计来提升CPU 的吞吐率,我们需要冒哪些险。任何一本讲解CPU的流水线设计的教科书,都会提到流水线设计需要解决的三大冒险,分别是结构冒险(Structural Hazard)、数据冒险(Data Hazard)以及控制冒险(Control Hazard)。这三大冒险的名字很有意思,他们都叫做hazard(...转载 2019-08-08 14:59:16 · 6195 阅读 · 0 评论 -
深入计算机组成原理(二十一)面向流水线的指令设计(下):奔腾4是怎么失败的?
上一讲,我给你初步介绍了CPU的流水线级数。乍看起来,流水线级数是一个提升性能的灵丹妙药。它通过把一条指令的额操作切分成更细的多个步骤,可以避免CPU的“浪费”。每一个细分流水线步骤都很简单,所以我们的单个时钟周期的时间就可以设的更短。这也变相地让CPU的主频提升的很快。这一系列的优点,也引出了现代桌面CPU的最后一场大战,也就是Intel的Pentium4和AMD的Athlon之间的竞争。在技...转载 2019-08-07 11:41:47 · 945 阅读 · 0 评论 -
深入计算机组成原理(二十三)冒险和预测(二):流水线里的接力赛
上一讲,我为你讲解了结构冒险和数据冒险,以及对应这两种冒险的两个解决方案。一种方案是增加资源,通过添加指令缓存和数据缓存,让外面对于指令和数据的访问可以同时进行。这个办法帮助CPU解决了取指令和访问数据之间的资源冲突。另一种方案是直接进行等待。通过插入NOP这样的无效指令,等待之前的指令完成。这样外面就能解决不同指令之间的数据依赖问题。第一种方案,好比在软件开发的过程中,发现效率不够,于是研发负...转载 2019-08-10 15:59:04 · 1344 阅读 · 0 评论 -
深入计算机组成原理(二十四)冒险和预测(三):CPU里的“线程池”
过去两讲,我为你讲解了通过增加资源、停顿等待以及主动转发数据的方式,来解决结构冒险和数据冒险问题。对于结构冒险,由于限制来自于同一时钟周期不同的指令,要访问相同的硬件资源,解决方案是增加资源。对于数据冒险,由于限制来自于数据之间的各种依赖,我们可以提前把数据转发到下一个指令。但是即便综合使用这三种技术,我们仍然会遇到不得不停下整个流水线,等待前面的指令完成的情况,也就是采用流水线停顿的方案。比如...转载 2019-08-15 08:38:11 · 1055 阅读 · 0 评论 -
深入计算机组成原理(二十五)冒险和预测(四):今天下雨了,明天还会下雨吗?
过去三讲,我为你介绍了结构冒险和数据冒险,以及增加资源、流水线停顿、操作数前推、乱序执行,这些解决各种“冒险”的技术方案。在结构冒险和数据冒险中,你会发现,所有的流水线停顿操作都要从指令执行阶段开始。流水线的前两个阶段,也就是取指令(IF)和指令译码(ID)的阶段,是不需要停顿的。CPU会在流水线里面直接去取下一条指令,然后进行译码。取指令和指令译码不会需要遇到任何停顿,这是基于一个假设。这个...转载 2019-08-17 10:55:35 · 1362 阅读 · 0 评论 -
什么是CAS机制?如何解决ABA问题?
你知道什么是CAS机制吗?CAS和Synchronized的区别是什么?适用场景呢?原创 2019-08-27 16:20:17 · 12472 阅读 · 12 评论 -
深入计算机组成原理(二十六)Superscalar和VLIW:如何让CPU的吞吐率超过1?
我们先回顾一下第四讲,不知道你是否还记得这个公式: 程序的 CPU 执行时间 = 指令数 × CPI × Clock Cycle Time这个公式里,有一个叫CPI的指标。我们知道,CPI的倒数,又叫做IPC(Instruction Per Clock),也就是一个时钟周期里面能够执行的指令数,代表了CPU的吞吐率。那么,这个指标,放在我们前面几节反复优化流水线架构的CPU里,能达...转载 2019-09-20 09:06:21 · 1478 阅读 · 0 评论 -
深入计算机组成原理(二十七)SIMD:如何加速矩阵乘法
上一讲,我们讲解了CPU里的黑科技,超标量技术和超长指令字技术。超标量技术能够让取指令以及指令译码也并行进行;在编译的过程,超长指令字技术可以搞定指令前后的依赖关系,使得一次可以取一个指令包。不过,CPU里的各种神奇的优化我们还远远没有说完。这一讲里,我们讲一讲最后两个提升CPU性能的架构设计。它们分别是,超线程技术以及可能没有那么熟悉的单指令多数据流技术。超线程:Intel多卖给你的那一倍...转载 2019-09-22 10:50:49 · 4386 阅读 · 7 评论 -
数据库主从同步的作用是什么,如何解决数据不一致问题?
Redis是一种高性能的内存数据库;而MySQL是基于磁盘文件的关系型数据库,相比于Redis来说,读取速度会慢一些,但是功能强大,可以用于存储持久化的数据。在实际工作中,我们常常将Redis作为缓存与...原创 2019-11-29 17:43:04 · 9096 阅读 · 2 评论 -
深入计算机组成原理(十九)建立数据通路(下):指令+运算=CPU
上一讲,我们讲解了时钟信号是怎么实现的,以及怎么利用这个时钟信号,来控制数据的读写,可以使得我们能把需要的数据“存储”下来。那么,这一讲,我们要让计算机“自动”跑起来。通过一个时钟信号,我们可以实现计数器,这个会成为我们的PC寄存器。然后,我们还需要一个能够帮我们在内存里面寻找指定数据地址的译码器,以及解析读取到的机器指令的译码器。这样,我们就能把所有学习到的硬件组件串联起来,变成一个CPU,实...转载 2019-07-07 10:10:00 · 1291 阅读 · 1 评论 -
深入计算机组成原理(十七)建立数据通路(上):指令+运算=CPU
前面几讲里,我从不同的部分为你讲解了CPU的功能。在“指令”部分,我为你讲解了计算机的“指令”是怎么运算的,也就是我们撰写的代码,是怎么编程一条条的机器能够理解的指令的,以及是按照什么样的顺序运行的。在“计算”部分,我为你讲解了计算机的“计算”部分是怎么执行的,数据的二进制表示是怎么样的,我们执行的加法和乘法又是通过什么样的电路来实现的。然而,光知道在两部分还不能算是真正揭开了CPU的秘密,...转载 2019-07-01 12:12:14 · 1648 阅读 · 0 评论 -
CPU多级缓存: 缓存一致性、乱序执行优化
CPU多级缓存当前我们看到的这个图,展示的最简单的高速缓存的配置,数据的读取和存储都经过高速缓存,cpu核心与高速缓存之间有一条特殊的快速通道,在这个简化的图中,主存与高速缓存都连接在一条系统总线上,这条总线同时还用于其他组件的通信。在高速缓存出现后不久,系统变得更加复杂,高速缓存与主存之间的速度差距变得更大,直到加入另一级的缓存,新加入的缓存比第一缓存更大,但是更慢,由于加大一级缓存从经...原创 2019-04-16 18:43:30 · 1565 阅读 · 0 评论 -
介绍消息队列
高并发场景解决方案之一:消息队列在介绍消息队列之前,先看看消息队列在实际业务场景中的简单使用。流程A在处理时,没有在当前线程同步的处理完,而是直接发送一条消息A1到消息队列中,然后消息队列过了一段时间,这段时间可能是几毫秒、几秒甚至几分钟都有可能,这个消息开始被处理,消息被处理的过程,其实就相当于流程A被处理,这是一个简单的模型,我们套上一个实际的业务场景来看一下。例如:业务需要下单成功...原创 2019-04-26 15:49:24 · 386 阅读 · 0 评论 -
深入计算机组成原理(五)计算机指令:让我们试试用纸带编程
你在学写程序的时候,有没有想过,古老时代的计算机程序是怎么写出来的?其实在当年,不想现在这样,都是用一种古老的物理设备,叫做“打孔卡”(Punched Card)。用这种设备写程序,可没法像现在这样,掏出键盘就能打字,而是要先在脑海里或者在纸上写出程序,然后在纸带或者卡片上打洞。这样,要写的程序,要处理的数据,就变成一条条纸带或者卡片,之后再交给当时的计算机去处理。你看这个穿孔纸带是不是有点...转载 2019-06-04 10:44:57 · 2656 阅读 · 0 评论 -
深入计算机组成原理(六)指令跳转:原来if...else就是goto
上一讲,我们讲解了一行代码是怎么变成计算机指令的。你平时写的程序中,肯定不只有int a = 1这样最简单的代码或者指令。我们总是要用到if…else这样的条件判断语句、while和for这样的循环语句,还有函数或者过程调用。对应的,CPU执行的也不只是一条指令,一般一个程序包含很多指令,因为有if…else、for这样的条件和循环存在,这些指令也不会一路平铺执行下去。今天我们就在上一节的基础...转载 2019-06-10 20:25:11 · 5596 阅读 · 3 评论 -
深入计算机组成原理(七)函数调用,为什么会发生stack overflow?
在开发软件的过程中我们经常会遇到错误,如果你用Google搜过出错信息,那你多少应该都访问过Stack Overflow这个网站。作为全球最大的程序员问答网站,Stack Overflow的名字来自于一个常见的报错,就是栈溢出(stack overflow)。今天,我们就从程序的函数调用开始,讲讲函数间的互相调用,在计算机指令层面是怎么实现的,以及什么情况下会发生栈溢出这个错误。为什么我们需要...转载 2019-06-10 21:56:53 · 1057 阅读 · 0 评论 -
深入计算机组成原理(十一)二进制编码:“手持两把锟斤拷,口中疾呼烫烫烫”?
上算法和数据结构课的时候,老师们都会和你说,程序=算法+数据结构。如果对应到组成原理或者说硬件层面,算法就是我们前面讲的各种计算机指令,数据结构就对应我们接下来要讲的二进制数据。众所周知,现代计算机都是用0和1组成的二进制,来表示所有的信息。前面几讲的程序指令用到的机器码,也是使用二进制表示的;我们存储在内存里面的字符串、整数、浮点数也都是用二进制表示的。万事万物在计算机里都是0和1,所以呢,搞...转载 2019-06-20 17:19:52 · 9625 阅读 · 0 评论 -
深入计算机组成原理(十四)乘法器:如何像搭乐高一样搭电路(下)?
和小学学习数学一样,学完了加法之后,我们自然而然就来学习乘法。既然是退回到小学,我们就把问题搞的简单一点,先来看两个4位数的乘法。这里的4位数,当然还是一个二进制数。十进制中的13乘以9,计算的结果应该是117.我们通过转换成二进制,然后列竖式的方法,来看看整个计算的过程是怎么样的。顺序乘法的实现过程从列出竖式的过程中,你会发现,二进制的乘法有一个很大的有点,就是这个过程你不需要背九九乘法...转载 2019-06-25 09:56:58 · 2737 阅读 · 0 评论 -
深入计算机组成原理(九)程序装载:“640k内存”真的不够用么?
计算机这个行业的历史上有过很多成功的预言,最著名的自然是“摩尔定律”。当然免不了的也有很多“失败”的语言,其中一个最著名的就是,比尔盖茨在上世纪80年代说的“640k ought to be enough for anyone”,也就是“640k内存对哪个人来说都够用了”。那个年代,微软开发的还是DOS操作系统,程序员们还在绞尽脑汁,想要用好这极为有限的640k内存。而现在的电脑都是8G以上了,...转载 2019-06-17 15:57:03 · 1423 阅读 · 0 评论 -
深入计算机组成原理(十二)理解电路:从电报机到门电路,我们如何做到“千里传信”?
我们前面讲过机器指令,你应该知道,所有最终执行的程序其实都是使用“0”和“1”这样的二进制代码来表示的。上一讲里,我也向你展示了,对应的整数和字符串,其实也是用“0”和“1”这样的二进制代码来表示的。那么你可能要问了,我知道了这个有什么用呢?毕竟我们人用纸和笔来做运算,都是用十进制,直接用十进制和我们最熟悉的符号不是更简单么?为什么计算机里我们最终要选择二进制呢?这一讲,我和你一起来看看,计算...转载 2019-06-21 16:37:18 · 1201 阅读 · 0 评论 -
深入计算机组成原理(八)ELF和静态链接:为什么程序无法同时在Linux和Windows下运行?
过去的三节,你和我一起通过一些简单的代码,看到了我们写的程序,是怎么变成一条条机器指令的;if…else这样的条件跳转是怎么样执行的;for/while这样的循环是怎么执行的;函数间的互相调用是怎么发生的。既然我们的程序最终都被变成了一条条机器码去执行,那为什么同一个程序,在同一台计算机上,在Linux下可以运行,而在Windows下却不行呢?反过来,Windows上的程序在Linux上也是不能...转载 2019-06-12 09:54:29 · 588 阅读 · 0 评论 -
深入计算机组成原理(十)动态链接:程序内部的”共享单车“
我们之前讲过,程序的链接,是把对应的不同文件内的代码段,合并到一起,成为最后的可执行文件。这个链接的方式,让我们在写代码的时候做到了”复用“。同样的功能代码只用写一次,然后提供给很多不同的程序进行链接就行了。这么说来,”链接“其实有点像我们日常生活中的标准化、模块化生产。我们有一个可以生产标准螺帽的生产线,就可以生产很多不同的螺帽。只要需要螺帽,我们就可以通过链接的方式,去复制一个出来,放到需要...转载 2019-06-18 12:09:36 · 597 阅读 · 1 评论 -
深入计算机组成原理(十三)加法器:如何像搭乐高一样搭电路(上)?
上一讲,我们看到了如何通过电路,在计算机硬件层面设计最基本的单元,门电路。我给你看的门电路非常简单,只能做简单的“与(AND)”、“或(OR)”、“非(NOT)”和“异或(XOR)”,这样最基本的单比特逻辑运算。下面这些门电路的标识,你需要非常熟悉,后续的电路都是由这些门电路组合起来的。这些基本的门电路,是我们计算机硬件端的最基本的“积木”,就好像乐高积木里面最简单的小方块。看似不起眼,但是把...转载 2019-06-22 19:46:10 · 2350 阅读 · 0 评论 -
深入计算机组成原理(十五)浮点数和定点数(上):怎么用有限的bit标识尽可能多的信息?
在我们日常的程序开发中,不只会用到整数。更多情况下,我们用到的都是实数。比如,我们开发一个电商App,商品的价格常常会是9.9;再比如说,现在流行的深度学习算法,对应的机器学习里的模型里的各个权重也都是1.23这样的数。可以说,在实际的应用过程中,这些有零又整的实数,是和整数同样常用的数据类型,我们也需要考虑到。浮点数的不精确性那么,我们能不能用二进制标识所有的实数,然后在二进制下计算它的加减...转载 2019-06-26 17:23:49 · 1164 阅读 · 0 评论 -
深入计算机组成原理(二十)面向流水线的指令设计(上):一心多用的现代CPU
前面我们用了三讲,用一个个的电路组合,制作出了一个完整功能的CPU。这里面一下子给你引入了三个“周期”的概念,分别是指令周期、机器周期(或者CPU周期)以及时钟周期。你可能会有点摸不着头脑,为什么小小一个CPU,有那么多的周期(Cycle)呢?我们在一开始,不是把CPU的性能定义得非常清楚了吗?我们说程序的性能,是由三个因素相乘来衡量的,我们还专门说过“指令数 x CPI x 时钟周期”这个公式...转载 2019-07-08 17:33:45 · 1640 阅读 · 0 评论 -
深入计算机组成原理(十六)浮点数和定点数(下):深入理解浮点数到底有什么用?
上一讲,我们讲了用“浮点数”这样的数据形式,来表示一个不能确定大小的数据范围。同时,我们也发现,其实我们平时写的0.1、0.2并不是精确的数值,只是一个近似值。只有0.5这样,可以表示成2的-1次方这种形式的,才是一个精确的浮点数。你是不是感到很疑惑,浮点数的近似值究竟是怎么算出来的?浮点数的加法计算又是怎么回事?在实践应用中,我们怎么才能用好浮点数呢?这一节,我们就一起来看这几个问题。浮点数...转载 2019-06-27 18:33:44 · 2442 阅读 · 3 评论 -
Redis从入门到高可用、分布式实践(一):初识Redis
引入Redis在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,但是一旦遭遇大数据量的需求时,比如一些商品秒杀的情景,或者是主页访问量瞬间较大的时候,单一的使用数据库来保存数据的系统会因为面向磁盘,磁盘读写速度比较慢的问题而存在严重的性能弊端,一瞬间成千上万的请求到来,需要系统在极短的时间内完成成千上万的读写操作,...原创 2019-07-03 14:59:32 · 248 阅读 · 0 评论 -
深入计算机组成原理(十八)建立数据通路(中):指令+运算=CPU
上一讲,我们看到,要能够实现一个完整的CPU功能,除了加法器这样的电路之外,我们还需要实现其他功能的电路。其中有一些电路,和我们实现过的加法器一样,只需要给定输入,就能得到固定的输出。这样的电路,我们称之为组合逻辑电路(Combinational Logic Circuit)。但是,光有组合逻辑电路是不够的。你可以想一下,如果只有组合逻辑电路,我们的CPU会是怎么样的?电路输入是确定的,对应的输...转载 2019-07-03 21:04:16 · 1243 阅读 · 0 评论 -
Spring框架入门学习1.0
Spring框架入门学习1.0spring框架概述Spring的优点Spring体系结构图核心容器(Core Container)数据访问/集成部分(Data Access/Integration)spring框架概述Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE De...原创 2019-02-06 22:10:03 · 342 阅读 · 0 评论