奋进的小白粥

霜花剑上雕镂一缕孤韧 踏遍千山涤荡妖魁魔魂
私信 关注
静看星辰变
码龄5年

我要成为像凯撒一样的男人

  • 86,053
    被访问量
  • 124
    原创文章
  • 51,772
    作者排名
  • 51
    粉丝数量
  • 于 2016-02-21 加入CSDN
获得成就
  • 获得56次点赞
  • 内容获得28次评论
  • 获得159次收藏
荣誉勋章
兴趣领域
  • #后端
    #Java
TA的专栏
  • java基础
    28篇
  • 面试
    10篇
  • redis
    1篇
  • 计算机网络
    2篇
  • JVM
    9篇
  • leetcode
    4篇
  • Spring
    6篇
  • 架构
    4篇
  • 操作系统
    8篇
  • linux
    8篇
  • 计算机组成原理
    4篇
  • netty
    2篇
  • 开发工具
    2篇
  • dubbo
    1篇
  • mybatis
    2篇
  • 机器学习
    1篇
  • 大数据
    1篇
  • freemarker
    1篇
  • git
    1篇
  • Jmeter
    1篇
  • 数据结构与算法
    10篇
  • mysql
    4篇
  • 学习总结
    4篇
  • java多线程
    42篇
  • 前端
    12篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

为什么B+树适合作为索引的结构

前言本文是在讲述什么样的数据结构适合作为索引,以及其适合作为索引的原因。而阅读本文需要对B树和B+树结构有稍微的理解。以及需要对磁盘操作知识有稍微的了解。对于磁盘操作的相关知识,在文章尾部的链接文章中,有详细的介绍。在MySQL中,主要有四种类型的索引,分别为:B-Tree索引,Hash索引,Fulltext索引和R-Tree索引,本文讲的是B-Tree索引。什么是索引索引(Index)是帮助数据库高效获取数据的数据结构。索引是在基于数据库表创建的,它包含一个表中某些列的值以及记录对应的地址
转载
6阅读
0评论
0点赞
发布博客于 23 小时前

动态规划与取余问题——剪绳子

最近刷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:输入..
原创
16阅读
0评论
0点赞
发布博客于 2 月前

二分查找模板总结

思考来源与移到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,那..
原创
15阅读
0评论
0点赞
发布博客于 2 月前

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/...
原创
41阅读
0评论
0点赞
发布博客于 2 月前

【多、单】生产者消费者模式——Java

实现代码下面是多生产者多消费者的实现,import java.util.ArrayDeque;import java.util.Deque;/**生产者、消费者。单生产者、消费者,多生产者消费者。要注意以下三点: * 如果队列为空,则消费者阻塞 * 如果队列满了,则生产者阻塞 * 任何时候,只能有一个生产者或者消费者访问队列 * @author zkw * @date 2021/1/4 10:07 */public class ProducerAn
原创
21阅读
0评论
0点赞
发布博客于 2 月前

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
原创
40阅读
0评论
0点赞
发布博客于 2 月前

fork()和exec函数簇

介绍功能:创建一个新的进程返回:子进程中为0,父进程中为子进程ID,出错为-1。说明:由fok创建的新进程被称为子进程( child process)。 父、子进程完全一样(代码、数据),子进程从fork内部开始执行,fork返回子进程的pid后,接着执行下一条语句该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是子进程的进程|D。 一般来说,在fork之后是父进程先执行还是子进程先执行是不确定的。这取决于内核所使用的调度算法。继承使用fork函
原创
29阅读
0评论
0点赞
发布博客于 2 月前

【操作系统】王道视频笔记2

3.1.10 基本分段存储管理进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名(在低级语言中,程序员使用段名来编程),每段从0开始编址。 内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各段之间可以不相邻。分段分段系统的逻辑地址结构由段号(段名)和段内地址(段内偏移量)所组成。段号的位数决定了每个进程最多可以分几个段;段内地址位数决定了每个段的最大长度是多少。在下面例子中,若系统是按字节寻址的,则段号占16位,因此在该系统中,每个进程最多有2^16
原创
548阅读
0评论
0点赞
发布博客于 2 月前

【操作系统】王道视频笔记1

1.1.1 操作系统的概念、功能和目标1.1.2 操作系统的特征1.1.3 操作系统的发展与分类手工操作阶段输入和输出都是一张打了孔的纸袋(有孔是1,无孔是0),速度很慢,而CPU处理速度很快,这就是矛盾的。单道批处理系统计算机处理打孔纸带的速度很慢,所以这里引入了中间介质磁带,计算机读写磁带的速度比读写纸带的速度快很多,这就提高了CPU的利用率。多道批处理系统多道批处理系统及之前的系统都没有人机交互,计算机在执行程序的过程中用户不能进行操作。分时操作
原创
161阅读
0评论
0点赞
发布博客于 2 月前

【计算机组成原理】王道视频笔记1

计算机只能识别0/1,通过低电平和高电平来给计算机传递0/1信号。1.1 计算机的发展为什么程序的错误会被称为bug,因为一开始编程只能写0/1(机器语言),是通过在一张纸代上打孔,有孔就是0,没孔就是1,那时候如果一直虫子出现在纸带上就会导致不能识别0/1,从而程序出错。机器字长:计算机一次计算能处理的字节长度。如16位处理器一次能处理16位(2个字节)的数据。1.2.1计算机硬件组成缺点:以运算器为中心,数据传输和存储都要经过运算器,这降低了运算器计算的效率。总.
原创
330阅读
0评论
2点赞
发布博客于 2 月前

【计算机组成原理】王道视频笔记2

5.1 CPU的功能和基本结构CPU的功能右图展示了运算器和控制器的功能。运算器的基本结构CPU内部总线是ALU与寄存器交互的媒介。下图中:暂存寄存器是为了避免在同一时间A和B从CPU总线获取的是相同的数据(同一时间,总线上只能传输A或B的数据),可以用暂存寄存器先存储A的数据,然后在将B的数据传入ALU中。 移位寄存器是用来暂存结果,一段程序可能需要ALU计算多次,所以可以将结果存入移位寄存器,等到完全计算结束,再将结果写入总线。 寄存器in标志:如果是1,表示可以从CPU总线
原创
118阅读
0评论
0点赞
发布博客于 2 月前

【转载】浮点数的二进制表示

测试程序前几天,我在读一本C语言教材,有一道例题:#include <stdio.h>  void main(void){    int num=9; /* num是整型变量,设为9 */    float* pFloat=&num; /* pFloat表示num的内存地址,但是设为浮点数 */    printf("num的值为:%d
",num); /* 显示num的整型值 */    printf("*pFloat的值为:%f
",*pFloat)
转载
50阅读
0评论
0点赞
发布博客于 3 月前

【官方文档整理】Mysql中的锁

目录共享锁(S)和排它锁(X)意向锁(Intension Locks)记录锁(Record Locks)间隙锁(Gap Locks)next-key锁插入意向锁(Insert Intention Locks)以下内容90%来自mysql 5.7官方文档,有兴趣的可以直接看原文。共享锁(S)和排它锁(X)都属于行锁,当一行数据被添加共享锁时,其它事务只能读取不能修改;当一行数据被添加排它锁时,其它事务的读取和修改操作都被禁止。意向锁(Intension Locks)
原创
22阅读
0评论
0点赞
发布博客于 3 月前

【转载】Java中的SPI机制

一、什么是SPISPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。这一机制为很多框架扩展提供了可能,比如在Dubbo、JDBC中都使用到了SPI机制。我们先通过一个很简单的例子来看下它是怎么用的。1、小栗子首先,我们需要定义一个接口,SPIServicepackage com.viewscenes.netsupervisor.spi;
转载
15阅读
0评论
0点赞
发布博客于 3 月前

【面试】Tomcat面试题总结

Tomcat是什么?Tomcat 服务器Apache软件基金会项目中的一个核心项目,是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。Tomcat的缺省端口是多少,怎么修改找到Tomcat目录下的conf文件夹 进入conf文件夹里面找到server.xml文件 打开server.xml文件 在server.xml文件里面找到下列信息 把Connector标签的8080端口改成你想要的端
转载
73阅读
0评论
0点赞
发布博客于 3 月前

JVM性能监控和故障处理的指令、工具

目录指令jpsjstatjinfojmapjstack可视化故障处理工具jconsoleVisualVM指令jps描述:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID。是最常用的功能之一,因为其它命令需要通过它来查询要监控的虚拟机进程的ID。 命令格式:jps [options] [hostid]主要选项:-q 只输出LVMID 省略主类的名称;-m 输出虚
原创
117阅读
2评论
0点赞
发布博客于 3 月前

JVM中各内存区域溢出原因及解决办法

Java堆溢出原因:创建的对象的总容量超过了堆的最大容量。 溢出类型:java.lang.OutOfMemoryError。 解决方法:排查是因为内存溢出还是内存泄漏导致的:通过性能监测工具如jconsole,获取堆内存快照,查看导致溢出的对象是不是必要的,不是的话就是泄漏,是的话就是溢出。 内存泄漏:查看导致溢出的对象的GC ROOTS引用链,根据引用链找到具体的内存泄漏的位置,进行修改。 内存溢出:检查JVM的堆参数设置(-Xmx:JVM最大内存与-Xms:启动初始内存),看是否还有向上调
原创
64阅读
0评论
0点赞
发布博客于 3 月前

【操作系统】存储器笔记

目录存储器结构可执行寄存器主存储器寄存器高速缓存磁盘缓存存储器结构对于通用计算机而言,存储层次至少应具有三级:最高层为CPU寄存器,中间为主存,最底层是辅存。这三层还可进一步划分(如下图),其中CPU寄存器和主存属于操作系统的管辖范畴,掉电后它们中存储的信息不再存在;而辅存则属于持久化保存介质,它们存储的信息会被长期保存。可执行寄存器在计算机系统的存储层次中,CPU寄存器和主存又被称为可执行存储器。进程可以在很少的时钟周期内使用一条load或 store指令对可执
原创
34阅读
0评论
0点赞
发布博客于 3 月前

【面试】netty面试题总结

什么是Reactor线程模型?一种事件驱动处理模型,类似于多路复用IO模型,包括三种角色:Reactor、Acceptor和Handler。Reactor用来监听事件,包括:连接建立、读就绪、写就绪等。然后针对监听到的不同事件,将它们分发给对应的线程去处理。其中acceptor处理客户端建立的连接,handler对读写事件进行业务处理。Reactor线程模型消息处理的流程?Reactor线程通过多路复用器监控IO事件。 如果是连接建立的事件,则由acceptor线程来接受连接,并创建handl
原创
122阅读
0评论
0点赞
发布博客于 4 月前

【源码】netty源码笔记

服务端代码NioEventLoopGroup创建NioEventLoopGroup,会默认创建2*jvm可用cpu个数个NioEventLoop(可以指定)。NioEventLoopGroup的父类MultithreadEventExecutorGroup有一个children属性,是一个EventExecutor[],用来存放指定数量的NioEventLoop.实例化children之后,为每个NioEventLoop的执行结果Future添加监...
原创
33阅读
0评论
0点赞
发布博客于 4 月前

【笔记】计算机网络面试题总结

T
原创
125阅读
0评论
0点赞
发布博客于 4 月前

【笔记】Dubbo面试题总结

什么是RPC?RPC(Remote Procedure Call)表示远程过程调用,即一台机器通过网络调用另一台机器上的服务。为什么要有RPC?对于采用分布式、微服务架构的系统,各个子系统分布在不同的服务器上,所以各个子系统之间要通过远程调用的方式来访问彼此之间的服务。RPC架构组件有哪些?一个基本的RPC架构里面应该至少包含以下4个组件:客户端(client):服务调用方(消费者) 客户端存根(Client Stub):存放服务器地址信息,将客户端的请求序列化成字节码,再通过网络
原创
316阅读
0评论
0点赞
发布博客于 4 月前

maven项目页面的font字体显示不出来

我在spring项目中的页面使用layui的font-icon时发现显示不出来,按F12在console中看到如下信息:网上查询发现答案挺多,说是maven资源加载插件过滤文件时出现了问题,答案基本是下面这种(就是在pom.xml中添加配置信息):<build> <resources> <resource> <directory>src/main/resources</
原创
132阅读
0评论
1点赞
发布博客于 4 月前

【笔记】springboot面试题总结

概述什么是 Spring Boot?是spring组件一站式的解决方案,主要简化了使用spring的难度,省去了繁重的配置,开发者能快速上手。Srping和Spring Boot有什么区别?spring:spring是一个设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题。因为spring是非侵入式的,所以spring能与各个层面的框架组件搭配使用,也正因为如此,我们使用spring的时候常常需要编带大量的配置代码,这对不熟悉的开发者来说十分不友好。spring boot:可以看做
原创
65阅读
0评论
0点赞
发布博客于 4 月前

【笔记】springmvc面试题总结

简单介绍下你对Spring MVC的理解?Spring MVC的主要组件?DispatcherServlet:前端控制器,就是一个大的servlet,所有用户发过来的请求都会首先经过它。 HandlerMapping:处理器映射器,根据请求的URL来返回handler(里面包含URL对应的Controller对象、方法及参数)。只有一个方法getHandler(),返回一个handler。HandlerAdapter:处理器适配器,用来执行HandlerMapping返回的handler。D
原创
31阅读
0评论
0点赞
发布博客于 4 月前

【笔记】mybatis面试题总结

MyBatis是什么?MyBatis是一个半自动的ORM(对象关系映射)持久层框架,支持定制化SQL。为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?之所以说mybatis是半自动的,是因为mybatis需要手动写sql。Hibernate属于全自动的,因为配置java bean和数据表的映射关系后,可以直接使用hql进行数据库操作,不需要编写sql;不过hql并不是万能的,对于某些复杂的查询场景会非常麻烦。传统JDBC开发存在的问题频繁的创建销毁数据库连接对象,容
原创
86阅读
1评论
0点赞
发布博客于 5 月前

图解单点登录

文章是在阅读这篇博客后进行的总结,主要是自己疑惑的地方:https://www.cnblogs.com/ywlaker/p/6113927.html。背景因为http协议是无状态的,所以每次http请求之间没有任何联系。以登录为例,我第一次登录后,第二次请求岂不是又要登录?正因为如此,现在系统普遍使用cookie和session来保存浏览器的会话状态。cookie:可以将用户登录后的信息保存在浏览器的cookie中,每次用户请求域(产生该条cookie的域及其子域)都会将cookie发送给web
原创
71阅读
0评论
0点赞
发布博客于 5 月前

【转载】前后端分离与不分离的区别

前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。 这种应用模式比较适合纯网页应用,但是当后端对接App时,App可能并不需要后端返回一个HTML网页,而仅仅是数据本身,所以后端原本返回网页的接口不再适用于前端App应用,为了对接App后端还需再开发一套接口。请求的数据交互如下图:前后端分离 在前后端分离的应用模式中,后端仅返回前端所需的数据,不再...
转载
34阅读
0评论
0点赞
发布博客于 5 月前

【笔记】redis面试题总结

在使用docker安装redis时,不能再redis.conf中将daemonize 属性设置为yes,否则通过指定配置文件的方式启动redis-server会失败,docker容器启动后会立刻退出。
原创
181阅读
0评论
0点赞
发布博客于 5 月前

红黑树相关面试题

红黑树和平衡二叉树的区别?红黑树是一个二叉查找树,不像平衡二叉树要求所有节点左右子树高度差不超过1,红黑树只要求从一个节点到叶结点的所有路径中,最长路径不超过最短路径的两倍,所以红黑树只追求树的大致平衡。因为对树平衡程度的不同要求,平衡二叉树在插入和删除的过程中会花费比较大的代价来维护树的平衡,所以平衡二叉树不适合插入、删除太多的场景。而红黑树只要求弱平衡,它做到了当插入和删除时,只需最多旋转3次就能实现一定程度的平衡,所以能将查询、插入和删除的时间复杂度维持在对数级别(O(logn))。对红黑
原创
323阅读
0评论
0点赞
发布博客于 6 月前

【阿里巴巴/腾旭】mysql面试题汇总

看到网上的每个题目的答案都是长篇大论,这里我怎么简单怎么来。索引谈一下索引?索引在数据库中是以文件的形式存在的,通常采用B+树的形式来组织内容,其中叶子结点存储了表中所有数据的引用指针。通过索引能够快速的找到目标叶结点,从而确定要查询的数据。索引有哪些优缺点?优点:能加快查询的效率。每次查询都是B+树从根到叶的一条路径。缺点:索引是以文件形式存在的,需要占用物理空间;同时对表中数据进行修改后,索引也要动态维护,耗费时间和资源。索引的使用场景?where查询当查询的列是
原创
193阅读
0评论
1点赞
发布博客于 6 月前

【思考】依赖注入有几种形式?

转载自:https://www.cnblogs.com/zhuwoyao88/p/6596295.html。在我面试的时候,常会问面试者一个问题,就是依赖注入有几种方式,发现面试者的回答五花八门,有回答两种的,也有回答三种的,四种的。其实正确的答案是两种:构造器注入和setter注入。提到依赖注入,就不能不说装配。有些初学者总是会把这两个概念搞混,这个博文就是来跟大家讨论这两个概念以及其中详细的原理。依赖注入的本质就是装配,装配是依赖注入的具体行为(这就好比你接你女朋友回家,用自行车或者电动车都可以
原创
186阅读
0评论
0点赞
发布博客于 6 月前

自己总结的一些spring面试题

文章转载自:https://thinkwon.blog.csdn.net/article/details/104397516。由于有一些题目的答案我觉得不太满意或存在争议,因此转载过来进行重写。Spring概述(10)什么是spring?Spring是一个轻量级Java开发框架,最早由Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础
原创
107阅读
0评论
0点赞
发布博客于 6 月前

【转载】有状态的bean和无状态的bean的区别

有状态对象(Stateful Bean) :就是有实例变量的对象,可以保存数据,是非线程安全的。每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。无状态对象(Stateless Bean):就是没有实例变量的对象,不能保存数据,是不变类,是线程安全的。bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能.
转载
69阅读
0评论
0点赞
发布博客于 7 月前

Java 泛型小结

目录泛型的定义泛型分类限定泛型类型变量泛型的意义泛型的原理泛型中的约束和局限性泛型的定义泛型,即“参数化类型”。就是将程序需要的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。一些常用的泛型类型变量:E:元素(Element),多用于java集合框架K:关键字(Key)N:数字(Number)T:类型(Type)V:值(Value)泛型分类泛型分为“泛型类”、“泛型接口
转载
54阅读
0评论
0点赞
发布博客于 8 月前

Java中的异常(checked异常和unchecked异常)

Java的异常层次结构要想明白Java中checked Exception和unchecked Exception的区别,我们首先来看一下Java的异常层次结构。  这是一个简化的Java异常层次结构示意图,需要注意的是所有的类都是从Throwable继承而来,下一层则分为两个结构,Error和Exception。其中Error类层次描述了Java运行时系统的内部错误和资源耗尽错误,这种错误除了简单的报告给用户,并尽力阻止程序安全终止之外,一般也米有别的解决办法了。最常用的五种Runti...
转载
259阅读
0评论
1点赞
发布博客于 8 月前

单例模式三种实现

单例模式的三种实现方式,分别是:饿汉式、懒汉式和静态内部类实现。饿汉式即在一开始就将单例对象初始化,这样后面用户调用获取对象的方法时直接返回创建好的对象引用就行。优点是当用户第一次获取单例对象时可以节省时间,缺点是若单例对象创建后迟迟不被获取就会占用内存空间。/** 饿汉式 * @author zkw * @date 2020/7/5 8:30 */public class Singleton1 { // 不注释的话可以通过反射获取和修改obj属性 private
原创
76阅读
0评论
0点赞
发布博客于 8 月前

【linux】Linux下vi命令大全(文件修改)

1.文件操作vi FileName打开文件FileName,并将光标置于第一行首。vi +n FileName打开文件FileName,并将光标置于第n行首。vi + FileName打开文件FileName,并将光标置于最后一行。vi + /pattern File打开文件File,并将光标置于其中第一个于pattern匹配的字符串处。vi–r FileName在上次正用vi编辑FileName发生系统崩溃后,恢复FileName。2....
转载
86阅读
0评论
0点赞
发布博客于 9 月前

Bootstrap(自助法),Bagging,Boosting(提升)

前言最近在理清一些很必要的也很基础的东西,记录一下,结合网上和文献,自己也有些易化使之更轻松理解,如有错误,请不吝赐教,多谢!Bootstrap(自助法)Bootstrap是一种抽样方法核心思想这里写图片描述子样本之于样本,可以类比样本之于总体栗子:我要统计鱼塘里面的鱼的条数,怎么统计呢?假设鱼塘总共有鱼1000条,我是开了上帝视角的,但是你是不知道里面有多少。步骤:1. 承包鱼塘,不让别人捞鱼(规定总体分布不变)。2. 自己捞鱼,捞100条,都打上标签(构造
转载
188阅读
0评论
0点赞
发布博客于 9 月前

【Java基础】代理模式、静态代理、动态代理、JDK与CGLIB代理区别、在spring AOP中的应用

。。。
原创
73阅读
0评论
0点赞
发布博客于 10 月前

instanceof关键字(Java SE8官方文档)

Java SE8语言规范的介绍根据《Java语言规范 基于Java SE8中文》一书,instanceof是一个类型比较操作符,表达式为: 关系表达式(RelationalExpression) instanceof 可具化的引用类型(Reifiable ReferenceType)其中左边的关系表达式为null或引用类型,右边的可...
原创
90阅读
0评论
0点赞
发布博客于 10 月前

Java反射的原理及反射创建类实例的三种方式

目录什么是反射反射原理应用场景基本用法反射机制的相关类Class类Field类Method类Constructor类示例什么是反射JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。反射原理...
转载
3100阅读
0评论
1点赞
发布博客于 10 月前

【Java NIO】网络IO模型与Java中的NIO之间的联系

线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道(channel)。NIO执行通道的read方法不用阻塞,所以可以用此方法去检测通道中是否有另一端写入的数据而不会阻塞(应该是select实现的),这样就可以做到通道里面有数据才去读,节约了轮询检测等待IO操作的时间,selector可以去执行那些已就绪通道的IO操作。不像普通IO一旦执行r...
原创
135阅读
0评论
0点赞
发布博客于 10 月前

5种网络IO模型:阻塞IO、非阻塞IO、异步IO、多路复用IO、信号驱动IO

同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不...
转载
76阅读
0评论
0点赞
发布博客于 10 月前

【Java多线程】Java8 ConcurrentHashMap

Java7 中实现的 ConcurrentHashMap 说实话还是比较复杂的,Java8 对 ConcurrentHashMap 进行了比较大的改动。建议读者可以参考 Java8 中 HashMap 相对于 Java7 HashMap 的改动,对于 ConcurrentHashMap,Java8 也引入了红黑树。说实话,Java8 ConcurrentHashMap 源码真心不简单,最难的在...
转载
66阅读
0评论
0点赞
发布博客于 10 月前

如何理解Java的一次编译,到处运行?

代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。——《深入理解Java虚拟机》程序语言分为机器语言、汇编语言和高级语言,历史的发展演变也是从机器语言到高级语言的过程。现在几乎没有程序员的工作是编写机器语言,都是使用高级语言如C、Java来编程。计算机只能识别和执行仅含0和1的机器语言,所以我们使用高级语言编写的程序必须经过编译器变成机器语言才能被处...
原创
365阅读
0评论
0点赞
发布博客于 11 月前

【定时任务】时间轮算法

1 从定时任务说起自然界中定时任务无处不在,太阳每天东升西落,候鸟的迁徙,树木的年轮,人们每天按时上班,每个月按时发工资、交房租,四季轮换,潮涨潮落,等等,从某种意义上说,都可以认为是定时任务。大概很少有人想过,这些“定时”是怎样做到的。当然,计算机领域的同学们可能对此比较熟悉,毕竟工作中的定时任务也是无处不在的:每天凌晨更新一波数据库,每天9点发一波邮件,每隔10秒钟抢一次火车票。。。至...
转载
711阅读
0评论
1点赞
发布博客于 11 月前

【JUC阻塞队列】ConcurrentLinkedQueue

目录1 前言2 队列结构3 入队——offer()方法3.1 入队过程3.2 offer()源码3.3 tail并非一直指向尾结点的意图4 出队——poll()方法4.1 出队过程4.2 poll()源码5 其它方法5.1 size()1 前言本人jdk版本1.8。在并发编程中,有时候需要使用线程安全的队列。如果要实现一个线程安全的队列有两种方式...
原创
42阅读
0评论
0点赞
发布博客于 11 月前

【操作系统】死锁的原因、必要条件、检测、预防、解除

1 前言所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进,同时它们所占用的cpu、内存等资源也得不到释放。2 死锁产生的原因2.1 竞争资源引起进程死锁非剥夺性资源,当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,如磁带机、打印机...
原创
1301阅读
0评论
0点赞
发布博客于 11 月前

【Java多线程】银行家算法

目录银行家算法中的数据结构算法过程安全性算法以下内容摘自:汤子瀛的《计算机操作系统》第三版。最有代表性的避免死锁的算法,是 Dijkstra 的银行家算法。为实现银行家算法,系统中必须设置若干数据结构。银行家算法中的数据结构(1) 可利用资源向量 Available。这是一个含有 m 个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置...
原创
173阅读
0评论
0点赞
发布博客于 11 月前

【论文】如何写文献综述

文献综述具体写作方法✍1.首先根据你的论文主题想出5个关键词,依次输入谷歌学术搜索引擎(或者其他学校资源论文库) 。2.在电脑里准备两个参考文献文件夹 ,一个文件名写useful (有用), 另一个文件名写maybe useful (可能有用)。3.接下来浏览搜索到的文献的标题,看到和自己研究方向相关的题目就点进去,一目十行扫视文献,其中最主要看Abstract,Introductio...
转载
245阅读
0评论
0点赞
发布博客于 1 年前

大数据和机器学习有什么区别

目录大数据的定义机器学习的定义机器学习的范围模式识别数据挖掘统计学习计算机视觉语音识别自然语言处理机器学习的方法大数据的定义大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 大数据是一个笼统的概念暂未发现和...
转载
86阅读
0评论
0点赞
发布博客于 1 年前

【JUC阻塞队列】ArrayBlockingQueue和LinkedBlockingQueue

目录Java中的阻塞队列1ArrayBlockingQueue1.1 成员变量1.2 构造方法1.3 put方法1.4 take方法2LinkedBlockingQueue2.1 成员变量2.2 构造方法2.3 put方法2.4 take方法3ArrayBlockingQueue和LinkedBlockingQueue的区别Java中的阻塞...
原创
66阅读
0评论
0点赞
发布博客于 1 年前

【Java多线程】wait()和join()被中断的过程

开启两个线程,一个线程等待,另一个线程获取锁后打印信息,打印期间对等待线程进行中断,通过打印的控制台信息来查看中断过程。public class Test3 { static Object lock = new Object(); // 同步锁和等待锁 public static void main(String[] args) throws Interrupte...
原创
362阅读
0评论
0点赞
发布博客于 1 年前

【Java多线程】原子操作实现之CAS

目录1 前言2 CAS机制3 CAS实现原子操作的弊端3.1ABA问题3.2 循环时间长开销大3.3 只能保证一个共享变量的原子操作1 前言Java中除了使用锁来实现原子操作外,还大量的使用了CAS机制来实现对共享资源的原子操作。从JDK1.5版本开始,JDK的并发包中提供了以Atomic开头的类,来支持原子操作,比如AtomicBoolean,AtomicInt...
原创
58阅读
0评论
0点赞
发布博客于 1 年前

【Java多线程实战设计】如何实现一个并发安全的链表

1 思路对于链表这类的数据结构,无非就涉及到增删改查四种基本操作,我们只要保证在对链表进行增删改查时是线程安全的即可。在绝大多数情况下,读的操作多于增删改的操作,所以可以考虑使用JUC包下的读写锁类ReentrantReadWriteLock,当进行读操作时获取读锁,进行增删改操作时获取写锁。这样可以保证多个线程可以同时读取链表中的数据,某个时刻只有一个线程能对链表进行增删改。Reentran...
原创
536阅读
1评论
0点赞
发布博客于 1 年前

【JVM】Java 关于强引用,软引用,弱引用和虚引用的区别与用法

目录一、引用的概念二、引用到底有什么作用三、弱引用的 GC 实战四、再理解 ThreadLocalMap 的弱引用五、ReferenceQueue 引用队列六、应用场景总结内容来自:https://blog.csdn.net/junjunba2689/article/details/80601729 https://blog....
转载
142阅读
0评论
0点赞
发布博客于 1 年前

【开发工具】Idea配置在控制台打印Java类的字节码信息

首先在Settings中进行External Tools工具的配置。配置完后只需在要编译的Java文件中右键,选择配置好的工具。结果如下:
原创
704阅读
0评论
0点赞
发布博客于 1 年前

【Java多线程实战设计】用三个线程按顺序循环打印abc三个字母,比如abcabcabc

目录1 思路2 synchronized/wait/notifyAll 机制3 ReentrantLock/Condition.await()/Condition.signalAll() 机制1 思路启动三个线程,采用多线程间等待/通知的机制来设计。维护一个全局不变数组printArr和变量索引index,printArr[index]就是接下来的线程要打印的字符。三个线程一开...
原创
190阅读
0评论
0点赞
发布博客于 1 年前

【Java并发工具】Semaphore

目录1 前言2 应用场景3 其它方法4 实现原理4.1 实现的同步器4.2 执行过程1 前言本人使用jdk8版本。Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。举个例子,比如××马路要限制流量,只允许同时有一百辆车在这条路上行使,其他的都必须在路口等待,所以前一百辆车会看到绿灯,可以开进这条马...
原创
51阅读
0评论
0点赞
发布博客于 1 年前

【Java并发工具】CyclicBarrier

目录1 前言2 示例3 实现原理3.1 成员变量3.2 构造方法3.3 await方法3.4 reset方法4CyclicBarrier和CountDownLatch的区别1 前言本人使用jdk8版本。CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻...
原创
49阅读
0评论
0点赞
发布博客于 1 年前

【Java并发工具】CountDownLatch

1 前言本人使用jdk8版本。CountDownLatch允许一个或多个线程等待其他线程完成操作,作用与Thread.join()相似,join可以参考:Thread.join()原理。2 功能介绍在JDK 1.5之后的并发包中提供的CountDownLatch也可以实现join的功能,并且比join的功能更多,示例如下:public class CountDown...
原创
37阅读
0评论
0点赞
发布博客于 1 年前

【操作系统】进程和线程调度

进程调度进程调度的对象是进程或内核级线程,是最基本的一种调度。用于决定就绪队列中的哪个进程(或内核级线程,为叙述方便,以后只写进程)应获得处理机,然后再由分派程序执行把处理机分配给该进程的具体操作。1 主要功能和过程保存处理机的现场信息。在进程调度进行调度时,首先需要保存当前进程的处理机的现场信息,如程序计数器、多个通用寄存器中的内容等,将它们送入该进程的进程控制块(PCB)中的相应单...
原创
685阅读
0评论
1点赞
发布博客于 1 年前

【Java多线程】操作系统与Java中线程的生命周期

1 操作系统中的线程状态创建:线程从创建到被cpu执行之前的这个阶段。 就绪:指线程已具备各种执行条件,一旦获取cpu便可执行。 运行:表示线程正获得cpu在运行。 阻塞:指线程在执行中因某件事而受阻,处于暂停执行的状态,阻塞的线程不会去竞争cpu。 终止:线程执行完毕,接下来会释放线程占用的资源。线程的生命周期图如下(进程与线程生命周期一样):2 Java中线程的状态T...
原创
109阅读
0评论
0点赞
发布博客于 1 年前

【Java多线程】Thread.join()原理

1 前言如果一个线程A执行了Thread.join()方法,含义是,当前线程A等待Thread线程终止之后才从Thread.join()返回。线程Thread除了Thread.join(),还有Thread.join(long millis)和Thread.join(long millis, int nanos)两个具备超时特性的方法。表示如果线程thrad在给定时间内没有终止,那么将会从超时...
原创
56阅读
0评论
0点赞
发布博客于 1 年前

Atomic原子类及原理

一、引入 原子是世界上的最小单位,具有不可分割性。比如 a=0;(a非long和double类型) 这个操作是不可分割的,那么我们说这个操作是原子操作。再比如:a++;这个操作实际是a = a + 1;是可分割的,所以他不是一个原子操作。非原子操作都会存在线程安全问题,需要我们使用同步技术(sychronized)来让它变成一个原子操作。 但是,像i++这种非原子操...
原创
629阅读
0评论
1点赞
发布博客于 1 年前

Java中的Unsafe

Java和C++语言的一个重要区别就是Java中我们无法直接操作一块内存区域,不能像C++中那样可以自己申请内存和释放内存。Java中的Unsafe类为我们提供了类似C++手动管理内存的能力。Unsafe类,全限定名是sun.misc.Unsafe,从名字中我们可以看出来这个类对普通程序员来说是“危险”的,一般应用开发者不会用到这个类。Unsafe类是"final"的,不允许继承。且构造函数...
转载
61阅读
0评论
0点赞
发布博客于 1 年前

【Executor框架】FutureTask——jdk1.8

目录1 前言2 在Executor框架中的使用3FutureTask原理3.1 运行状态3.2 等待队列4 get方法(未完成则线程阻塞)5 run方法(完成则唤醒阻塞线程去获取结果)1 前言本人jdk版本8Future接口和实现Future接口的FutureTask类,代表异步计算的结果。FutureTask除了实现Future接口外,还实现了Runna...
原创
26阅读
0评论
0点赞
发布博客于 1 年前

【Executor框架】ScheduledThreadPoolExecutor详解——基于jdk1.8

1 前言本人使用的jdk版本为8。
原创
74阅读
0评论
0点赞
发布博客于 1 年前

【Java并发锁】Condition接口——等待/通知工具

目录1 Object监视器方法与Condition接口比较2 Condition接口与示例3 Condition实例4 Condition的实现分析4.1等待队列4.2等待4.3 通知本人使用jdk8版本。1 Object监视器方法与Condition接口比较任意一个Java对象,都拥有一组监视器方法,定义在java.lang.Object中,主要包括w...
原创
92阅读
0评论
0点赞
发布博客于 1 年前

【Executor框架】ThreadPoolExecutor详解(3种ThreadPool)

Executor框架最核心的类是ThreadPoolExecutor,它是线程池的实现类,主要由下列4个组件构成。corePool:核心线程池的大小。 maximumPool:最大线程池的大小。 BlockingQueue:用来暂时保存任务的工作队列。 RejectedExecutionHandler:当ThreadPoolExecutor已经关闭或ThreadPoolExecutor已...
原创
89阅读
0评论
0点赞
发布博客于 1 年前

【linux】Linux中创建新用户并赋予指定目录的相关权限

需求:创建undead用户,用户的主目录是/home/undead,密码是123,该用户具有760权限1. 创建用户且指定该用户的根路径和密码useradd -d /home/undead -m undead这种方式创建的用户可以使用ssh登录,但只有只读权限可以浏览下载部分文件无法写和修改。2. 设置密码passwd undead3. 用户授权chown -R unde...
转载
2156阅读
0评论
0点赞
发布博客于 1 年前

负数的二进制、二进制转十六进制、Java中的运算符

1 负数的二进制我们知道计算机只认识0和1,数字在计算机中就是以二进制表示的。这里提到三个概念:原码、反码和补码。数字的表示形式就是补码。1.1 正数正数的原码、反码和补码都是一样的,比如int值5的的原码、反码和补码都是:00000000 00000000 00000000 00000101所以5在计算机中的表示也是00000000 00000000 00000000 000...
原创
567阅读
2评论
0点赞
发布博客于 1 年前

【Executor框架】简介——两级调度模型、结构、框架主要成员

1 前言在Java中,使用线程来异步执行任务。Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源。同时,为每一个任务创建一个新线程来执行,这种策略可能会使处于高负荷状态的应用最终崩溃。Java的线程既是工作单元,也是执行机制,线程中定义的run方法即是工作单元的内容,线程最后调用自己的start()来执行自己。从JD...
原创
242阅读
0评论
0点赞
发布博客于 1 年前

SpringBoot生产环境,tomcat启动慢,第一次访问网站也是巨慢无比的解决办法

在JVM环境中解决:打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容:securerandom.source=file:/dev/random替换成securerandom.source=file:/dev/./urandom注意改动了两个地方:1.在路径中加了一个 “.”2.random变成ur...
转载
145阅读
0评论
0点赞
发布博客于 1 年前

【Executor框架】Java中的线程池(ThreadPoolExecutor实现原理、使用、状态维护)

目录1 为什么使用线程池2 线程池的实现原理3 线程池的使用3.1 线程池的创建3.2 向线程池提交任务3.3 关闭线程池3.4 合理的配置线程池3.5 线程池的监控1 为什么使用线程池在开发过程中,合理地使用线程池能够带来3个好处。降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程...
原创
76阅读
0评论
0点赞
发布博客于 1 年前

freemarker指令参考文档

。。。
原创
33阅读
0评论
0点赞
发布博客于 1 年前

【Java并发锁】ReentrantLock可重入锁

1 前言本人使用jdk8版本。
原创
25阅读
0评论
0点赞
发布博客于 1 年前

【Java并发锁】AbstractQueuedSynchronizer共享式同步状态获取与释放

1 前言本人使用jdk8版本。共享式获取与独占式获取最主要的区别在于同一时刻能否有多个线程同时获取到同步状态。以文件的读写为例,如果一个程序对该文件进行读操作,那么这一时刻对于该文件的写操作均被阻塞,而读操作能够同时进行。写操作要求对资源的独占式访问,而读操作可以是共享式访问,两种不同的访问模式在同一时刻对文件或者资源的访问情况。左半部分共享式访问资源时,其他共享式的访问均被允许,...
原创
53阅读
1评论
0点赞
发布博客于 1 年前

【Java并发锁】ReentrantReadWriteLock读写锁

1 前言本人使用jdk8版本读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。 一般情况下,读写锁的性能都会比排它锁好,因为大多数场景读多于写的,在读多于写的情况下,读写锁能够提供比排它锁更好的并发性和吞吐量。java并发包提供读写锁的实现是R...
原创
99阅读
0评论
0点赞
发布博客于 1 年前

【linux】Linux查看CPU和内存使用情况

top命令  top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。  运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等。退出 top 的命令为 q (在 top 运行中敲 q 键一次)。  内容解释:第一行(top):...
转载
27阅读
0评论
0点赞
发布博客于 1 年前

【linux】yum指令

1 什么是yum  yum是Yellowdog update Modified的简称。yum的宗旨是自动化的升级、安装/移除rpm安装包(也就是说yum这个命令它的操作对象是RPM包),收集rmp的相关信息,检查依赖性,并提示用户解决。yum的关键之处是要有可靠的repository,顾名思义这就是软件的仓库,它可以是http或者ftp站点,也可以是本地的软件池,但是必须包含rpm的heade...
转载
42阅读
0评论
0点赞
发布博客于 1 年前

【linux】centos7安装docker-启动mysql-使用navicat连接mysql

先提前说一下,如果你是阿里云服务器,同时你3306端口怎么都访问不到,那你要注意:去阿里云控制台,在安全组中把3306端口开启。 然后记得打开linux里面的防火墙,把3306端口开启,关闭防火墙是没用的。1 查看linux发行版,内核查看linux内核,现在最新版本的docker要求内核最低为3.10。由于我的内核版本是3.10,所以下面描述最新版的安装方法。[root@zha...
原创
227阅读
0评论
0点赞
发布博客于 1 年前

Java偏向锁/轻量级锁/重量级锁及锁的升级

1 前言在Java SE1.6之前,synchronized一直都是重量级锁,如果某个线程获得了锁,其它获取锁的线程必须阻塞。在高并发的情况下,会有大量线程阻塞,导致系统响应速度急剧下降;同时不断的获取和释放锁也会导致线程不断切换,给系统造成较大的负担。在Java SE1.6之后,为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。这些锁就存在锁对象的对象...
原创
170阅读
0评论
0点赞
发布博客于 1 年前

Synchronized与Java对象头

1 synchronized实现原理synchronized实现同步的基础是:Java中的每一个对象都可以作为锁。具体表现为以下3种形式:对于普通同步方法,锁是当前实例对象。 对于静态同步方法,锁是当前类的Class对象。 对于同步方法块,锁是Synchonized括号里配置的对象。当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。那么锁到底存在哪里呢?锁...
原创
172阅读
0评论
0点赞
发布博客于 1 年前

Java中各种锁介绍

乐观锁、悲观锁,可重入锁,共享锁、独占锁
转载
62阅读
0评论
0点赞
发布博客于 1 年前

【Java并发锁】AbstractQueuedSynchronizer独占式同步状态获取与释放

前言本人使用jdk8版本。通过调用同步器的acqurie(int arg)方法可以获取同步状态,该方法对中断不敏感,也就是由于线程获取同步状态失败后进入同步队列,后续对线程进行中断操作时,线程也不会从同步队列中移出。同步器中使用acquire()和release()来获取和释放锁,这两个方法主要是调用的实现锁中重写的tryAcquire()和tryRelease()。这里提前说明,tr...
原创
63阅读
0评论
0点赞
发布博客于 1 年前

【Java并发锁】AbstractQueuedSynchronizer队列实现

同步器是依赖于内部的同步队列(一个FIFO双向队列)来完成同步状态的管理,当前线程获取同步状态失败时,同步器会将当前线程以及等待等信息构造成为一个节点(Node)并将其加入同步队列,同时会阻塞当前线程,当同步状态是释放时,会把首节点中的线程唤醒,使其再次尝试获取同步状态。同步对列中的节点(Node)用来保存获取同步状态失败的线程引用、等待状态以及前驱和后继节点,节点的属性类型与名称以及描述:...
原创
41阅读
0评论
0点赞
发布博客于 1 年前

【Java并发锁】AbstractQueuedSynchronizer接口与示例

1 前言本人jdk版本8。队列同步器AbstractQueuedSynchronizer(以下简称同步器),是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量来表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作,并发包的作者(doug Lea)期望他能够称为实现大部分同步需求的基础。同步器是实现锁(也可以是任意同步组件)的关键,在锁的实现中聚合同步器,利用...
原创
32阅读
0评论
0点赞
发布博客于 1 年前

【Java并发锁】Lock

1 前言在Lock接口出现之前,java程序靠的是synchronized关键字实现共享锁功能的,而Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能。Concurrent包中已经提供的实现了Lock接口的锁包括:ReentrantLock(可冲入锁)和ReadWriteLock(读写锁)等。它提供了synchronized关键字类似的同步功能,只是在使用是...
原创
71阅读
0评论
0点赞
发布博客于 1 年前

CLH锁

CLH是一种基于单向链表的高性能、公平的自旋锁。申请加锁的线程通过前驱节点的变量进行自旋。在前置节点解锁后,当前节点会结束自旋,并进行加锁。基于线程当前节点的前置节点的锁值(locked)进行自旋,locked == true 自旋,locked == false 加锁成功。 locked == true 表示节点处于加锁状态或者等待加锁状态。 locked == false 表示节点处于...
转载
25阅读
0评论
0点赞
发布博客于 1 年前

【笔记】Javascript 笔记

1 delete操作符作用:delete 操作符用于删除对象的某个属性。语法:delete object.property 或 delete object['property']。返回值:delete操作符具有返回值,返回值为布尔值,对于所有情况都是true,即使是删除不存在的属性也会返回true,还是如上代码,不防打印一下返回值看看。但是也有例外的情况(返回false),如果属性是不...
原创
36阅读
0评论
0点赞
发布博客于 1 年前

Doug Lea并发编程文章全部译文

Doug Lea并发编程文章全部译文如果IT的历史,是以人为主体串接起来的话,那么肯定少不了Doug Lea。这个鼻梁挂着眼镜,留着德王威廉二世的胡子,脸上永远挂着谦逊腼腆笑容,服务于纽约州立大学Oswego分校计算机科学系的老大爷。说他是这个世界上对Java影响力最大的个人,一点也不为过。因为两次Java历史上的大变革,他都间接或直接的扮演了举足轻重的角色。一次是由JDK 1.1到JDK...
转载
70阅读
0评论
0点赞
发布博客于 1 年前

史上最全阿里 Java 面试题总结!

以下为大家整理了阿里巴巴史上最全的 Java 面试题,涉及大量 Java 面试知识点和相关试题。JAVA基础1.JAVA中的几种基本数据类型是什么,各自占用多少字节。2.String类能被继承吗,为什么。3.String,Stringbuffer,StringBuilder的区别。4.ArrayList和LinkedList有什么区别。5.讲讲类的实例化顺序,比如父类静态数...
转载
154阅读
0评论
0点赞
发布博客于 1 年前

【Java多线程】Java中断机制

前提假设程序需要停止正在运行的线程,如果直接stop线程,则有可能导致程序运行不完整、造成数据的不一致性以及其它不可控情况,因此Java提供了中断机制。何为中断每个线程都有一个与之相关联的 Boolean 属性,用于表示线程的中断状态(interrupted status)。中断状态初始时为 false。当另一个线程通过调用Thread.interrupt()中断一个线程时,会出现...
原创
142阅读
0评论
0点赞
发布博客于 1 年前

layui表单数据重载 全局搜索

场景描述:点击下图中的搜索按钮,会异步更新表单数据,不会使得整个页面刷新。实现代码如下,重载方法中的where是新增的参数,就是你原来加载数据列表的参数(如url、method等)也会附带上,不过新添加了where中的参数。<body><select id="finishStatus"> ......</select><div...
原创
856阅读
1评论
0点赞
发布博客于 1 年前

Java源码中的{@docRoot}

在看jdk源码时看到这个注释,本想直接点进去,没想不行,只能自己在浏览器里面输入地址。 * See the KeyPairGenerator section in the <a href= * "{@docRoot}/../technotes/guides/security/StandardNames.html#KeyPairGenerator">经过查找,...
原创
369阅读
2评论
1点赞
发布博客于 1 年前

【linux】Linux防火墙Firewall和Iptables的使用

前言Linux中有两种防火墙软件,ConterOS7.0以上使用的是firewall,ConterOS7.0以下使用的是iptables,本文将分别介绍两种防火墙软件的使用。Firewall开启防火墙:systemctl start firewalld关闭防火墙:systemctl stop firewalld查看防火墙状态:systemctl status fir...
转载
75阅读
0评论
0点赞
发布博客于 1 年前

【linux】如何在vi里搜索关键字

当你用vi打开一个文件后,因为文件太长,如何才能找到你所要查找的关键字呢?在vi里可没有菜单-〉查找不过没关系,你在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然后输入你要查找的关键字敲回车就可以了。如果你要继续查找此关键字,敲字符 n 就可以继续查找了。敲字符N(大写N)就会向前查询;...
转载
33阅读
0评论
0点赞
发布博客于 1 年前

【阿里/腾讯/字节跳动/美团】Java面试题汇总

一、Java基础1.1 JDK和JRE有什么区别?JREJRE是Java Runtime Environment的缩写,顾名思义是java运行时环境,包含了java虚拟机,java基础类库,所有的Java类库的class文件,都在lib目录下,并且都打包成了jar。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。我们平时在IDEA中配置jdk...
原创
290阅读
0评论
0点赞
发布博客于 1 年前