- 博客(47)
- 收藏
- 关注
原创 bash: ./a.sh: /bin/bash^M: bad interpreter: No such file or directory的解决方法
bash: ./a.sh: /bin/bash^M: bad interpreter: No such file or directory的解决方法
2022-10-27 18:02:34 733
原创 IDEA下通过不同的配置文件访问不同的环境
在日常的开发中,时常会碰到需要访问不同的环境,比如dev、test、uat环境,需要我们在自己的IDEA中进行配置
2022-06-06 11:22:49 1016
原创 MysSQL事务隔离级别
MySQL默认的事务隔离级别是Repeatable Read,查看MySQL当前数据库的事务隔离级别命令如下:show variables like 'tx_isolation';或select @@tx_isolation;设置事务隔离级别可以如下命令:set tx_isolation='READ-UNCOMMITTED';set tx_isolation='READ-COMMITTED'; set tx_isolation='REPEATABLE-READ'; set tx_iso
2022-04-11 14:04:14 104
原创 FactoryBean、BeanFactory和ApplicationContext
什么是BeanFactoryBeanFactory定义了SpringIOC所遵守的最底层和最基本的编程规范,职责包括bean的实例化、生命周期、维护bean依赖关系。BeanFactory只是个接口,Spring容器给出了很多实现,如XmlBeanFactory、ClassPathXmlApplicationContext等都是附加了某些功能的实现什么是FactoryBeanSpring通过反射机制利用的class属性指定实现类实例化Bean,需要大量的配置信息时实例化Bean过程比较复杂。Sprin
2022-03-02 10:57:24 558
原创 Zookeeper应⽤场景
ZooKeeper是⼀个典型的发布/订阅模式的分布式数据管理与协调框架,我们可以使⽤它来进⾏分布式数据的发布与订阅。另⼀⽅⾯,通过对ZooKeeper中丰富的数据节点类型进⾏交叉使⽤,配合Watcher事件通知机制,可以⾮常⽅便地构建⼀系列分布式应⽤中都会涉及的核⼼功能,如数据发布/订阅命名服务集群管理Master选举分布式锁和分布式队列数据发布/订阅(Publish/Subscribe)数据发布/订阅系统,即所谓的配置中⼼,就是发布者将数据发布到ZooKeeper的⼀个或⼀系列节点上,
2021-12-12 22:33:14 1785
原创 Netty核心原理
Netty 是由 JBOSS 提供的一个 Java 开源框架。Netty 提供异步的、基于事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络 IO 程序。 Netty 是一个基于 NIO 的网络编程框架,使用Netty 可以帮助你快速、简单的开发出一 个网络应用,相当于简化和流程化了 NIO 的开发过程。 作为当前最流行的 NIO 框架,Netty 在互联网领域、大数据分布式计算领域、游戏行业、 通信行业等获得了广泛的应用,知名的 Elasticsearch 、Dubbo 框架内部都采用了 Ne
2021-12-05 15:34:03 209
原创 NIO模型
NIO编程具体组件NIO 有三大核心部分:Channel(通道),Buffer(缓冲区), Selector(选择器) 2. NIO是 面向缓冲区编的。数据读取到一个缓冲区中,需要时可在缓冲区中前后移动,这就增加了处理过程中的灵活性,使用它可以提供非阻塞式的高伸缩性网络Java NIO 的非阻塞模式,使一个线程从某通道发送请求或者读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也
2021-12-05 14:59:46 1560
原创 I/O模型
I/O模型分类Java 共支持 3 种网络编程模型/IO 模式:BIO(同步并阻塞)、NIO(同步非阻塞)、AIO(异步非阻塞)阻塞与非阻塞主要指的是访问IO的线程是否会阻塞(或处于等待)线程访问资源,该资源是否准备就绪的一种处理方式同步和异步主要是指的数据的请求方式同步和异步是指访问数据的一种机制BIO(同步并阻塞)Java BIO就是传统的 socket编程BIO(blocking I/O) : 同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启
2021-12-05 13:51:38 112
原创 Netty入门案例
1.导入坐标Netty 是由 JBOSS 提供的一个 Java 开源框架,所以在使用得时候首先得导入Netty的maven坐标 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.42.Final</version&g
2021-11-30 13:58:17 491
原创 ⼀致性Hash算法
Hash算法,⽐如说在安全加密领域MD5、SHA等加密算法,在数据存储和查找⽅⾯有Hash表等, 以上都应⽤到了Hash算法。为什么需要使⽤Hash?Hash算法较多的应⽤在数据存储和查找领域,最经典的就是Hash表,它的查询效率⾮常之⾼,其中的哈希算法如果设计的⽐较ok的话,那么Hash表的数据查询时间复杂度可以接近于O(1)Hash表的查询效率⾼不⾼取决于Hash算法,hash算法能够让数据平均分布,既能够节省空间⼜能提⾼查询效率。直接寻址法也是⼀种构造Hash的⽅式,只不过更简单,表达式:H
2021-11-28 22:50:05 225
原创 分布式调度问题
调度—>定时任务,分布式调度—>在分布式集群环境下定时任务这件事Elastic-job(当当⽹开源的分布式调度框架)定时任务的场景订单审核、出库订单超时⾃动取消、⽀付退款礼券同步、⽣成、发放作业物流信息推送、抓取作业、退换货处理作业数据积压监控、⽇志监控、服务可⽤性探测作业定时备份数据⾦融系统每天的定时结算数据归档、清理作业什么是分布式调度1)运⾏在分布式集群环境下的调度任务(同⼀个定时任务程序部署多份,只应该有⼀个定时任务在执⾏)2)分布式调度—>定时任务的
2021-11-28 22:14:51 165
原创 集群时钟同步问题
问题举⼀个例⼦,电商⽹站业务中,新增⼀条订单,那么势必会在订单表中增加了⼀条记录,该条记录中应该会有“下单时间”这样的字段,往往我们会在程序中获取当前系统时间插⼊到数据库或者直接从数据库服务器获取时间。那我们的订单⼦系统是集群化部署,或者我们的数据库也是分库分表的集群化部署,然⽽他们的系统时钟缺不⼀致,⽐如有⼀台服务器的时间是昨天,那么这个时候下单时间就成了昨天,那我们的数据将会混乱!集群时钟同步配置集群时钟同步思路:分布式集群中各个服务器节点都可以连接互联⽹操作⽅式:#使⽤ ntpdat
2021-11-28 21:34:56 102
原创 分布式ID解决⽅案
为什么需要分布式ID(分布式集群环境下的全局唯⼀ID)解决方案UUID(可以⽤)UUID 是指Universally Unique Identifier,翻译为中⽂是通⽤唯⼀识别码产⽣重复 UUID 并造成错误的情况⾮常低,是故⼤可不必考虑此问题。Java中得到⼀个UUID,可以使⽤java.util包提供的⽅法public class MyTest { public static void main(String[] args) { System.out.println(jav
2021-11-28 21:30:09 423
原创 Session共享问题
Session共享及Session保持或者叫做Session⼀致性原因从根本上来说是因为Http协议是⽆状态的协议。客户端和服务端在某次会话中产⽣的数据不会被保留下来,所以第⼆次请求服务端⽆法认识到你曾经来过, Http为什么要设计为⽆状态协议?早期都是静态⻚⾯⽆所谓有⽆状态,后来有动态的内容更丰富,就需要有状态,出现了两种⽤于保持Http状态的技术,那就是Cookie和Session。⽽出现上述不停让登录的问题,分析如下图:场景:重复登录时,nginx默认轮询策略当使用nginx默认的轮询
2021-11-28 16:15:10 169
原创 生产者消费者模型
生产者消费者模型设计生产者需要安全地将数据交给消费者当生产者和消费者在不同的线程运行时,两者的处理速度差异会有问题。生产者消费者模型用于消除线程间处理速度的差异带来的问题在该模式中,生产者和消费者会有多个,当生产者和消费者只有一个时,成为Pipe(管道)模式线程协调和互斥问题(保护哪些数据),线程的协调需要考虑“放在中间的东西”,线程的互斥需要考虑保护哪些东西,为了让线程协调进行,必须进行互斥处理,以防止更多的内容被破坏,线程的互斥处理时为了线程的协调运行而执行的为什么要有Channel?C
2021-11-21 22:56:22 1108
原创 阻塞队列及其实现方式
特点阻塞队列继承自队列,和JDK中的Queue接口兼容同时在其基础上添加了阻塞功能入队操作提供了add(),offer(),put()方法,其中add()和offe()方法是非阻塞的,put()方法是阻塞的,通过抛出的异常便可以分辨出来add()方法在队列满时会抛出异常,而offer方法则是返回失败出队提供了remove()、take()和poll()方法,其中remove方法是非阻塞,剩余两个则是阻塞的BlockingQueue实现类主要体现在存储结构或对元素操作的不同,但是对于tak.
2021-11-21 22:26:34 1208
原创 Tomcat 核⼼流程源码剖析
Tomcat中的各容器组件都会涉及创建、销毁等,因此设计了⽣命周期接⼝Lifecycle进⾏统⼀规范,各容器组件实现该接⼝。Lifecycle⽣命周期接⼝继承体系示意核⼼流程源码剖析源码追踪部分我们关注两个流程:Tomcat启动流程和Tomcat请求处理流程1. Tomcat启动流程请求处理流程分析请求处理流程示意图通过endpoint通信端点,接收socket请求,调用processor进行处理processor对请求进行处理,封装成requestrequest并不能直接
2021-11-21 21:17:30 183
原创 Tomcat 系统总体架构
1.Tomcat 请求处理⼤致过程Tomcat是⼀个Http服务器(能够接收并且处理http请求,所以tomcat是⼀个http服务器)HTTP 服务器接收到请求之后把请求交给Servlet容器来处理,Servlet 容器通过Servlet接⼝调⽤业务类。Servlet接⼝和Servlet容器这⼀整套内容叫作Servlet规范。注意:Tomcat既按照Servlet规范的要求去实现了Servlet容器,同时它也具有HTTP服务器的功能。Tomcat的两个重要身份1)http服务器2)Tomc
2021-11-21 21:05:25 224
原创 SpringBoot相关内容
SpringBoot常用属性注入包括@Value属性值注入、@ConfigurationProperties批量注入、第三方配置、松散绑定SpringBoot全局配置文件具体包括全局配置文件的4种形式及其优先级SpringBoot热部署在开发项目过程中,当修改了某些代码后需要本地验证时,需要重启本地服务进行验证,启动这个项目,如果项目庞大的话还是需要较长时间的,spring开发团队为我们带来了一个插件:spring-bootdevtools,很好的解决了本地验证缓慢的问题。使用自定义序列化方
2021-11-15 22:48:02 491
原创 SpringBoot常用属性注入
使用Spring Boot全局配置文件设置属性时:如果配置属性是Spring Boot已有属性,例如服务端口server.port,那么Spring Boot内部会自动扫描并读取这些配置文件中的属性值并覆盖默认属性。如果配置的属性是用户自定义属性,例如自定义的Person实体类属性,还必须在程序中注入这些配置属性方可生效。属性注入常用注解@Configuration:声明一个类作为配置类@Bean:声明在方法上,将方法的返回值加入Bean容器@Value:属性注入@Configurat
2021-11-14 22:04:27 94
原创 SpringBoot全局配置文件
全局配置文件概述及优先级Spring Boot使用一个application.properties或者application.yaml的文件作为全局配置文件可以从ConfigFileApplicationListener这类便可看出,其中DEFAULT_SEARCH_LOCATIONS属性设置了加载的目录:–file:./config/–file:./ –classpath:/config/ –classpath:/翻译成语言如下( 按照优先级从高到低的顺序 ):先去项目根目录找co
2021-11-14 20:25:24 614
原创 SpringBoot热部署
在开发项目过程中,当修改了某些代码后需要本地验证时,需要重启本地服务进行验证,启动这个项目,如果项目庞大的话还是需要较长时间的,spring开发团队为我们带来了一个插件:spring-bootdevtools,很好的解决了本地验证缓慢的问题。热部署的使用添加spring-boot-devtools热部署依赖启动器在Spring Boot项目进行热部署测试之前,需要先在项目的pom.xml文件中添加spring-boot-devtools热部署依赖启动器:<!-- 引入热部署依赖 --&
2021-11-14 19:56:32 103
原创 使用自定义序列化方式,实现Redis存储json格式数据
jdk自带的序列化方式,我们无法直接看到数据,可以使用使用自定义序列化方式,来实现Redis存储json格式数据@Configurationpublic class RedisConfig{@Bean public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { // 分别创建String和JSON格式序列化对象,对缓存数据key和value进行转换 RedisSerializer&l
2021-11-12 17:47:06 2323
原创 手写MVC框架
上篇文章中,大致讲了springMVC的执行流程,我们可以模仿手写自己的MVC框架1. 注解开发模仿springmvc,我们需要进行相应的注解开发,具体包括@Controller,@Service,@RequestMapping,@AutoWiredLagouControllerimport java.lang.annotation.*;@Documented@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)pub
2021-10-19 15:16:17 120
原创 Spring Web MVC ⼯作流程及九大组件
需求:前端浏览器请求url:http://localhost:8080/demo/handle01,前端⻚⾯显示后台服务器的时间Spring MVC 是什么?SpringMVC 全名叫 Spring Web MVC,是⼀种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级Web 框架,属于 SpringFrameWork 的后续产品。SpringMVC 已经成为 ⽬前最主流的 MVC 框架 之⼀,并且 随着 Spring3.0 的发布,全⾯超越 Struts2,成为最优秀的 MVC 框架
2021-10-18 18:18:41 191
原创 自定义持久层框架的实现
1.1自定义框架设计使用端(test端):提供核心配置文件:sqlMapConfig.xml : 存放数据源信息,引入mapper.xmlMapper.xml : sql语句的配置文件信息框架端:1.读取配置文件读取完成以后以流的形式存在,我们不能将读取到的配置信息以流的形式存放在内存中,不好操作,可以创建javaBean来存储(1)Configuration : 存放数据库基本信息、Map<唯一标识,Mapper> 唯一标识:namespace + “.” +id(2)M
2021-09-05 16:17:14 132
原创 Redis安装
1. 下载redis:http://www.redis.net.cn/图形工具:https://redisdesktop.com/download2. 安装上传tar.gz包,并解压tar -zxvf redis-5.0.4.tar.gz安装gcc(必须有网络)yum -y install gcc忘记是否安装过,可以使用 gcc -v 命令查看gcc版本,如果没有安装过,会提示命令不存在进入redis目录,进行编译make编译之后,开始安装make inst
2021-08-19 17:52:59 53
原创 Zookeeper分布式安装部署
集群思路:先搞定一台服务器,再克隆出两台,形成集群!1. 安装zookeeper具体可以查看上篇文章介绍zookeeper本地安装2. 配置服务器编号在/opt/zookeeper/zkData创建myid文件vim myid在文件中添加与server对应的编号:1其余两台服务器分别对应2和33. 配置zoo.cfg文件打开zoo.cfg文件,增加如下配置#######################cluster########################## ser
2021-08-19 17:39:08 153
原创 Zookeeper本地安装
本地模式安装1.安装前准备安装jdk拷贝apache-zookeeper-3.6.0-bin.tar.gz到opt目录(镜像库地址)解压安装包(opt目录下)tar -zxvf apache-zookeeper-3.6.0-bin.tar.gz重命名mv apache-zookeeper-3.6.0-bin zookeeper2. 配置修改在/opt/zookeeper/这个目录上创建zkData和zkLog目录mkdir zkData mkdir zkLog进入
2021-08-19 17:27:42 140
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人