自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (1)
  • 收藏
  • 关注

转载 Linux 的内核态与用户态

我们常说的 Linux 严格来说指代的是 Linux Kernel,泛指使用或裁剪标准 Linux Kernel 并在此基础之上实现各种应用程序解决方案的操作系统发行版本(e.g. RHEL、SUSE 和 Ubuntu)。一个完整的 Linux 操作系统体系架构通常由下列几个核心层级组成:Linux Kernel 本质上看是一种软件,实现了进程管理器、内存管理器、文件系统、设备驱动以及网络管理组件来负责对接、管理计算机硬件平台,并通过系统调用(System Calls)为上层应用程序暴露硬件资源以提供程序运

2022-06-12 23:58:32 2073

转载 toString转json

json

2022-06-12 23:45:17 544

转载 Merge Two Sorted Lists

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.Example:Input:1->2->4, 1->3->4Output:1->1->2->3->4->4/** * Definition for s..

2021-08-04 22:16:51 253

转载 DDD 系列

导读:对于一个架构师来说,在软件开发中如何降低系统复杂度是一个永恒的挑战,无论是 94 年 GoF 的 Design Patterns , 99 年的 Martin Fowler 的 Refactoring , 02 年的 P of EAA ,还是 03 年的 Enterprise Integration Patterns ,都是通过一系列的设计模式或范例来降低一些常见的复杂度。但是问题在于,这些书的理念是通过技术手段解决技术问题,但并没有从根本上解决业务的问题。所以 03 年 Eric Evans 的 D

2021-08-04 22:08:35 526

转载 MyBatis的缓存机制

MyBatis的缓存机制介绍 一级缓存 一级缓存调用流程 一级缓存原理解释 一级缓存使用注意事项 二级缓存 MyBatis的缓存机制介绍Mybatis包含一个非常强大的的查询缓存机制,可以减少系统直接和数据库数据的IO操作,大幅度提高查询效率。同时MyBatis的缓存即使可以很方便的进行配置和定制。MyBatis默认定义了两级缓存一级缓存一级缓存是在没有配置默认情况下,MyBatis开启的缓存,是相对于同...

2021-08-01 19:40:03 138

转载 螺旋矩阵 II

题目描述:给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3输出:[[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6, 5 ]]方法1:主要思路:(1)模拟顺时针,处理好边界即可;class Solution {public: vector<vector<int>> generateMatrix(int n) { vector<vector&.

2021-07-30 23:56:53 98

原创 为对象分配内存

类加载完成后,接着会在Java堆中划分一块内存分配给对象。内存分配根据Java 堆是否规整,有两种方 式:指针碰撞:如果Java堆的内存是规整,即所有用过的内存放在一边,而空闲的的 放在另一边。分配 内存时将位于中间的指针指示器向空闲的内存移动一段与对象大小 相等的距离,这样便完成分配内 存工作。空闲列表:如果Java堆的内存不是规整的,则需要由虚拟机维护一个列表来记录 那些内存是可用 的,这样在分配的时候可以从列表中查询到足够大的内存分配给对 象,并在分配后更新列表记录。选择哪种..

2021-07-28 23:03:08 261

原创 深拷贝和浅拷贝

浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址,深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加 的指针指向这个新的内 存, 使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的 错误。浅复制:仅仅是指向被复制的内存地址,如果原地址发生改变,那么浅复制出来 的对象也会相应的改 变。深复制:在计算机中开辟一块新的内存地址用于存放复制的对象。...

2021-07-28 21:22:09 84

原创 ReentrantLock 与synchronized

1. ReentrantLock 通过方法 lock()与 unlock()来进行加锁与解锁操作,与 synchronized 会被 JVM 自 动解锁机制不同,ReentrantLock 加锁后需要手动进行解锁。为了避免程序出现异常而无法正常解 锁的情况,使用 ReentrantLock 必须在 finally 控制块中进行解锁操作。2. ReentrantLock 相比 synchronized 的优势是可中断、公平锁、多个锁。这种情况下需要使用 ReentrantLock。ReentrantL

2021-07-25 09:47:39 94

原创 线程池原理

提交一个任务到线程池中,线程池的处理流程如下:1、判断线程池里的核心线程是否都在执行任务,如果不是(核心线程空闲或者还有核心线程没有被创 建)则创建一个新的工作线程来执行任务。如果核心线程都在执行任务,则进入下个流程。2、线程池判断工作队列是否已满,如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如 果工作队列满了,则进入下个流程。3、判断线程池里的线程是否都处于工作状态,如果没有,则创建一个新的工作线程来执行任务。如果已 经满了,则交给饱和策略来处理这个任务。1、ThreadP.

2021-07-25 09:31:36 86

转载 JWT-Token验证,以及SpringSecurity

通常情况下,把API直接暴露出去是风险很大的,不说别的,直接被机器攻击就喝一壶的。那么一般来说,对API要划分出一定的权限级别,然后做一个用户的鉴权,依据鉴权结果给予用户开放对应的API。目前,比较主流的方案有几种:用户名和密码鉴权,使用Session保存用户鉴权结果。 使用OAuth进行鉴权(其实OAuth也是一种基于Token的鉴权,只是没有规定Token的生成方式) 自行采用Token进行鉴权第一种就不介绍了,由于依赖Session来维护状态,也不太适合移动时代,新的项目就不要采用了。第二种

2021-07-22 20:46:49 345

转载 spring中用到的九种设计模式

第一种:简单工厂又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。如下配置,就是在 HelloItxxz 类中创建一个 itxxzBean。<beans> <bean ..

2021-07-20 23:44:45 83

转载 Redis穿透、击穿、雪崩

解决高并发问题的其中一项措施是使用缓存,而通常的技术选型就是redis。用户访问网站时,为了避免每次都到持久层(如mysql)中获取数据,可以先到缓存(如Redis)中获取;如果缓存中获取不到,才到数据库中获取,同时将获取到的数据缓存到redis中。加缓存的目的是让用户尽可能少的访问数据库,尽可能多的访问缓存数据,从而提高网站的响应速度,保证网站的高并发,保护持久层数据的安全,同时提升用户的体验。有个黑帽子,一直使用订单id=-1的请求参数访问你的网站,会怎么样?缓存穿透比如数据中不存在..

2021-07-20 23:28:53 84

原创 HashMap是怎么解决哈希冲突的?

Hash一般翻译为“散列”,也有直接音译为“哈希”的,这就是把任意长度的输入通过散列算法,变换成 固定长度的输出,该输出就是散列值(哈希值);这种转换是一种压缩映射,也就是,散列值的空间通 常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入 值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。所有散列函数都有如下一个基本特性:根据同一散列函数计算出的散列值如果不同,那么输入值肯定也 不同。但是,根据同一散列函数计算出的散列值如果相同,输入值

2021-07-14 00:20:23 3405

原创 RabbitMQ和kafka的简单的对比

在应用场景方面, RabbitMQ,遵循AMQP协议,由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上。 kafka是Linkedin于2010年12月份开源的消息发布订阅系统,它主要用于处理活跃的流式数据,大数据量的数据处理上。1)在架构模型方面, RabbitMQ遵循AMQP协议,RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和serv

2021-07-13 23:27:49 274

原创 jvm有关动态对象年龄判定

虚拟机并不是永远地要求对象的年龄必须达到了MaxTenuringThreshold才能晋升老年代,如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到MaxTenuringThreshold中要求的年龄。学习jvm的人,基本都阅读过上面这段话,这里讲的是动态年龄的判定。对于动态的判定的条件就是相同年龄所有对象大小的总和大于Survivor空间的一半,然后算出的年龄要和MaxTenuringThreshold的值.

2021-07-11 15:55:36 208

原创 BIO,NIO,AIO 有什么区别?

IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。一、BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程响应,如果没有则会一直等待或者遭到拒绝请求,如果有的话,客户端线程会等待请求结束后才继续执行。二、NIO NIO本身是基于事件驱动思想来...

2021-07-11 15:24:37 135

转载 LVS+Keepalived+Nginx实现高可用集群负载均衡

从单体到集群系列目录从单体到集群(1) - 使用Nginx配置静态资源并搭建Tomcat集群从单体到集群(2) - keepalived+Nginx实现高可用集群从单体到集群(3) - LVS+Keepalived+Nginx实现高可用集群负载均衡--------------------------------------------------------------------------------------------------------------------------1

2021-07-11 15:04:45 654

转载 MySQL索引原理

1、环境准备本次课程使用的虚拟机环境是centos6.5首先准备四台虚拟机,安装好mysql,方便后续做读写分离和主从复制。192.168.85.111 node01192.168.85.112 node02192.168.85.113 node03192.168.85.114 node04安装jdk使用rpm的方式直接安装jdk,配置好具体的环境变量2、mycat的安装从官网下载需要的安装包,并且上传到具体的虚拟机中,我们在使用的时候将包上传到node01这台虚拟机,由

2021-07-11 14:23:17 74

spring bean创建

spring bean创建过程

2021-07-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除