- 博客(136)
- 收藏
- 关注
原创 Nginx的反向代理、动静分离、负载均衡
反向代理是一种常见的网络技术,它可以将客户端的请求转发到服务器群集中的一个或多个后端服务器上进行处理,并将响应结果返回给客户端。反向代理技术通常用于提高网站的可伸缩性和可用性,并且可以隐藏真实的后端服务器地址。访问localhost:80跳转到百度。
2023-09-25 16:33:11
102
原创 Nginx安装
安装EPEL仓库更新repoyum update安装nginx验证安装nginx -V可以从Nginx官⽅仓库来安装安装前置依赖添加nginx仓库添加以下内容更新repoyum update安装nginx验证安装。
2023-09-25 08:58:41
12
原创 Nginx访问认证
有时候,我们⼀些站点内容想要进⾏授权查看,只能输⼊账号密码之后才能访问,例如⼀些重要的内⽹平台,CRMCMDB,企业内部WIKI等等。htpasswd是Apache密码⽣成⼯具,Nginx⽀持auth_basic认证,因此我⻔可以将⽣成的密码⽤于Nginx中,输⼊⼀⾏命令即可安装。
2023-09-25 08:00:00
23
原创 Nginx显示failed (13: Permission denied)
而我的html等文件都是root用户下的,所以报错权限不足。所以只需改变用户为root下即可。经发现nginx的nginx.conf配置的用户和组都设为www。访问nginx的时候显示错误。
2023-09-24 23:37:50
50
原创 Nginx的location作用
Nginx的locaiton作⽤是根据⽤户请求的URI不同,来执行不同的应用。针对用户请求的网站URL进行匹配,匹配成功后进行对应的操作。正则表达式解释匹配符匹配规则优先级精确匹配1^~以某个字符串开头,不做正则2~*正则匹配3/blog/匹配常规字符串,有正则就优先正则4通⽤匹配,不符合其他location的默认匹配5。
2023-09-24 20:36:54
42
原创 httpd-tools的压力测试
是一个包含一些基本工具和实用程序的软件包,用于与 Apache HTTP Server 进行交互和管理。它提供了一些常用的命令行工具,可以帮助你配置、管理和监控 Apache 服务器。ApacheBench 工具,用于进行性能测试和负载压力测试。可以模拟多个并发请求,以评估服务器的性能。
2023-09-24 19:08:27
25
原创 Nginx浏览器缓存
配置浏览器缓存可以加速静态资源的访问,浏览器对用户访问的资源进⾏存储,下次访问,不⽤再去向服务器寻求资料,直接本地显示,加速访问体验,节省⽹络资源,提⾼效率。Nginx通过expires指令配置缓存,可以控制HTTP响应中的Expires和Cache-Control的头部信息,⽤来控制页⾯缓存例如HTML⻚⾯经常引⽤JavaScript以及图⽚等⽂件,这些⽂件很少被修改,可以设置浏览器对该类资源在本地缓存定期的时间。添加缓存之前响应信息。
2023-09-24 18:37:30
41
原创 Nginx实战
虚拟主机指的就是⼀个独⽴的站点,具有独⽴的域名,有完整的www服务,例如⽹站、FTP、邮件等。Nginx⽀持多虚拟主机,在⼀台机器上可以运⾏完全独⽴的多个站点。⼀些草根流量站⻓,常会搭建个⼈站点进⾏资源分享交流,并且可能有多个不同业务的站点,如果每台服务器只运⾏⼀个⽹站,那么将造成资源浪费,成本浪费。利⽤虚拟主机的功能,就不⽤为了运⾏⼀个⽹站⽽单独配置⼀个Nginx服务器,或是单独再运⾏⼀组Nginx进程。虚拟主机可以在⼀台服务器,同⼀个Nginx进程上运⾏多个⽹站。
2023-09-24 16:53:03
73
原创 Integer使用不当
Integer 是一个封装类型。它是对应一个 int 类型的包装。在 Java 里面之所以要提供 Integer 这种基本类型的封装类,是因为 Java 是一个面向对象的语言,而基本类型不具备对象的特征,所以在基本类型上做了一层对象的包装并且提供了相关的属性和访问方法来完善基本类型的操作。
2023-09-22 22:45:00
103
原创 HashMap中的hash 方法
为了提升 key 的 hash 值的散列度,在 hash 方法里面,做了位移运算。所以也就意味着 i 的值 , 始终是使用 hash 值的低 16 位与(n-1)进行取模运算,这个是由与运算符&的特性决定的。这样就会造成 key 的散列度不高,导致大量的 key 集中存储在固定的几个数组位置,很显然会影响到数据查找性能。在 HashMap 的 put 方法里面,是通过 Key 的 hash 值与数组的长度取模计算。度更高,尽可能减少 hash 表的 hash 冲突,从而提升数据查找的性能。
2023-09-22 22:38:38
65
原创 ArrayList 的自动扩容机制
ArrayList 是一个数组结构的存储容器,默认情况下,数组的长度是 10 当然我们也可以在构建 ArrayList 对象的时候自己指定初始长度。随着在程序里面不断的往 ArrayList 中添加数据,当添加的数据达到 10 个的时候,ArrayList 就没有多余容量可以存储后续的数据。这个时候 ArrayList 会自动触发扩容。扩容完成后再把当前要添加的元素加入到新的数组里面,从而完成动态扩容的过程。首先,创建一个新的数组,这个新数组的长度是原来数组长度的 1.5 倍。
2023-09-22 21:42:42
56
原创 深拷贝和浅拷贝
在 Java 里面,无论是深拷贝还是浅拷贝,都需要通过实现 Cloneable 接口,并实现clone()方法。浅拷贝,就是只复制某个对象的指针,而不复制对象本身。深拷贝,会完全创建一个一模一样的新对象,新对象和老对象不共享内存,也就意味着对新对象的修改不会影响老对象的值。在 clone()方法里面重写克隆逻辑,也就是对克隆对象内部的引用变量再进行一次。通过序列化的方式实现,也就是把一个对象先序列化一遍,然后再反序列化回来,深拷贝和浅拷贝是用来描述对象或者对象数组这种引用数据类型的复制场景的。
2023-09-22 21:10:51
55
原创 认证中心CAS实现SSO单点登录
CAS(Central Authentication Service)是一种单点登录(SSO)协议和实现方式。它允许用户只需进行一次身份验证,然后就能访问多个不同的应用程序或服务,而无需在每个应用程序中单独进行身份验证。
2023-09-21 18:58:32
23
原创 Java乐观锁的实现
乐观锁是一种用于解决并发冲突的机制,它基于假设在大多数情况下没有并发冲突的原则。与悲观锁不同,乐观锁不会对数据加锁,而是通过一定的方式来检测并处理并发冲突。在实现乐观锁时,通常会使用版本号或时间戳作为标识。当多个线程同时访问同一个数据时,每个线程都会读取到数据的当前版本号或时间戳。在更新数据时,线程会比较当前的版本号或时间戳与自己读取到的版本号或时间戳是否一致。如果一致,则执行更新操作;如果不一致,则表示有其他线程已经修改了数据,当前线程的操作可能存在并发冲突,需要进行相应的处理(如重试、回滚等)。
2023-09-21 17:21:59
47
原创 String、StringBuffer、StringBuilder 的区别
关于 String、StringBuffer、StringBuilder 的区别,可以从四个方向去说明。可变性线程安全性性能方面性能方面。
2023-09-20 16:00:35
36
原创 MYSQL的锁
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。MySQL中的锁,按照锁的粒度分,分为以下三类:全局锁:锁定数据库中的所有表。表级锁:每次操作锁住整张表。行级锁:每次操作锁住对应的行数据。
2023-09-18 22:26:20
188
原创 mysql报错You do not have the SUPER privilege and binary logging is enabled
创建触发器,显示You do not have the SUPER privilege and binary logging is enabled。用root用户登录:mysql -u root -p,之后。
2023-09-18 18:41:12
199
原创 MYSQL的触发器
来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录。表的数据变更日志,将变更日志插入到日志表。触发器是与表有关的数据库对象,指在。,触发并执行触发器中定义的SQL。表示将要或者已经删除的数据。表示将要或者已经新增的数据。表示将要或已经修改后的数据。
2023-09-17 22:56:24
273
1
原创 MYSQL的游标
声明游标(CURSOR)是用来存储查询结果集的数据类型在存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、OPENFETCH和CLOSE声明DECLARE游标名称CURSOR FOR查询语句;打开游标OPEN游标名称;获取游标记录FETCH游标名称INTO变量[,变量关闭游标CLOSE游标名称;案例根据传入的参数uage,来查询用户表tb_user中,所有的用户年龄小于等于uage的用户姓名name。
2023-09-17 22:24:38
287
原创 mysql的判断语句
if 用于做条件判断,具体的语法结构如下,在if条件判断的结构中,ELSE IF结构可以有多个,也可以没有。ELSE结构可以有,也可以没有。案例如果判定条件有多个,多个条件之间,可以使用and或or进行连接。方法一。
2023-09-17 21:09:40
162
原创 mysql的变量
用户定义变量 是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用"@变量名"使用就可以。其作用域为当前连接。赋值赋值时,可以使用,也可以使用:=。用户定义的变量无需对其进行声明或初始化,只不过获取到的值为NULL。
2023-09-17 20:23:48
196
原创 MYSQL的存储过程
存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。存储过程思想上很简单,就是数据库 SQL语言层面的代码封装与重用封装,复用可以把某一业务SQL封装在存储过程中,需要用到的时候直接调用即可。可以接收参数,也可以返回数据再存储过程中,可以传递参数,也可以接收返回值。减少网络交互,效率提升如果涉及到多条SQL,每执行一次都是一次网络传输。
2023-09-17 13:38:43
261
2
原创 MYSQL的视图
视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。创建CREATEOR视图名称[(列名列表)]AS SELECT语句查询查看创建视图语句:SHOWCREATEVIEW视图名称;查看视图数据:SELECT *FROM视图名称......;修改。
2023-09-16 22:59:07
214
原创 InnoDB的页分裂与页合并
存储引擎中,表数据都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表。那也就意味着, 一个页中所存储的行也是有限的,如果插入的数据行row。2#的数据记录,当页中删除的记录达到 MERGE_THRESHOLD。50的记录,因为索引结构的叶子节点是有顺序的。在该页存储不小,将会存储到下一个页中,页与页之间会通过指针连接。的数据之后,那么此时,这三个页之间的数据顺序是有问题的。行数据,都是存储在聚集索引的叶子节点上的。删除数据,并将页合并之后,再次插入新的数据。页中的,而每一个页的大小是固定的,默认。
2023-09-16 09:54:22
51
原创 对象的创建过程
在实例化一个对象的时候,JVM 首先会去检查目标对象是否已经被加载并初始化了。如果没有,JVM 需要立刻去加载目标类,然后调用目标类的构造器完成初始化。目标类的加载是通过类加载器来实现的,主要就是把一个类加载到内存里面。然后初始化的过程,主要是对目标类里面的静态变量、成员变量、静态代码块进行初始化分配内存空间当目标类被初始化以后,就可以从常量池里面找到对应的类元信息,并且目标对象的大小在类加载之后就已经确定了,所以这个时候就需要为新创建的对象,根据目标对象的大小在堆内存里面分配内存空间。
2023-09-15 19:48:05
69
原创 JDK 动态代理
Java 里面,动态代理是通过 Proxy.newProxyInstance()方法来实现的,它需要传入被动态代理的接口类JDK 动态代理的底层实现。
2023-09-15 12:05:04
57
原创 父域 Cookie实现sso单点登录
Cookie 的作用域由 domain 属性和 path 属性共同决定。在 Tomcat 中,domain 属性默认为当前域的域名/IP地址。path 属性的有效值是以“/”开头的路径,在 Tomcat 中,path 属性默认为当前 Web 应用的上下文路径。如果将 Cookie 的 domain 属性设置为当前域的父域,那么就认为它是父域 Cookie。Cookie 有一个特点,即父域中的 Cookie 被子域所共享,换言之,子域会自动继承父域中的Cookie。
2023-09-14 08:30:00
249
原创 双token实现无感刷新
双 token 验证机制,其中 accessToken 过期时间较短,refreshToken 过期时间较长。当 accessToken 过期后,使用 refreshToken 去请求新的 token。
2023-09-12 11:50:26
69
原创 为何不建议使用Java自带的线程池
ExecutorsExecutorsExecutors是java自带的线程池。Executors 里面默认提供的几个线程池是有一些弊端的,如果是不懂多线程、或者是新手直接盲目使用,就可能会造成比较严重的生产事故。FixedThreadPool 和 SingleThreadPool第一个,FixedThreadPool 和 SingleThreadPool 中,阻塞队列长度是Integer.Max_Value,一旦请求量增加,就会堆积大量请求阻塞在队列中,可能会造成内存溢出的问题。
2023-09-11 20:00:00
130
原创 受检异常和非受检异常
受检异常的定义是程序在编译阶段必须要主动捕获的异常,遇到该异常有两种处理方法通过 try/catch 捕获该异常或者通过 throw 把异常抛出去非受检异常的定义是程序不需要主动捕获该异常,一般发生在程序运行期间,比如。
2023-09-11 19:45:00
101
原创 MYSQL的索引使用注意
针对于数据量较大,且查询比较频繁的表建立索引。针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立引。尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。如果是字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引。尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。
2023-09-10 20:07:43
348
原创 MYSQL的慢查询
通过查询SQL的执行频次,我们就能够知道当前数据库到底是增删改为主,还是查询为主。那假如说是以查询为主,次数我们可以借助于慢查询日志。接下来,我们就来介绍一下MySQL中的慢查询日志。慢查询日志记录了所有执行时间超过指定参数(,单位:秒,默认10秒)的所有SQL语句的日志。
2023-09-10 16:33:04
214
原创 mysql的索引分类
在MySQL数据库,将索引的具体类型主要分为以下几类:主键索引、唯一索引、常规索引、全文索引。主键索引针对于表中主键创建的索引默认自动创建只能有一个PRIMARY唯一索引避免同一个表中某数据列中的值重复可以有多个UNIQUE常规索引快速定位特定数据可以有多个全文索引全文索引查找的是文本中的关键词,而不是比较索引中的值可以有多个FULLTEXT在InnoDB存储引擎中,根据索引的存储形式,又可以分为以下两种聚集索引。
2023-09-09 22:36:03
591
原创 fail-safe 机制与 fail-fast 机制
定义了一个 CopyOnWriteArrayList,在对这个集合遍历过程中,对集合元素做修改后,不会抛出异常,但同时也不会打印出增加的元素。原因是采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合上进行遍历。表示快速失败,在集合遍历过程中,一旦发现容器中的数据被修改了,会立刻抛出 ConcurrentModificationException 异常,从而导致遍历失败,像这种情况。
2023-09-09 19:30:00
345
原创 HashMap解决哈希冲突
Hash算法要了解 Hash冲突,那首先我们要先了解 Hash 算法和 Hash 表。Hash算法Hash 算法,就是把任意长度的输入,通过散列算法,变成固定长度的输出,这个输出结果是散列值。Hash表Hash 表又叫做“散列表”,它是通过 key 直接访问在内存存储位置的数据结构,在具体实现上,我们通过 hash 函数把 key 映射到表中的某个位置,来获取这个位置的数据,从而加快查找速度。
2023-09-09 19:30:00
168
原创 mysql的索引结构
索引(index)是帮助MySQL高效获取数据的数据结构有序。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
2023-09-09 08:30:00
342
原创 mysql存储引擎
连接层最上层是一些客户端和链接服务,包含本地sock通信和大多数基于客户端服务端工具实现的类似于TCP/IP的通信。服务层第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。引擎层存储引擎层, 存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。存储层数据存储层, 主要是将数据如: redologundolog。
2023-09-08 22:34:33
315
原创 lock 和 synchronized 区别
功能功能从功能角度来看,Lock 和 Synchronized 都是 Java 中用来解决线程安全问题的工具。特性1.Synchronized 是 Java 中的同步关键字,Lock 是 J.U.C 包中提供的接口,这个接口有很多实现类,其中就包括 ReentrantLock 重入锁2.Synchronized 可以通过两种方式来控制锁的粒度一种是把 synchronized 关键字修饰在方法层面,另一种是修饰在代码块上,并且我们可以通过 Synchronized 加锁对象的声明周期来控。
2023-09-08 21:15:00
109
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人