- 博客(159)
- 收藏
- 关注
原创 【IO多路复用】select、epoll
linux文件描述符(file discription)1、文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件或socket2、每一个进程都有自己的文件描述符集合。3、当创建进程时,通常默认会有3个文件描述符(0,1,2),0代表标准输入,1代表标准输出,2代表标准错误,它们统称为标准IO,所以如果进程通过open打开一个文件的时候,文件描述符会从3开始,fd的值其实就是进程中打开文件列表的文件描述符集合的下标索引。4、由于文件描述符在一个进程中是特有的,因此不能在多个进程中间..
2021-11-18 11:42:35 2589
原创 限流器调研
内容来自:单机和分布式场景下,有哪些流控方案?单机限流算法计数器(固定窗口)简介基于一个给定的时间窗口,维护一个计数器用于统计访问次数,然后实现以下规则:如果访问次数小于阈值,则代表允许访问,访问次数 +1。 如果访问次数超出阈值,则限制访问,访问次数不增。 如果超过了时间窗口,计数器清零,并重置清零后的首次成功访问时间为当前时间。这样就确保计数器统计的是最近一个窗口的访问量。代码示例// 毫秒为单位的时间窗口private final long windowInMs;/
2021-11-15 11:33:53 511
原创 IBM/blockchain-application-using-fabric-java-sdk 启动遇到的
首先附上github地址:blockchain-application-using-fabric-java-sdk我安装readme中的步骤来,把区块链网络跑起来之后,创建channel成功了,安装链码也成功了,只是最后在实例化(instantiate)链码的时候一直失败,提示:could not build chaincode: docker build failed: docker image build failed: docker build failed: Error returned
2021-10-10 22:24:55 9008
转载 为什么B+树适合作为索引的结构
前言本文是在讲述什么样的数据结构适合作为索引,以及其适合作为索引的原因。而阅读本文需要对B树和B+树结构有稍微的理解。以及需要对磁盘操作知识有稍微的了解。对于磁盘操作的相关知识,在文章尾部的链接文章中,有详细的介绍。在MySQL中,主要有四种类型的索引,分别为:B-Tree索引,Hash索引,Fulltext索引和R-Tree索引,本文讲的是B-Tree索引。什么是索引索引(Index)是帮助数据库高效获取数据的数据结构。索引是在基于数据库表创建的,它包含一个表中某些列的值以及记录对应的地址
2021-03-06 16:02:23 341 1
原创 动态规划与取余问题——剪绳子
最近刷leetcode刷到一道dp题,如下:剪绳子—1给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m - 1] 。请问 k[0]*k[1]*...*k[m - 1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例2:输入..
2021-01-21 11:10:40 460
原创 二分查找模板总结
思考来源与移到leetcode题目,剑指 Offer 53 - I. 在排序数组中查找数字 I。统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0显然看到排序两个字就是要用二分搜索,思路是查找“最后一个比target小的值的位置”和“第一个比target大的值的位置”,分别记为left和right,那..
2021-01-18 15:58:06 274
原创 LoggerFactory is not a Logback LoggerContext but Logback is on the classpath
报错一眼就能看到:classpath上有多个SLF4J的jar绑定,哪两个jar呢?slf4j-log4j12-1.7.30.jar和logback-classic-1.2.3.jar。SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/H:/apache-maven-3.5.4/Repository/org/slf4j/slf4j-log4j12/1.7.30/......
2021-01-12 19:31:06 39164 4
原创 【多、单】生产者消费者模式——Java
实现代码下面是多生产者多消费者的实现,import java.util.ArrayDeque;import java.util.Deque;/**生产者、消费者。单生产者、消费者,多生产者消费者。要注意以下三点: * 如果队列为空,则消费者阻塞 * 如果队列满了,则生产者阻塞 * 任何时候,只能有一个生产者或者消费者访问队列 * @author zkw * @date 2021/1/4 10:07 */public class ProducerAn
2021-01-04 11:54:49 903
原创 Java中的Arrays.sort(int[])
Arrays.sort(int[])Arrays.sort(int[])使用的是quicksort+merge sort。使用quicksort:当数组长度比较小(right-left<286),或者数组有序的程度不是很高(见下面代码),使用quicksort。 使用mergesort:当数组长度较长且有序程度较高时,使用。static void sort(int[] a, int left, int right, int[] work, int
2020-12-27 17:15:15 1175
原创 fork()和exec函数簇
介绍功能:创建一个新的进程返回:子进程中为0,父进程中为子进程ID,出错为-1。说明:由fok创建的新进程被称为子进程( child process)。 父、子进程完全一样(代码、数据),子进程从fork内部开始执行,fork返回子进程的pid后,接着执行下一条语句该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是子进程的进程|D。 一般来说,在fork之后是父进程先执行还是子进程先执行是不确定的。这取决于内核所使用的调度算法。继承使用fork函
2020-12-26 18:35:50 485
原创 【操作系统】王道视频笔记2
3.1.10 基本分段存储管理进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名(在低级语言中,程序员使用段名来编程),每段从0开始编址。 内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各段之间可以不相邻。分段分段系统的逻辑地址结构由段号(段名)和段内地址(段内偏移量)所组成。段号的位数决定了每个进程最多可以分几个段;段内地址位数决定了每个段的最大长度是多少。在下面例子中,若系统是按字节寻址的,则段号占16位,因此在该系统中,每个进程最多有2^16
2020-12-26 09:18:20 1627
原创 【操作系统】王道视频笔记1
1.1.1 操作系统的概念、功能和目标1.1.2 操作系统的特征1.1.3 操作系统的发展与分类手工操作阶段输入和输出都是一张打了孔的纸袋(有孔是1,无孔是0),速度很慢,而CPU处理速度很快,这就是矛盾的。单道批处理系统计算机处理打孔纸带的速度很慢,所以这里引入了中间介质磁带,计算机读写磁带的速度比读写纸带的速度快很多,这就提高了CPU的利用率。多道批处理系统多道批处理系统及之前的系统都没有人机交互,计算机在执行程序的过程中用户不能进行操作。分时操作
2020-12-24 08:55:48 1203
原创 【计算机组成原理】王道视频笔记1
计算机只能识别0/1,通过低电平和高电平来给计算机传递0/1信号。1.1 计算机的发展为什么程序的错误会被称为bug,因为一开始编程只能写0/1(机器语言),是通过在一张纸代上打孔,有孔就是0,没孔就是1,那时候如果一直虫子出现在纸带上就会导致不能识别0/1,从而程序出错。机器字长:计算机一次计算能处理的字节长度。如16位处理器一次能处理16位(2个字节)的数据。1.2.1计算机硬件组成缺点:以运算器为中心,数据传输和存储都要经过运算器,这降低了运算器计算的效率。总.
2020-12-16 19:12:33 2503 2
原创 【计算机组成原理】王道视频笔记2
5.1 CPU的功能和基本结构CPU的功能右图展示了运算器和控制器的功能。运算器的基本结构CPU内部总线是ALU与寄存器交互的媒介。下图中:暂存寄存器是为了避免在同一时间A和B从CPU总线获取的是相同的数据(同一时间,总线上只能传输A或B的数据),可以用暂存寄存器先存储A的数据,然后在将B的数据传入ALU中。 移位寄存器是用来暂存结果,一段程序可能需要ALU计算多次,所以可以将结果存入移位寄存器,等到完全计算结束,再将结果写入总线。 寄存器in标志:如果是1,表示可以从CPU总线
2020-12-16 19:09:53 1673 1
转载 【转载】浮点数的二进制表示
测试程序前几天,我在读一本C语言教材,有一道例题:#include <stdio.h> void main(void){ int num=9; /* num是整型变量,设为9 */ float* pFloat=# /* pFloat表示num的内存地址,但是设为浮点数 */ printf("num的值为:%d\n",num); /* 显示num的整型值 */ printf("*pFloat的值为:%f\n",*pFloat)
2020-12-05 17:14:38 1136
原创 【官方文档整理】Mysql中的锁
目录共享锁(S)和排它锁(X)意向锁(Intension Locks)记录锁(Record Locks)间隙锁(Gap Locks)next-key锁插入意向锁(Insert Intention Locks)以下内容90%来自mysql 5.7官方文档,有兴趣的可以直接看原文。共享锁(S)和排它锁(X)都属于行锁,当一行数据被添加共享锁时,其它事务只能读取不能修改;当一行数据被添加排它锁时,其它事务的读取和修改操作都被禁止。意向锁(Intension Locks)
2020-11-27 17:09:26 530
转载 【转载】Java中的SPI机制
一、什么是SPISPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。这一机制为很多框架扩展提供了可能,比如在Dubbo、JDBC中都使用到了SPI机制。我们先通过一个很简单的例子来看下它是怎么用的。1、小栗子首先,我们需要定义一个接口,SPIServicepackage com.viewscenes.netsupervisor.spi;
2020-11-21 20:08:44 164
转载 【面试】Tomcat面试题总结
Tomcat是什么?Tomcat 服务器Apache软件基金会项目中的一个核心项目,是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。Tomcat的缺省端口是多少,怎么修改找到Tomcat目录下的conf文件夹 进入conf文件夹里面找到server.xml文件 打开server.xml文件 在server.xml文件里面找到下列信息 把Connector标签的8080端口改成你想要的端
2020-11-21 09:43:51 766
原创 JVM性能监控和故障处理的指令、工具
目录指令jpsjstatjinfojmapjstack可视化故障处理工具jconsoleVisualVM指令jps描述:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID。是最常用的功能之一,因为其它命令需要通过它来查询要监控的虚拟机进程的ID。 命令格式:jps [options] [hostid]主要选项:-q 只输出LVMID 省略主类的名称;-m 输出虚
2020-11-12 11:41:30 274 2
原创 JVM中各内存区域溢出原因及解决办法
Java堆溢出原因:创建的对象的总容量超过了堆的最大容量。 溢出类型:java.lang.OutOfMemoryError。 解决方法:排查是因为内存溢出还是内存泄漏导致的:通过性能监测工具如jconsole,获取堆内存快照,查看导致溢出的对象是不是必要的,不是的话就是泄漏,是的话就是溢出。 内存泄漏:查看导致溢出的对象的GC ROOTS引用链,根据引用链找到具体的内存泄漏的位置,进行修改。 内存溢出:检查JVM的堆参数设置(-Xmx:JVM最大内存与-Xms:启动初始内存),看是否还有向上调
2020-11-09 20:57:16 2355
原创 【操作系统】存储器笔记
目录存储器结构可执行寄存器主存储器寄存器高速缓存磁盘缓存存储器结构对于通用计算机而言,存储层次至少应具有三级:最高层为CPU寄存器,中间为主存,最底层是辅存。这三层还可进一步划分(如下图),其中CPU寄存器和主存属于操作系统的管辖范畴,掉电后它们中存储的信息不再存在;而辅存则属于持久化保存介质,它们存储的信息会被长期保存。可执行寄存器在计算机系统的存储层次中,CPU寄存器和主存又被称为可执行存储器。进程可以在很少的时钟周期内使用一条load或 store指令对可执
2020-11-07 21:26:46 269
原创 【面试】netty面试题总结
什么是Reactor线程模型?一种事件驱动处理模型,类似于多路复用IO模型,包括三种角色:Reactor、Acceptor和Handler。Reactor用来监听事件,包括:连接建立、读就绪、写就绪等。然后针对监听到的不同事件,将它们分发给对应的线程去处理。其中acceptor处理客户端建立的连接,handler对读写事件进行业务处理。Reactor线程模型消息处理的流程?Reactor线程通过多路复用器监控IO事件。 如果是连接建立的事件,则由acceptor线程来接受连接,并创建handl
2020-11-03 10:28:08 7701 2
原创 【源码】netty源码笔记
服务端代码NioEventLoopGroup创建NioEventLoopGroup,会默认创建2*jvm可用cpu个数个NioEventLoop(可以指定)。NioEventLoopGroup的父类MultithreadEventExecutorGroup有一个children属性,是一个EventExecutor[],用来存放指定数量的NioEventLoop.实例化children之后,为每个NioEventLoop的执行结果Future添加监...
2020-11-01 11:55:54 715
原创 【笔记】Dubbo面试题总结
什么是RPC?RPC(Remote Procedure Call)表示远程过程调用,即一台机器通过网络调用另一台机器上的服务。为什么要有RPC?对于采用分布式、微服务架构的系统,各个子系统分布在不同的服务器上,所以各个子系统之间要通过远程调用的方式来访问彼此之间的服务。RPC架构组件有哪些?一个基本的RPC架构里面应该至少包含以下4个组件:客户端(client):服务调用方(消费者) 客户端存根(Client Stub):存放服务器地址信息,将客户端的请求序列化成字节码,再通过网络
2020-10-12 19:58:39 847
原创 maven项目页面的font字体显示不出来
我在spring项目中的页面使用layui的font-icon时发现显示不出来,按F12在console中看到如下信息:网上查询发现答案挺多,说是maven资源加载插件过滤文件时出现了问题,答案基本是下面这种(就是在pom.xml中添加配置信息):<build> <resources> <resource> <directory>src/main/resources</
2020-10-11 11:19:24 835
原创 【笔记】springboot面试题总结
概述什么是 Spring Boot?是spring组件一站式的解决方案,主要简化了使用spring的难度,省去了繁重的配置,开发者能快速上手。Srping和Spring Boot有什么区别?spring:spring是一个设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题。因为spring是非侵入式的,所以spring能与各个层面的框架组件搭配使用,也正因为如此,我们使用spring的时候常常需要编带大量的配置代码,这对不熟悉的开发者来说十分不友好。spring boot:可以看做
2020-10-08 21:10:20 281
原创 【笔记】springmvc面试题总结
简单介绍下你对Spring MVC的理解?Spring MVC的主要组件?DispatcherServlet:前端控制器,就是一个大的servlet,所有用户发过来的请求都会首先经过它。 HandlerMapping:处理器映射器,根据请求的URL来返回handler(里面包含URL对应的Controller对象、方法及参数)。只有一个方法getHandler(),返回一个handler。HandlerAdapter:处理器适配器,用来执行HandlerMapping返回的handler。D
2020-10-08 20:52:30 148
原创 【笔记】mybatis面试题总结
MyBatis是什么?MyBatis是一个半自动的ORM(对象关系映射)持久层框架,支持定制化SQL。为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?之所以说mybatis是半自动的,是因为mybatis需要手动写sql。Hibernate属于全自动的,因为配置java bean和数据表的映射关系后,可以直接使用hql进行数据库操作,不需要编写sql;不过hql并不是万能的,对于某些复杂的查询场景会非常麻烦。传统JDBC开发存在的问题频繁的创建销毁数据库连接对象,容
2020-10-07 21:09:10 283 1
原创 图解单点登录
文章是在阅读这篇博客后进行的总结,主要是自己疑惑的地方:https://www.cnblogs.com/ywlaker/p/6113927.html。背景因为http协议是无状态的,所以每次http请求之间没有任何联系。以登录为例,我第一次登录后,第二次请求岂不是又要登录?正因为如此,现在系统普遍使用cookie和session来保存浏览器的会话状态。cookie:可以将用户登录后的信息保存在浏览器的cookie中,每次用户请求域(产生该条cookie的域及其子域)都会将cookie发送给web
2020-10-04 21:08:27 370
转载 【转载】前后端分离与不分离的区别
前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。 这种应用模式比较适合纯网页应用,但是当后端对接App时,App可能并不需要后端返回一个HTML网页,而仅仅是数据本身,所以后端原本返回网页的接口不再适用于前端App应用,为了对接App后端还需再开发一套接口。请求的数据交互如下图:前后端分离 在前后端分离的应用模式中,后端仅返回前端所需的数据,不再...
2020-09-21 19:59:11 232
原创 【笔记】redis面试题总结
在使用docker安装redis时,不能再redis.conf中将daemonize 属性设置为yes,否则通过指定配置文件的方式启动redis-server会失败,docker容器启动后会立刻退出。
2020-09-21 17:22:03 726
原创 红黑树相关面试题
红黑树和平衡二叉树的区别?红黑树是一个二叉查找树,不像平衡二叉树要求所有节点左右子树高度差不超过1,红黑树只要求从一个节点到叶结点的所有路径中,最长路径不超过最短路径的两倍,所以红黑树只追求树的大致平衡。因为对树平衡程度的不同要求,平衡二叉树在插入和删除的过程中会花费比较大的代价来维护树的平衡,所以平衡二叉树不适合插入、删除太多的场景。而红黑树只要求弱平衡,它做到了当插入和删除时,只需最多旋转3次就能实现一定程度的平衡,所以能将查询、插入和删除的时间复杂度维持在对数级别(O(logn))。对红黑
2020-08-29 19:25:46 2850
原创 【阿里巴巴/腾旭】mysql面试题汇总
看到网上的每个题目的答案都是长篇大论,这里我怎么简单怎么来。索引谈一下索引?索引在数据库中是以文件的形式存在的,通常采用B+树的形式来组织内容,其中叶子结点存储了表中所有数据的引用指针。通过索引能够快速的找到目标叶结点,从而确定要查询的数据。索引有哪些优缺点?优点:能加快查询的效率。每次查询都是B+树从根到叶的一条路径。缺点:索引是以文件形式存在的,需要占用物理空间;同时对表中数据进行修改后,索引也要动态维护,耗费时间和资源。索引的使用场景?where查询当查询的列是
2020-08-28 19:28:15 1839
原创 【思考】依赖注入有几种形式?
转载自:https://www.cnblogs.com/zhuwoyao88/p/6596295.html。在我面试的时候,常会问面试者一个问题,就是依赖注入有几种方式,发现面试者的回答五花八门,有回答两种的,也有回答三种的,四种的。其实正确的答案是两种:构造器注入和setter注入。提到依赖注入,就不能不说装配。有些初学者总是会把这两个概念搞混,这个博文就是来跟大家讨论这两个概念以及其中详细的原理。依赖注入的本质就是装配,装配是依赖注入的具体行为(这就好比你接你女朋友回家,用自行车或者电动车都可以
2020-08-26 10:25:29 1229
原创 自己总结的一些spring面试题
文章转载自:https://thinkwon.blog.csdn.net/article/details/104397516。由于有一些题目的答案我觉得不太满意或存在争议,因此转载过来进行重写。Spring概述(10)什么是spring?Spring是一个轻量级Java开发框架,最早由Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础
2020-08-21 20:16:56 257
转载 【转载】有状态的bean和无状态的bean的区别
有状态对象(Stateful Bean) :就是有实例变量的对象,可以保存数据,是非线程安全的。每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。无状态对象(Stateless Bean):就是没有实例变量的对象,不能保存数据,是不变类,是线程安全的。bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能.
2020-07-11 21:53:23 1086
转载 Java 泛型小结
目录泛型的定义泛型分类限定泛型类型变量泛型的意义泛型的原理泛型中的约束和局限性泛型的定义泛型,即“参数化类型”。就是将程序需要的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。一些常用的泛型类型变量:E:元素(Element),多用于java集合框架K:关键字(Key)N:数字(Number)T:类型(Type)V:值(Value)泛型分类泛型分为“泛型类”、“泛型接口
2020-07-07 16:54:12 173
转载 Java中的异常(checked异常和unchecked异常)
Java的异常层次结构要想明白Java中checked Exception和unchecked Exception的区别,我们首先来看一下Java的异常层次结构。 这是一个简化的Java异常层次结构示意图,需要注意的是所有的类都是从Throwable继承而来,下一层则分为两个结构,Error和Exception。其中Error类层次描述了Java运行时系统的内部错误和资源耗尽错误,这种错误除了简单的报告给用户,并尽力阻止程序安全终止之外,一般也米有别的解决办法了。最常用的五种Runti...
2020-07-05 21:18:27 4623
原创 单例模式三种实现
单例模式的三种实现方式,分别是:饿汉式、懒汉式和静态内部类实现。饿汉式即在一开始就将单例对象初始化,这样后面用户调用获取对象的方法时直接返回创建好的对象引用就行。优点是当用户第一次获取单例对象时可以节省时间,缺点是若单例对象创建后迟迟不被获取就会占用内存空间。/** 饿汉式 * @author zkw * @date 2020/7/5 8:30 */public class Singleton1 { // 不注释的话可以通过反射获取和修改obj属性 private
2020-07-05 10:37:37 1049
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人