自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(188)
  • 收藏
  • 关注

原创 雪花算法时钟回拨解决方案

用服务启动时的时间,等id追上已持久化数据的id,得到一个偏移量,后面时间的增量加上偏移量,就是有效id。

2022-05-23 07:44:22 498

原创 单例引用原型

package com.mashibing.methodOverrides.lookup;public class Apple extends Fruit { private Banana banana; public Apple() { System.out.println("I got a fresh apple"); } public Banana getBanana() { return banana; }

2021-09-12 23:03:24 212

原创 spring创建Bean的时序图

首先通过ClassPathXmlApplicationContext获取要创建的Bean,这里的方法是getBean。在AbstractBeanFactory中会通过调用doGetBean方法完成获取Bean的操作。此时DefaultSingletonBeanResigstry会执行getSingleton通过单例的方式返回Bean。在获取Bean以后会通过createBean方法调用AbstractAutowireCapableBeanFactory中的方法对Bean进行初始化。这...

2021-09-02 14:02:48 310

原创 进程和线程有什么区别?

普通:进程就是一个程序运行起来的状态,线程是一个进程中的不同的执行路径。专业:进程是OS分配资源的基本单位,线程是执行调度的基本单位。分配资源最重要的是:独立的内存空间,线程调度执行(线程共享进程的内存空间,没有自己独立的内存空间)。其实在linux上,线程就是一个普通的进程,只不过和其他线程共享资源。...

2021-08-18 12:04:58 140

原创 redis持久化,加载,aof重写流程

aof重写时,可以开启生成rdb,追加aof命令生成aof文件的方式。是否开启混合持久化aof-use-rdb-preamble yes是否开启3-1的步骤:指定是否在后台aof文件rewrite期间调用fsync,默认为no,表示要调用fsync(无论后台是否有子进程在刷盘)。Redis在后台写RDB文件或重写AOF文件期间会存在大量磁盘IO,此时,在某些linux系统中,调用fsync可能会阻塞。如果应用系统无法忍受延迟,而可以容忍少量的数据丢失,则设置为yes。如果应用系统无法忍受数据丢.

2021-06-25 14:04:09 234

原创 springsecurity之跨域

从协议部分开始到端口部分结束,只要与请求URL不同即被认为跨域,域名与域名对应的IP也不能幸免。浏览器解决跨域问题的方法有多种,包括JSONP、Nginx转发和CORS等。其中,JSONP和CORS需要后端参与。CORS(Cross-Origin Resource Sharing)通常情况下,跨域请求即便在不被支持的情况下,服务器也会接收并进行处理,在CORS的规范中则避免了这个问题。浏览器首先会发起一个请求方法为OPTIONS 的预检请求,用于确认服务器是否允许跨域,只有在得到许可后才会发出实际

2021-05-31 15:28:32 1077 1

原创 nginx限流配置(示例)

#user nobody;user root root;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events { worker_connections 1024;}http { include mime.t

2021-05-22 11:17:45 170

原创 Redis 缓存过期处理与内存淘汰机制

1.已过期的key如何处理?设置了expire的key缓存过期了,但是服务器的内存还是会被占用,这是因为redis所基于的两种删除策略redis有两种策略:1. (主动)定时删除定时随机的检查过期的key,如果过期则清理删除。(每秒检查次数在redis.conf中的hz配置)默认每秒检查10个key。2. (被动)惰性删除当客户端请求一个已经过期的key的时候,那么redis会检查这个key是否过期,如果过期了,则删除,然后返回一个nil。这种策略友好,不会有太多的损耗,但是内存占用会比较高。

2021-05-15 16:32:49 97

原创 protobuf示例

syntax = "proto2";package com.shengsiyuan.protobuf;option optimize_for = SPEED;option java_package = "com.shengsiyuan.netty.sixthexample";option java_outer_classname = "MyDataInfo";message MyMessage { enum DataType{ PersonType = 1;

2021-05-03 15:27:04 110

原创 Keepalived配置Nginx自动重启

1. 增加Nginx重启检测脚本vim /etc/keepalived/check_nginx_alive_or_not.sh#!/bin/bashA=`ps -C nginx --no-header |wc -l`# 判断nginx是否宕机,如果宕机了,尝试重启if [ $A -eq 0 ];then/usr/local/nginx/sbin/nginx# 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机sleep 3if [ `ps -C n

2021-04-18 22:58:51 175

原创 mybatis面试题

1.mybatis 中 #{}和 ${}的区别是什么?2.mybatis 有几种分页方式?3.RowBounds 是一次性查询全部结果吗?为什么?4.mybatis 逻辑分页和物理分页的区别是什么?5.mybatis 是否支持延迟加载?延迟加载的原理是什么?6.说一下 mybatis 的一级缓存和二级缓存?7.mybatis 和 hibernate 的区别有哪些?8.mybatis 有哪些执行器(Executor)?9.mybatis 分页插件的实现原理是什么?10.mybatis 如何编

2021-04-17 22:09:29 108

原创 mybatis嵌套查询

public List<MyOrdersVO> queryMyOrders(@Param("paramsMap") Map<String, Object> map);<resultMap id="myOrdersVO" type="com.imooc.pojo.vo.MyOrdersVO"> <id column="orderId" property="orderId"/> <result column="createdTime" p

2021-04-17 20:26:49 92

原创 项目中常用的几个组件和工具类

package com.imooc.aspect;import org.aopalliance.intercept.Joinpoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.slf4j.Logger;import org.slf4j.LoggerFactor

2021-04-15 22:57:23 284

原创 @Valid的用法

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>@ApiOperation(value = "修改用户信息", notes = "修改用户信息", httpMethod = "POS

2021-04-15 22:50:47 173

原创 Cors跨域配置

package com.imooc.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.cors.CorsConfiguration;import org.springframework.web.cors.UrlBasedCorsConfiguration

2021-04-14 23:08:12 222

原创 Swagger2配置

package com.imooc.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import springfox.documentation.builders.ApiInfoBuilder;import springfox.documentation.builders.PathSelectors;impor

2021-04-14 23:07:36 126 1

原创 使用Nginx配置HTTPS域名证书

1. 安装SSL模块要在nginx中配置https,就必须安装ssl模块,也就是: http_ssl_module 。进入到nginx的解压目录: /home/software/nginx-1.16.1新增ssl模块(原来的那些模块需要保留)./configure \--prefix=/usr/local/nginx \--pid-path=/var/run/nginx/nginx.pid \--lock-path=/var/lock/nginx.lock \--error-log-path

2021-04-13 12:09:41 113

原创 Nginx的缓存

1. 浏览器缓存:加速用户访问,提升单个用户(浏览器访问者)体验,缓存在本地控制浏览器缓存:location /files { alias /home/imooc; expires 10s; # expires @22h30m; # expires -1h; # expires epoch; # expires off; # expires max;}如果文件被修改,则缓存失效。根据last-Modified判断。# 22点半缓存过期expires @22h30m;# 一

2021-04-12 23:13:06 200

原创 负载均衡 url_hash 与 least_conn

负载均衡 url_hash根据访问路径取hash。如果某个路径过热,可以将该tomcat替换为nginx,再进行一个upstream代理。根据每次请求的url地址,hash后访问到固定的服务器节点。注意:www.baidu.com 与 www.baidu.com/ 可能会访问到不同的tomcatupstream tomcats { # url hash hash $request_uri; # 最少连接数 # least_conn server 192.168.1.173:8080

2021-04-12 22:49:09 143

原创 hash算法与一致性hash算法

hash算法取用户的ip的hash,对Tomcat节点数取模。当增加或减少Tomcat节点时,会造成大面积变更节点。最好扩容或者缩容一倍。一致性hash算法也就是hash环。扩容或者缩容,只会影响部分用户。...

2021-04-12 22:41:03 114

原创 upstream 指令参数

限制每台server的连接数,用于保护避免过载,可起到限流作用。测试参考配置如下:worker进程设置1个,便于测试观察成功的连接数worker_processes 1;upstream tomcats {server 192.168.1.173:8080 max_conns=2;server 192.168.1.174:8080 max_conns=2;server 192.168.1.175:8080 max_conns=2;}使用jmeter可以测试出。...

2021-04-12 21:54:52 358

原创 nginx高可用

1.keepalived解决(实际工作中基本不用,因为有工具可以使同一个域名绑定多个ip)lvs 思想来解决:多个keepalive共同维护一个虚拟ip,master会将虚拟ip绑定到自己的网卡上,当浏览器访问这个虚拟ip时,就会访问到实际的ip,就会访问到这个ip上的nginx。keepalived的思路,由 2台服务器软件虚拟出来一台 虚拟网关vip,此vip由两台机器共同协商生成。当有一台机器宕机时,另一台机器一样能维持vip。这保证了,只要两台机器不同时宕机,vip就存在keepali.

2021-04-10 18:19:04 375

原创 Nginx配置https

1.nginx配置https的时候,需要两个东西:(此两样需购买)一个key,私钥。放在nginx服务器里面,仅此一份一个证书,公钥,供浏览器去下载。配置方式如下图:2.环境要求:先查看nginx版本信息,命令:nginx -V有–with-http_ssl_module,表示安装了https模块。否则需要重新安装。3.配置好https方式之后,对http请求重定向(可不配置)在https里,ajax请求普通http,会报错(原因:会降低安全)4.配置server {

2021-04-10 17:58:55 239

原创 跨域问题

1.跨域原因当浏览器访问 www.a.com时,tomcat1给返回一个js,用户看不到。这个js通过ajax去调用另一个服务tomcat2,如果能够调的通,那么就危险了。所以 w3c标准不允许。当ajax调用www.b.com时,请求头里会放置一个变量。tomcat2检测到$http_origin 中的变量 即 原网址是否是本服务,如果不是,则拒绝该访问。2.如何跨域常见的跨域方案:jsonp、 document.domain + iframe 跨域Cors解决方案(最优雅)添加hea

2021-04-09 15:00:31 496

原创 Nginx转发配置

1.proxy_pass 最后无"/",传递整个路径2.proxy_pass 最后有"/",去除匹配的路径3.root 取整个路径4.alias 去除匹配的路径

2021-04-08 21:15:55 695

原创 nginx日志切割-自动

使用定时任务安装定时任务:yum install crontabscrontab -e 编辑并且添加一行新的任务:*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh重启定时任务:service crond restart附:常用定时任务命令:service crond start //启动服务service crond stop //关闭服务service crond restart //重启服务service crond

2021-04-05 21:50:50 53

原创 nginx日志切割-手动

创建一个shell可执行文件: cut_my_log.sh ,内容为:#!/bin/bashLOG_PATH="/var/log/nginx/"RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M)PID=/var/run/nginx/nginx.pidmv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.logmv ${LOG_PATH}/error.log ${LOG_PATH.

2021-04-05 21:41:15 77

原创 20210331同学面试遇到的问题

1.redis 的5种value数据类型? string这个数据类型是怎么实现的?2.实际中,怎么做灰度测试的?3.es的倒排索引4.简单点的,sync这个关键字 有哪些属性?5.kafka了解多少?6.mysql 执行sql语句,发生在引擎中的哪个阶段?7.线程池的声明周期,注意,不是线程池中的线程8.currentHashMap 1.7和1.8的区别9.队列有哪些?它们有哪些区别?array与link哪个支持的并发量大?为什么?...

2021-04-01 16:03:29 57

原创 redis的使用

1.redis的安装redis version 5.x1.解压2.make如果make报错的话 大家就可以看一下是不是报没有gcc的错 如果是报没有gcc的错,那就要先安装一个gccyum install gcc-c++make distclean安装好gcc之后最好执行一下make distclean 因为前面make的时候它执行了一些东西 要先把他清掉3.make install查看redis默认安装位置/usr/local/binredis设置外网访问 1.注释bind并

2021-03-09 23:37:50 117

原创 日志笔记

日志输出格式: %d表示日期时间, %thread表示线程名, %-5level:级别从左显示5个字符宽度 %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 %msg:日志消息, %n是换行符 --> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%nSpringBoot修改日志的默认配置logging.level.com.atgui...

2021-03-01 23:23:12 239

原创 springboot复习笔记

<!-- 这个插件,可以将应用打包成一个可执行的jar包;--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId&g.

2021-03-01 22:30:30 143

原创 网络编程_select、poll、epoll

select:类似poll,只是select监听的是文件描述符的位数组。监听的数组每一位与真正的文件描述符是一一对应的。poll:首先,服务启动时,服务端的socket会server_init()返回值int s 是一个文件描述符,将这个文件描述符放到一个pollfd数组pfd的第0位中,while(1){int ret poll(pfd , 监听的文件描述符个数 , ...)ret <0,有error;ret = 0,超时;ret>0 ,有事件发生。然后:if(pfd[

2021-01-08 17:56:24 217

转载 NAT之如何寻找局域网中的主机

当在你家里要访问 163 网站的时候,你的包需要 NAT 成为公网 IP,返回的包又要 NAT 成你的私有 IP,返回包怎么知道这是你的请求呢?它怎么就这么智能的 NAT 成了你的 IP 而非别人的 IP 呢?NAT在进行地址替换时不仅仅包含IP地址,还有端口号。具体说来就是,我们在进行连接外网服务器请求的数据包中,除了源、目的IP地址外,还有源、目的端口号。其中目的端口号是固定的,比如21或80等等。但源端口号是随机生成的。当数据包到达进行NAT的设备时,除了私有IP地址会被替换成公网IP地址外,端口号

2021-01-06 10:24:10 747

原创 TCP滑动窗口

发送端:NextByteExpected 和 LastByteRead 的差其实是还没被应用层读取的部分占用掉的 MaxRcvBuffer 的量,我们定义为 A。AdvertisedWindow 其实是 MaxRcvBuffer 减去 A。发送端和接收端当前的状态如下:1、2、3 没有问题,双方达成了一致。4、5 接收方说 ACK 了,但是发送方还没收到,有可能丢了,有可能在路上。6、7、8、9 肯定都发了,但是 8、9 已经到了,但是 6、7 没到,出现了乱序,缓存着但是没办法 ACK。

2021-01-03 22:26:18 90

原创 TCP的三次握手与四次挥手

建立连接为什么需要3次?2次呢?4次呢?我们假设这个通路是非常不可靠的,A 要发起一个连接,当发了第一个请求杳无音信的时候,会有很多的可能性,比如第一个请求包丢了,再如没有丢,但是绕了弯路,超时了,还有 B 没有响应,不想和我连接。A 不能确认结果,于是再发,再发。终于,有一个请求包到了 B,但是请求包到了 B 的这个事情,目前 A 还是不知道的,A 还有可能再发。B 收到了请求包,就知道了 A 的存在,并且知道 A 要和它建立连接。如果 B 不乐意建立连接,则 A 会重试一阵后放弃,连接建立失败,没

2021-01-03 21:35:18 102

原创 Kafka 请求是怎么被处理的

kafka中所有的请求都是通过 TCP 网络以 Socket 的方式进行通讯的。Kafka Broker 端处理请求的全流程:1.顺序处理请求。while (true) { Request request = accept(connection); handle(request);}这个方法吞吐量太差,只适用于请求发送非常不频繁的系统。每个请求使用单独线程处理。为每个入站请求都创建一个新的线程来异步处理。while (true) {

2020-12-30 17:43:38 168

原创 Kafka 的副本机制

副本机制有什么好处?1.提供数据冗余。即使系统部分组件失效,系统依然能够继续运转,因而增加了整体可用性以及数据持久性。2.提供高伸缩性。支持横向扩展,能够通过增加机器的方式来提升读性能,进而提高读操作吞吐量。3.改善数据局部性。允许将数据放入与用户地理位置相近的地方,从而降低系统延时。kafka目前只能享受到副本机制带来的第 1 个好处,也就是提供数据冗余实现高可用性和高持久性。Kafka 是有主题概念的,而每个主题又进一步划分成若干个分区。kafka副本的概念实际上是在分区层级下定义的,每个分区

2020-12-30 15:58:18 160

原创 kafka_消费者组消费进度监控实现

对于 Kafka 消费者,最重要的就是监控它们的消费进度,或者说监控它们消费的滞后程度(消费者 Lag 或 Consumer Lag)。所谓滞后程度,就是指消费者当前落后于生产者的程度。Lag 的单位是消息数。我们一般是在主题这个级别上讨论 Lag 的,但实际上,Kafka 监控 Lag 的层级是在分区上的。如果要计算主题级别的,你需要手动汇总所有主题分区的 Lag,将它们累加起来,合并成最终的 Lag 值。一个正常工作的消费者,它的 Lag 值应该很小,甚至是接近于 0 的,这表示该消费者能够及时地消

2020-12-30 15:12:14 1472 1

原创 Kafka 的 Java 消费者如何管理 TCP 连接?

何时创建 TCP 连接?和生产者不同的是,构建 KafkaConsumer 实例时是不会创建任何 TCP 连接的,TCP 连接是在调用 KafkaConsumer.poll 方法时被创建的。再细粒度地说,在 poll 方法内部有 3 个时机可以创建 TCP 连接。1.发起 FindCoordinator 请求时。Coordinator是消费者端的一个组件,驻留在 Broker 端的内存中,负责消费者组的组成员管理和各个消费者的位移提交管理。当消费者程序首次启动调用 poll 方法时,它需要向 Kafk

2020-12-25 15:29:01 458

原创 kafka多线程开发消费者实例

Kafka Java Consumer 是单线程的设计。Kafka Java Consumer 设计原理谈到 Java Consumer API,最重要的当属它的入口类 KafkaConsumer 了。我们说 KafkaConsumer 是单线程的设计,严格来说这是不准确的。因为,从 Kafka 0.10.1.0 版本开始,KafkaConsumer 就变为了双线程的设计,即用户主线程和心跳线程。所谓用户主线程,就是你启动 Consumer 应用程序 main 方法的那个线程,而新引入的心跳线程(He

2020-12-22 18:20:24 465

空空如也

空空如也

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

TA关注的人

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