- 博客(98)
- 收藏
- 关注
原创 策略模式如果如何把初始化要运行的类
Spring的IOC容器启动时如果一个接口有多个实现类时,Spring会自动将接口的实现类注入到这个Map中,key为bean id,value值则为对应的策略实现类。
2023-07-12 15:39:23
709
原创 数据库增加/修改表备注、creat_time、update_time
ALTER TABLE `table_name`COMMENT='备注信息';修改alter table `table_name` modify column create_time datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' ;ALTER TABLE `table_name` modify COLUMN `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE .
2021-07-07 17:09:04
490
转载 什么是主从复制?
1、什么是主从复制主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从数据库上,然后在从数据库上对这些日志进行重新执行,从而使从数据库和主数据库的数据保持一致。
2021-06-12 10:04:21
2074
原创 HTTP请求返回状态码详解
当用户试图通过 HTTP 访问一台正在运行 Internet 信息服务 (IIS) 的服务器上的内容时,IIS 返回一个表示该请求的状态的数字代码。状态代码可以指明具体请求是否已成功,还可以揭示请求失败的确切原因。1xx - 信息提示这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应。· 100 - Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)· 101 - Switching Protocols 服务器将遵从客户
2021-06-04 21:03:52
370
原创 ZooKeeper分布式锁的优点和缺点
(1)优点:ZooKeeper分布式锁(如InterProcessMutex),能有效的解决分布式问题,不可重入问题,使用起来也较为简单。(2)缺点:ZooKeeper实现的分布式锁,性能并不太高。为啥呢?因为每次在创建锁和释放锁的过程中,都要动态创建、销毁瞬时节点来实现锁功能。大家知道,ZK中创建和删除节点只能通过Leader服务器来执行,然后Leader服务器还需要将数据同步到所有的Follower机器上,这样频繁的网络通信,性能的短板是非常突出的。总之,在高性能,高并发的场景下,不建议...
2021-05-25 20:53:45
3592
2
原创 mysql的几个参数
1、MySQL 一张表单个索引最多支持创建16个字段。2、A table can contain a maximum of 64 secondary indexes3、A table can contain a maximum of 1017 columns. Virtual generated columns are included in this limit. (一个表最多能有1017列)4、默认页是16k,那么表空间的最大值就是64T,所以说,理论值可以那么大,但是我们绝对不会那么干。
2021-05-25 18:23:59
209
1
原创 mysql utf-8 中文
在MySQL 5.0以上版本:UTF-8:一个汉字=3个字节GBK:一个汉字=2个字节varchar(n)和char(n)表示n个字符,可以直接存储 n 个汉字. 而不是 n/3或者 n/2 个,无论汉字和英文,Mysql都能存入n个字符,仅是实际字节长度有所区别,MySQL 并不会对超过长度的字符报错,而是直接截断了。...
2021-05-25 17:54:13
479
转载 漏桶算法与令牌桶算法的区别
漏桶算法能够强行限制数据的传输速率。令牌桶算法能够在限制数据的平均传输速率的同时还允许某种程度的突发传输。需要说明的是:在某些情况下,漏桶算法不能够有效地使用网络资源。因为漏桶的漏出速率是固定的,所以即使网络中没有发生拥塞,漏桶算法也不能使某一个单独的数据流达到端口速率。因此,漏桶算法对于存在突发特性的流量来说缺乏效率。而令牌桶算法则能够满足这些具有突发特性的流量。通常,漏桶算法与令牌桶算法结合起来为网络流量提供更高效的控制。...
2021-05-21 09:14:51
155
转载 NIO与零拷贝
前言:零拷贝是服务器网络编程的关键,任何性能优化都离不开。在 Java 程序员的世界,常用的零拷贝有 mmap 和 sendFile。那么,他们在 OS 里,到底是怎么样的一个的设计?本文将简单聊聊 mmap 和 sendFile 这两个零拷贝。、传统数据读写的劣势:初学 Java 时,我们在学习 IO 和 网络编程时,会使用以下代码: File file = new File("index.html"); RandomAccessFile raf = new RandomAccessF
2021-05-11 21:50:38
128
原创 Thread类中的几个关于中断的方法
1、什么是中断?中断只是一种协作机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自己实现;若要中断一个线程,你需要手动调用该线程的interrupt方法,该方法也仅仅是将线程对象的中断标识设置成true;2、几个方法①、public void interrupt(); 实例方法,实例方法interrupt() 仅仅是设置线程的中断状态为true,不会停止线程;②、public static boolean interrupted(); 静态方法;作用:判断线程是..
2021-03-17 10:26:17
268
原创 Spring事务不生效问题总汇
1,在同一个service中使用 this.xxx() xxx方法的事务不生效原因:Spring中事务管理是使用AOP代理技术实现的,目标对象自身并没有事务管理功能的,而是通过代理对象动态增强功能对事务进行增强的。因此当我们在同一个service类中通过一个方法调用另一个方法时,是通过目标对象this对象调用的,目标对象自身并没有事务管理功能,因此事务不能生效。解决:使用代理对象来调用事务方法a、引入aop-starter; spring-boot-starter-aop; 引入 Aspect.
2020-12-25 14:52:35
275
转载 缓存一致性问题怎么解决
关于 Redis 的其他的一些面试问题已经写过了,比如常见的缓存穿透、雪崩、击穿、热点的问题,但是还有一个比较麻烦的问题就是如何保证缓存一致性。对于缓存和数据库的操作,主要有以下两种方式。先删缓存,再更新数据库先删除缓存,数据库还没有更新成功,此时如果读取缓存,缓存不存在,去数据库中读取到的是旧值,缓存不一致发生。解决方案延时双删延时双删的方案的思路是,为了避免更新数据库的时候,其他线程从缓存中读取不到数据,就在更新完数据库之后,再 Sleep 一段...
2020-12-24 11:01:40
1136
1
转载 一致性Hash算法详解
目前正在维护公司的分布式任务调度平台,在任务节点的分配上使用到了一致性hash算法,特此记录,那么在后面的博文中会给出基于java实现的一致性hash算法的代码,以及分布式调度平台的一些设计思路。1.hash算法那么什么是hash算法呢,百度百科的定义如下:哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。普通的hash算法在分布式应用中的不足:比如,在分布式的存储系统中,要将数据存储到具体的节点上,如果
2020-12-24 10:43:50
392
转载 CPU使用率和平均负载的关系
CPU 是计算机 的运算和控制核心,信息处理、程序运行的最终执行单元,相当于系统的大脑当CPU过于繁忙,就像人脑并发处理过多的事情,会降低做事的效率,严重时导致崩溃宕机。CPU的物理核与逻辑核一台机器可能包含多块CPU芯片,多个CPU之间通过系统总线通信超线程技术可以让一个物理核在单位时间同时处理两个线程,变成两个逻辑核。但他不会拥有传统单核2倍处理能力,也不可能提供完整的并行处理能力如何查询CPU信息在linux下, /proc/cpuinfo文件中读取...
2020-10-14 07:32:38
239
转载 QPS、TPS、RT、并发数、吞吐量理解
吞吐量在了解qps、tps、rt、并发数之前,首先我们应该明确一个系统的吞吐量到底代表什么含义,一般来说,系统吞吐量指的是系统的抗压、负载能力,代表一个系统每秒钟能承受的最大用户访问量。一个系统的吞吐量通常由qps(tps)、并发数来决定,每个系统对这两个值都有一个相对极限值,只要某一项达到最大值,系统的吞吐量就上不去了。QPSQueries Per Second,每秒查询数,即是每秒能够响应的查询次数,注意这里的查询是指用户发出请求到服务器做出响应成功的次数,简单理解可以认为查询=请求re
2020-10-13 23:50:21
1181
转载 面试:如何从 100 亿 URL 中找出相同的 URL
题目描述给定 a、b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G。请找出 a、b 两个文件共同的 URL。解答思路每个 URL 占 64B,那么 50 亿个 URL占用的空间大小约为 320GB。“5, 000, 000, 000 * 64B ≈ 5GB * 64 = 320GB由于内存大小只有 4G,因此,我们不可能一次性把所有 URL 加载到内存中处理。对于这种类型的题目,一般采用分治策略,即:把一个文件中的 URL 按照某个特征划分为多.
2020-10-13 23:40:30
311
1
原创 ThreadLocal (吃透源码的每一个细节和设计原理)
记录一下https://blog.csdn.net/wanghao112956/article/details/102678591
2020-09-18 22:11:59
143
转载 如何正确理解 CPU 使用率和平均负载的关系?看完你就知道了
CPU(Central Processing Unit)是计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元,相当于系统的“大脑”。 当 CPU 过于繁忙,就像“人脑”并发处理过多的事情,会降低做事的效率,严重时甚至会导致崩溃“宕机”。因此,理解 CPU 的工作原理,合理控制负载,是保障系统稳定持续运行的重要手段。CPU 的物理核与逻辑核 一台机器可能包含多块 CPU 芯片,多个 CPU 之间通过系统总线通信。 超线程(Hyper-Threading)技术可以让一个物理核
2020-09-03 11:04:00
555
转载 JUC AQS ReentrantLock源码分析
Java的内置锁一直都是备受争议的,在JDK1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略,但是与Lock相比synchronized还是存在一些缺陷的:虽然synchronized提供了便捷性的隐式获取锁释放锁机制(基于JVM机制),但是它却缺少了获取锁与释放锁的可操作性,可中断、超时获取锁,且它为独占式在高并发场景下性能大打折扣。如何自己来实现一个同步自旋实现一个同步volatile int status=0;//标识--.
2020-08-16 23:36:19
118
转载 java中的关键字transient,这篇文章你再也不发愁了
https://baijiahao.baidu.com/s?id=1636557218432721275&wfr=spider&for=pc
2020-08-16 21:39:28
111
转载 聚簇索引和非聚簇索引
总结:InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分; 一般建表会用一个自增主键做聚簇索引,没有的话MySQL会默认创建,但是这个主键如果更改代价较高,故建表时要考虑自增ID不能频繁update这点。 我们日常工作中,根据实际情况自行添加的索引都是辅助索引,辅助索引就是一个为了需找主键索引的二级索引,现在找到
2020-08-10 10:00:24
310
原创 细解SimpleDateFormat
其实,作为一名Java 程序员,我们会经常在编程时候和时间打交道,比如要把某一个时间存储到数据库中去,而我们直接使用Datedate = newDate();System.out.println(date);得到的时间都是这样的SunJun 07 17:22:52CST 2020因此,我们经常需要把时间进行格式化处理,然后在进行存储,方便阅读。这个时候我们就会使用到SimpleDateFormat 类,比如使用下面的代码来获取当前时间,并调用SimpleDateFormat 对时间进行格式.
2020-08-07 14:26:53
273
原创 如何保证缓存与数据库的双写一致性
你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题?面试题剖析一般来说,如果允许缓存可以稍微的跟数据库偶尔有不一致的情况,也就是说如果你的系统不是严格要求“缓存+数据库” 必须保持一致性的话,最好不要做这个方案,即:读请求和写请求串行化,串到一个内存队列里去。串行化可以保证一定不会出现不一致的情况,但是它也会导致系统的吞吐量大幅度降低,用比正常情况下多几倍的机器去支撑线上的一个请求。Cache Aside Pattern.
2020-08-05 14:10:31
112
原创 细说LongAdder
http://www.wazhi.com.cn/SchoolManage/NewsDispatcher?NewsId=942ee429-0c82-4e3b-8df3-4910795d7cfc&SchoolId=1166&action=singlenews
2020-08-04 00:07:25
110
原创 jdk1.7中HashMap死循环分析
在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,HashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取Entry。那么这个死循环是如何生成的呢?我们来仔细分析下。HashMap扩容流程原理引发死循环,是在HashMap的扩容操作中。正常的扩容操作是这个流程。HashMap的扩容在put操作中会触发扩容,主要是
2020-07-30 16:27:41
295
转载 redis过期键删除策略
redis服务器实际使用的过期键删除策略有两种:定期删除 惰性删除redis 会将每个设置了过期时间的 key 放入到一个独立的字典中,以后会定时遍历这个字典来删除到期的 key。除了定时遍历之外,它还会使用惰性策略来删除过期的 key,所谓惰性策略就是在客户端访问这个 key 的时候,redis 对 key 的过期时间进行检查,如果过期了就立即删除。定时删除是集中处理,惰性删除是零散处理。通过配合使用这两种删除策略,服务器可以很好地合理使用cpu时间和避免浪费内存空间之间取得平衡。1.定期
2020-07-14 11:01:49
221
转载 两张动图-彻底明白TCP的三次握手与四次挥手
https://blog.csdn.net/qzcsu/article/details/72861891
2020-07-06 17:04:26
152
转载 雪花算法的原理和实现Java
SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的,后面的代码中有详细的注解。这 64 个 bit 中,其中 1 个 bit 是不用的,然后用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号。给大家举个例子吧,比如下面那个 64 bit 的 long 型数字:第一个部分.
2020-07-02 10:48:28
258
原创 面向对象设计需要遵循的六大设计原则
1. 单一职责原则:一个类或者一个接口只负责唯一项职责,尽量设计出功能单一的接口;2. 依赖倒转原则:高层模块不应该依赖低层模块具体实现,解耦高层与低层。既面向接口编程,当实现发生变化时,只需提供新的实现类,不需要修改高层模块代码;3. 开放- 封闭原则:程序对外扩展开放,对修改关闭;换句话说,当需求发生变化时,我们可以通过添加新模块来满足新需求,而不是通过修改原来的实现代码来满足新需求;4. 迪米特法则:一个对象应该对其他对象保持最少的了解,尽量降低类与类之间的耦合度;实现这个原则,要注意两个点,一
2020-07-01 22:07:34
1699
原创 系统为什么要分层?
1. 代码和系统的可维护性更高。系统分层之后,每个层次都有自己的定位,每个层次内部的组件都有自己的分工,系统就会变得很清晰,维护起来非常明确;2. 方便开发团队分工和开发效率的提升;举个例子,mybatis 这么大的一个源码框架不可能是一个人开发的,他需要一个团队,团队之间肯定有分工,既然有了层次的划分,分工也会变得容易,开发人员可以专注于某一层的某一个模块的实现,专注力提升了,开发效率自然也会提升;3. 提高系统的伸缩性和性能。系统分层之后,我们只要把层次之间的调用接口明确了,那我们就可以从逻辑上的分
2020-07-01 21:44:58
1706
转载 MyBatis中#{}和${}的区别详解 区别
区别1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".2.将传入的数据直接显示生成在sql中。如:orderby将传入的数据直接显示生成在sql中。如:orderbyuser_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sq
2020-07-01 21:25:39
46300
15
转载 零拷贝
前言零拷贝这三个字,一直是服务器网络编程的关键字,任何性能优化都离不开。在 Java 程序员的世界,常用的零拷贝有 mmap 和 sendFile。那么,他们在 OS 里,到底是怎么样的一个的设计?本文将简单聊聊 mmap 和 sendFile 这两个零拷贝。传统数据读写的劣势初学 Java 时,我们在学习 IO 和 网络编程时,会使用以下代码: File file = new File("index.html"); RandomAccessFile r.
2020-07-01 17:56:51
147
转载 SSL与TLS的区别以及介绍
今天遇到一个SSL和TLS的问题,又研究了一遍,找到一篇好的帖子,转帖在此。 SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。 TLS:(Transport Layer Security...
2020-06-24 06:45:43
356
转载 HTTPS 原理分析——带着疑问层层深入
HTTPS随着 HTTPS 建站的成本下降,现在大部分的网站都已经开始用上 HTTPS 协议。大家都知道 HTTPS 比 HTTP 安全,也听说过与 HTTPS 协议相关的概念有 SSL 、非对称加密、 CA证书等,但对于以下灵魂三拷问可能就答不上了:为什么用了 HTTPS 就是安全的? HTTPS 的底层原理如何实现? 用了 HTTPS 就一定安全吗?本文将层层深入,从原理上把 HTTPS 的安全性讲透。HTTPS 的实现原理大家可能都听说过 HTTPS 协议之所以是安全的是因为 H
2020-06-24 06:36:23
120
原创 URI 与 URL
URI = Universal Resource Identifier统一资源标识符URL = Universal Resource Locator统一资源定位符URI 是统一资源标识符,而 URL 是统一资源定位符。因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。上面的 mailto、news 和 isbn URI 都是 URI的示例。URI 和 URL 概念上的不...
2020-06-23 12:52:06
295
原创 IP地址与MAC地址 ARP协议
IP地址其实,互联网世界就是我们现实世界的一个延伸,很多计算机上面的事情,我们都可以在现实中找到相似的一个例子。在现实世界中,如果我们要寄一封信给别人,我们需要哪些信息。最重要的,莫过于地址信息,而IP地址,就是我们计算机网络世界中的地址,有了这个地址,我们就能够快速地找到对应的机器。当我们在浏览器上面访问一个网站的时候,我们会先使用这个网站地址去DNS那边进行解析,得到最终的IP地址,在互联网中,各路交换机会根据这个IP地址,最终把用户的请求送到对应的网络当中。现在我们使用的IP地址,是32位的,也就
2020-06-23 10:25:10
1850
转载 nohup: failed to run command java: No such file or directory解决
程序里远程执行shell命令(nohup java -jar ...)的执行,后台日志报错如下:nohup: failed to run command `java': No such file or directory原因:一般来说这个报错说明服务器执行不了"java"这个命令解决:创作中心 1、检查执行该shell的服务器有没有装jdk2、检查执行该shell的服务器的环境变量有没有将JAVA_HOME/bin加入(目的是可以在linux任意位置执行java命令)---------
2020-06-11 16:58:27
20494
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人