自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(152)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 Java基础--Java笔记

java与javaccmd中,执行java命令与javac命令的区别:javac:是编译命令,将java源文件编译成.class字节码文件。例如:javac hello.java ,将生成hello.class文件(bin目录)java:是运行字节码文件;由java虚拟机对字节码进行解释和运行。例如:java helloJDK与JRE:JRE: Java Runt...

2018-09-05 20:07:52 170

原创 socket编程

网络编程三要素:IP、端口号、协议 每个程序在设备上的唯一标识 每个网络程序都需要绑定一个端口号,传输数据的时候除了确定发到哪台机器上,还要明确发到哪个程序。 端口号范围从0-65535 编写网络应用就需要绑定一个端口号,尽量使用1024以上的,1024以下的基本上都被系统程序占用了。 常用端口 mysql: 3306、oracle: 1521、web: 80、tomcat: 8080、QQ: 4000、feiQ: 2425...

2022-05-20 17:10:14 591

原创 nginx配置文件结构

核心配置文件的结构##代码块中的events、http、server、location、upstream等都是块配置项###规定哪些用户使用,nobody的话就是所有人#user nobody; ##Nginx worker进程个数:其数量直接影响性能。#每个worker进程都是单线程的进程,他们会调用各个模块以实现多种多样的功能。如果这些模块不会出现阻塞式的调用,那么,有多少CPU内核就应该配置多少个进程,反之,有可能出现阻塞式调用,那么,需要配置稍多一些的worker进程。.

2022-04-06 18:11:55 2177

转载 一口气说出 6种,@Transactional注解的失效场景

引言@Transactional 注解相信大家并不陌生,平时开发中很常用的一个注解,它能保证方法内多个数据库操作要么同时成功、要么同时失败。使用@Transactional注解时需要注意许多的细节,不然你会发现@Transactional总是莫名其妙的就失效了。一、事务事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种。1. 编程式事务:是指在代码中手动的管理事务的提交、回滚等操作,代码侵入性比较强,如下示例:try {

2022-04-06 10:13:52 517

原创 ssm框架整合、spring配置文件结构

一直记不清ssm框架整合具体配置文件的结构和层次关系,这不利于实际开发中排查问题,特此复习记录一下。ssm框架实际上是由Spring MVC(servlet)处理这个web工程的请求响应,负责实现 MVC 设计模式;MyBatis 负责数据持久层,处理web工程于数据库之间的连接;Spring 负责管理 Spring MVC 和MyBatis 相关对象的创建和依赖注入。1、创建maven工程,由maven来管理我们工程需要的各种jar包,可以选择webapp的模板...

2022-04-01 15:33:02 402

原创 HTTP、TCP、Socket、Servlet

OSI七层模型 7 应用层 例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP 6 表示层 例如XDR、ASN.1、SMB、AFP、NCP 5 会话层 例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets 4 传输层 例如TCP、UDP、RTP、SCTP、SPX、ATP、IL 3

2022-03-30 15:34:04 319

原创 git常用命令:

四个区域:工作区-->暂存区-->本地仓库-->远程仓库git init; 安装完git以后初始化一下,创建仓库;初始化在另一篇里面有git status; 查看当前仓库信息,被修改的文件显示红色;git add; 把文件加入暂存区;如果想把当前目录中所有文件都加入暂存区,使用"git add.",会把文件从红色变成绿色;git commmit -m <message>;提交暂存区的文件,-m是指加上后面的描述<messa...

2022-03-29 14:18:48 216

转载 MySQL索引下推(ICP)的简单理解与示例

前言索引下推(Index Condition Pushdown, 简称ICP)是MySQL 5.6 版本的新特性,它能减少回表查询次数,提升检索效率。MySQL体系结构要明白索引下推,首先要了解MySQL的体系结构:上图来自MySQL官方文档。通常把MySQL从上至下分为以下几层:MySQL服务层:包括NoSQL和SQL接口、查询解析器、优化器、缓存和Buffer等组件。 存储引擎层:各种插件式的表格存储引擎,实现事务、索引等各种存储引擎相关的特...

2022-03-23 11:07:12 446

转载 spring循环依赖及如何解决的

什么是循环依赖?假设现在有一个对象A里面有一个属性Class B,同样的Class B对象中有一个Class A 的对象属性,那么这两个对象能相互创建成功吗?可能一般的普通代码来说肯定是可以实现Aa=newA()Bb=newB()a.setB(b)b.setA(a)看过之前讲的IOC的同学应该知道Spring官方是推荐使用构造器注入的,所以如果是通过构造器注入那就会产生一个无限循环注入的问题了,如下图所示,永远出来不?Aa=newA(new...

2022-03-21 15:42:25 160

原创 http请求记录一下

只有请求方(客户端)需要写http请求,包括请求头请求体等。服务方还是正常的controller借口,只不过需要提供地址给请求方即可。浏览器其实也相当于一个httpclient。

2022-03-01 19:07:21 129

原创 线程的生命周期及一个易出错的问题

首先来看一个demo,看似很普通但运行却报错,自己看可以发现他在开启一个线程以后又在run()中启动了start(),错误原因就在此。 处于running状态的线程是无法再次进入running的。查看start()源码也不难看出,当status不等于0时,就会抛出异常,也就是说只有处于新建状态才可以调用start(),然后进入runnable。线程的生命周期分为五个:新建、就绪、运行、阻塞、销毁。新建:就是刚使用new方法,new出来的线程; ...

2022-02-22 21:05:11 180

原创 多级缓存架构体系介绍

整理自b站:【IT老齐004】为什么架构师对多级缓存架构情有独钟?1、web应用的客户端缓存主要是对html中图片、css、js、字体等静态资源进行缓存。具体:通过在浏览器设置Expires响应头,在设置的时间段内把静态资源以文件形式把图片保存在本地,减少多次请求静态资源带来的带宽损耗。这在高并发的应用中是基础而重要的设置。2、应用层的静态资源缓存上面提到的客户端缓存部分,浏览器只负责读取Expires。Expires需要在CD...

2022-01-24 15:44:56 1911

原创 mybatis知识点总结

参考JavaGuide面试突击里面的mybatis部分目录1、mybatis原理 / 核心流程2、Dao接口的工作原理是什么?Dao 接口里的方法,参数不同时能重载吗?3、Mybatis是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式?4、Mybatis 能执行⼀对⼀、⼀对多的关联查询吗?都有哪些实现方式,以及它们之间的区别。5、mybatis延迟加载怎么做的?原理是什么?6、Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么?7、My

2022-01-21 16:37:15 1068

原创 Spring知识点整理

1、IOC定义:IOC控制反转就是把原本在程序中手动创建对象的控制权交给spring,由spring容器来实现这些相互依赖的对象的创建、协调工作。IoC 容器是Spring ⽤来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。IOC初始化过程:Resource从xml配置文件中读取配置; BeanDefinition解析配置; IOC容器注册这些BeanDefin...

2022-01-19 09:05:44 909

原创 多线程知识整理

参考资料:【纯干货】Java 并发进阶常见面试题总结volatilesychronizedsychronized主要是通过获取对象锁的方式解决多个线程之间访问资源的同步性。1、synchronized关键字最主要的三种使用方式: 给代码块或者实例方法加锁: 比如 Synchronized(变量名)、Synchronized(this) 、实例方法等,说明加解锁对象为该对象。 //修饰代码块public class SynchronizedDemo { public

2022-01-10 15:40:51 447

转载 图解Java中那18 把锁

乐观锁和悲观锁 独占锁和共享锁 互斥锁和读写锁 公平锁和非公平锁 可重入锁 自旋锁 分段锁 锁升级(无锁|偏向锁|轻量级锁|重量级锁) 锁优化技术(锁粗化、锁消除) 乐观锁和悲观锁悲观锁悲观锁对应于生活中悲观的人,悲观的人总是想着事情往坏的方向发展。举个生活中的例子,假设厕所只有一个坑位了,悲观锁上厕所会第一时间把门反锁上,这样其他人上厕所只能在门外等候,这种状态就是「阻塞」了。回到代码世界中,一个共..

2022-01-10 14:25:45 132

原创 zookeeper、zk分布式锁、redis分布式锁

面试官跟你聊完了 dubbo 相关的一些问题之后,已经确认你对分布式服务框架/RPC框架基本都有一些认知。那么他可能开始要跟你聊分布式相关的其它问题了。分布式锁这个东西,做 Java 系统开发,分布式系统,可能会有一些场景会用到。最常用的分布式锁就是基于 zookeeper 来实现的。1、zookeeper 常用的使用场景:分布式协调分布式锁元数据/配置信息管理HA高可用性①分布式协调这个其实是 zookeeper 很经典的一个用法,简单来说,就好比,你...

2021-12-30 15:23:36 524 1

原创 事务相关知识、分布式事务及常见解决方案

事务的四大特性、隔离级别、并发带来的几个问题看这里1、分布式事务只要聊到你做了分布式系统,必问分布式事务,你对分布式事务一无所知的话,确实会很坑,你起码得知道有哪些方案,一般怎么来做,每个方案的优缺点是什么。分布式事务的实现主要有以下 6 种方案:XA 方案TCC 方案SAGA 方案本地消息表可靠消息最终一致性方案最大努力通知方案①两阶段提交方案/XA 方案...

2021-12-30 09:35:06 567

原创 dubbo服务暴露、引入、调用过程

dubbo基础看这里,本文参考敖丙的dubbo-扬帆起航.pdfservice:业务层,主要是我们开发的业务逻辑;config:配置信息;proxy:服务提供者/消费者都会生成一个代理类,由代理进行远程调用和返回结果;register:注册层,封装了服务注册与发现;cluster:路由层,负责具体调用的节点以及调用失败的容错;monitor:监控层,监控调用次数;protocol:远程调用层,封装rpc调用;exchange:封装响应模型;transport:网络传输

2021-12-29 14:32:26 2899

原创 Redis进阶:单线程模型、过期策略、高可用、哨兵、cluster、双写一致性、并发竞争、分布式锁

1、首先redis是单线程的,为什么redis会是单线程的呢?从redis的性能上进行考虑,单线程避免了上下文频繁切换问题,效率高; 从redis的内部结构设计原理进行考虑,redis是基于Reactor模式开发了自己的网络事件处理器: 这个处理器被称为文件事件处理器(file event handler)。而这个文件事件处理器是单线程的,所以才叫redis的单线程模型,这也决定了redis是单线程的。2、聊一聊redis的单线程模型构造部分?redis单线程模型中最为核心的就是文件事件处理器

2021-12-22 11:04:50 1103

原创 linux常用命令

ps -ef |grep java 查找java进程 kill -9 进程pid 杀死进程tail -f xx日志.log 实时查看日志 tail -100 a.txt #读取尾部100行 tail -100 a.txt | grep abc #读取尾部100行中带abc关键字的行view a.txt 查看a.txt文件 cat a.txt 短文本查看grep -C 10 “关键词” xx日志.log 查看关键词前后1......

2021-12-08 19:43:18 227

原创 Redis基础整理

常用数据类型:String:一般做一些复杂的计数功能的缓存;set name "Aa"get nameHash:单点登录hmset zhangsan name "zhangsan" age 26hget zhangsan nameList:做简单的消息队列的功能;lpush mylist aaalpush mylist bbblrange mylist 0 10set:做全局去重的功能【元素唯一(add两个相同的,会返回0),无序(add

2021-12-08 18:22:26 673

原创 synchronized四种锁状态的升级

在 Java 语言中,使用 Synchronized 是能够实现线程同步的,即加锁。并且实现的是悲观锁,在操作同步资源的时候直接先加锁。加锁可以使一段代码在同一时间只有一个线程可以访问,在增加安全性的同时,牺牲掉的是程序的执行性能,所以为了在一定程度上减少获得锁和释放锁带来的性能消耗,在 jdk6 之后便引入了“偏向锁”和“轻量级锁”,所以总共有4种锁状态,级别由低到高依次为:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态。这几个状态会随着竞争情况逐渐升级。注意:锁可以升级但不能降级。.

2021-12-08 09:23:03 323

原创 一次关于list.add(map)的坑

主要原因是对于堆栈的理解不够敏感,先上代码List list = new ArrayList();Map map = new HashMap();List<MemberError> listMamber = ctx.getParam("LIST");for(int i = 0;i<listMamber;i++){ MemberError memberError = listMamber.get(i); map.put("xx1",memberError.getX

2021-12-02 10:36:30 1710

原创 @Bean 和 @Component的区别

前言  最近研究Springboot 源码的时候发现这两个注解比较常出现,但是放眼看去这两个注解好像功能都差不多,所以专门研究了一下:注解作用@Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean。 @Bean注解告诉Spring这个方法将会返回一个对象,这个对象要注册为Spring应用上下文中的bean。通常方法体中包含了最终产生bean实例的逻辑。两者对比相同点:两者的结果都是为spring容器注册Bean.不同点:@Componen

2021-10-22 10:24:58 558 1

原创 线上服务器Tomcat配置JVM参数

环境Tomcat8.5,jdk8配置参数说明-Xms:初始堆大小-Xmx:最大堆大小-XX:NewSize:设置年轻代大小-XX:NewRatio:设置年轻代和年老代的比值-XX:SurvivorRatio:年轻代中Eden区与两个Survivor区的比值-XX:PermSize:设置持久代大小-XX:ParallelGCThreads:设置并行收集器收集...

2021-10-20 09:55:35 2403

转载 JAVA类之间方法的调用

注:调用方法——调用另一方法的方法被调用方法——被调用的方法一、静态方法调用其他方法:1. 静态方法调用非静态方法无论是否在同一类内,均需要通过对象调用//Test类package main;public class Test { public void IsSon1(){//非静态方法 System.out.println("java大爷,你成功调用了你非静态方法里的儿子1"); } public static void main(Stri...

2021-10-13 13:43:48 5771 1

原创 成员变量、局部变量、类变量

①在类中的位置不同成员变量:在类中方法外局部变量:在方法定义中或者方法声明上静态变量:在类中方法外。属于类,所以也称为为类变量②在内存中的位置不同成员变量:在堆内存(成员变量属于对象,对象进堆内存)局部变量:在栈内存(局部变量属于方法,方法进栈内存)静态变量:方法区的静态区③生命周期不同成员变量:随着对象的创建而存在,随着对象的消失而消失局部变量:随着方法的调用而存在,随着方法的调用完毕而消失静态变量:随着类的加载而加载,随着类的消失而消失④初始化值不同成

2021-09-29 19:20:28 942

原创 简化开发,提升效率

很多if(==null)之类的,JDK1.8的Optional可以优雅高效的处理也可以使用参数校验框架,直接在entity里校验两个类大多数参数相同,进行赋值的话可以使用apache提供的工具类BeanUtils.copyProperties(taskLog,task); ...

2021-09-16 16:52:42 120

转载 为什么socket编程要用到多线程

不得不佩服计算机先驱的设计:socket编程为什么需要多线程。如果只有一个ServerSocket线程,那么如下代码:public void start() throws Exception { ServerSocket serverSocket = new ServerSocket(8888); System.out.println("socket服务器启动在端口8888"); while (true) { Socket socket = serverSoc

2021-09-02 16:03:53 756

原创 servlet与@PostConstruct注解

首先要知道servlet就是一个Java接口。打开idea,ctrl + shift + n,搜索servlet,就可以看到是一个只有5个方法的interface!servlet接口定义的是一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法,其中最主要的是两个生命周期方法 init()和destroy(),还有一个处理请求的service(),也就是说,所有实现servlet接口的类,或者说,所有想要处理网络请求的类,都需要回答这三个问题:你初始化时要做什么 你销毁时要

2021-09-01 15:11:50 245

转载 Spring在代码中获取bean的几种方式

方法一:在初始化时保存ApplicationContext对象 :ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); ac.getBean("userService"); //比如:在application.xml中配置:<bean id="userService" class="com.cloud.service.impl.UserServiceImpl">&

2021-08-31 18:35:25 7249

转载 Lombok 的 @EqualsAndHashCode(callSuper = false) 的使用

这个注解的作用就是自动的给model bean实现equals方法和hashcode方法。但是,这个参数,callsuper = false 有问题吗?你在使用这个注解的时候,确定知道“为什么要重写hashcode和equals方法吗?”先看下面的测试。两个model的代码我就截图啦:父类 TV.java 和 子类 小米TV.java,使用这个注解@EqualsAndHashCode(callSuper = false)小米tv继承tv,从继承角度讲tv有的属性,小米tv也是..

2021-08-14 15:53:03 2798 4

原创 电商项目相关

1、redis存储的用户信息建议用hash结构https://blog.csdn.net/qq_34412985/article/details/86710018我们要存储一个用户信息对象数据,包含以下信息:用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储,主要有以下2种存储方式:①第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其

2021-08-12 15:44:53 113

转载 记一次线上服务cpu占用率超过100%的问题排查

关联文章:9种 OOM 常见原因及解决方案https://blog.csdn.net/ChaoticNg/article/details/119345515?spm=1001.2014.3001.5501一、出现问题在发现公司门禁服务无法开门的第一时间,去线上服务器上查看了一下进程的运行情况,具体运行如下:第一次在查看的时候发现并没有我需要的服务entranceguard进程(图片是后续截图的)二、第一时间启动服务在察觉到服务挂了之后,第一时间就是让服务重新启动,所以运.

2021-08-04 16:52:50 316

转载 9种 OOM 常见原因及解决方案

参考文章:https://zhuanlan.zhihu.com/p/79355050当 JVM 内存严重不足时,就会抛出 java.lang.OutOfMemoryError 错误。本文总结了常见的 OOM 原因及其解决方法,如下图所示。如有遗漏或错误,欢迎补充指正。1、Java heap space当堆内存(Heap Space)没有足够空间存放新创建的对象时,就会抛出java.lang.OutOfMemoryError:Javaheap space错误(根据实际生产经验,可以...

2021-08-03 11:04:22 1837

原创 synchronized与ReentrantLock

参考:https://segmentfault.com/a/1190000012203437?utm_source=tag-newest一、synchronized的三种应用方式synchronized关键字最主要有以下3种应用方式,下面分别介绍修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁 修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁①sy...

2021-07-21 15:36:36 78

转载 mysql最左匹配原则

本文参考:https://blog.csdn.net/sinat_41917109/article/details/88944290先讲讲自己的理解:索引的底层是一颗B+树,那么联合索引当然还是一颗B+树,只不过联合索引的健值数量不是一个,而是多个。构建一颗B+树只能根据一个值来构建,因此数据库依据联合索引最左的字段来构建B+树。例子:假如创建一个(a,b)的联合索引,那么它的索引树是这样的可以看到a的值是有顺序的,1,1,2,2,3,3,而b...

2021-07-19 15:49:13 241

原创 模糊匹配like %*%的优化

只给出结果,详细可以查看原文:https://cloud.tencent.com/developer/article/1751656①通过全文索引,模糊匹配优化对于SQL语句后面的条件 nickname like '%看风%' 默认情况下,CBO是不会选择走nickname索引的,该写SQL为全文索引匹配的方式:match(nickname) against('看风')。mysql>explain select * from users01 where match(nicknam.

2021-07-19 14:44:30 698

原创 蓝绿发布、灰度发布和滚动发布

应用程序升级面临最大挑战是新旧业务切换,将软件从测试的最后阶段带到生产环境,同时要保证系统不间断提供服务。长期以来,业务升级渐渐形成了几个发布策略:蓝绿发布、灰度发布和滚动发布,目的是尽可能避免因发布导致的流量丢失或服务不可用问题。一、 蓝绿发布项目逻辑上分为AB组,在项目系统时,首先把A组从负载均衡中摘除,进行新版本的部署。B组仍然继续提供服务。当A组升级完毕,负载均衡重新接入A组,再把B组从负载列表中摘除,进行新版本的部署。A组重新提供服务。最后,B组也升级完成,负载均衡

2021-07-19 11:23:16 116

中华石杉的架构笔记,Java工程师面试突击 - 已解锁可做笔记.pdf

中华石杉的架构笔记,Java工程师面试突击

2021-04-14

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

TA关注的人

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