自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 批量更新SQL

注意一定添加open,close等标签。

2023-05-31 20:16:37 474

原创 Spring Aop 动态获取参数值替换注解值

Service@MyAnnotation(key = "'param id is ' + #id")//添加自定义aop注解 #id为el表达式,需要和被替换的参数名称相同System.out.println("方法执行中");//切面类必须由容器管理@Component//定义为切面类@Aspect//定义切入点//获取方法签名//获取切入方法的对象//获取方法上的Aop注解。

2023-03-24 11:05:11 796

原创 多数据源切换方案

方案2 :基础的配置方案:https://blog.csdn.net/xue_xiaofei/article/details/109779714?方案1:需要注意的坑,关于多数据源事务回滚的:https://baijiahao.baidu.com/s?方案3:参考:https://www.cnblogs.com/daikainan/p/14431534.html。

2023-03-22 15:35:49 197

原创 【接口优化】

java接口优化

2022-12-27 10:20:24 120

原创 空对象模型(优雅的判空)

优雅判空,避免if{} else{} 多层嵌套

2022-09-03 20:19:51 141

原创 Json字符串和Object对象互相转换(还有注意点)

Json

2022-08-21 20:41:53 1675

原创 【git】git合并多个commit

git合成多个commit

2022-08-11 19:11:23 209

原创 rocketmq安装

rocketmq

2022-06-06 19:42:49 77

原创 通过ssh下载项目

1.查看是否有ssh keyls -al ~/.sshdrwxr-xr-x 1 zhangzhiwen 197121 0 9月 18 15:11 ./drwxr-xr-x 1 zhangzhiwen 197121 0 11月 20 22:59 ../-rw-r--r-- 1 zhangzhiwen 197121 1823 2月 26 2019 id_rsa-rw-r--r-- 1 zhangzhiwen 197121 401 2月 26 2019 id_rsa.pub-r

2022-02-25 14:52:16 708

原创 DDD(领域驱动设计)

1. 设计思想复用(复用通过封装变化点实现)封装变化点(个人理解,将一些业务逻辑抽离出来,又封装了一层,这样子只要整体大的业务逻辑不变,代码不变。利于快速迭代)2. 名词解释贫血模型:就是pojo,只有get和set方法,里面只有属性充血模型:学生pojo除了get,set,还有selectClass()选课等其他功能领:商品领域,用户领域,原则上一个域不要被另一个域的变化所影响(一块相对独立的业务空间)领域服务:但是商品和用户肯定有业务逻辑交流(用户购物等业务逻辑),就用领域服务来支持

2022-02-25 14:47:56 462

原创 配置:跨域配置

@Slf4j@Configurationpublic class GlobalCorsConfig { @Bean public CorsFilter corsFilter() { //log.info(this.allowedOrigin); //1.添加CORS配置信息 CorsConfiguration config = new CorsConfiguration(); //1) 允许的域,不要写*,否则cookie就

2021-12-28 21:51:58 661

原创 Swagger配置

1.在pom.xml添加依赖<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency><!-- 导入swag

2021-12-22 17:25:06 148

原创 mysql时间updateTime

CURRENT_TIMESTAMP

2021-11-30 10:54:27 974

原创 面试篇:nginx做负载均衡

配置反向服务代理器:什么是反向服务呢? 首先说下正向服务, 例如爬虫程序, 我们主动出击去获取资源. 而反向服务我们是等待用户来访问. 区别在于主动和被动.配置文件Nginx/conf/nginx.conf配置Nginx转发条件重启好Nginx后, 我们再来访问192.168.200.129 这台机器, 我么可以发现其实访问的是129.168.200.130这台机器.负债均衡的配置, 配置转发的权重: (另一台CentOS02 依然按照CentOS01的配置)我们在这里配置了两台转发机.

2021-08-27 09:33:19 305

原创 获取后端接口请求中的参数(@PathVariable,@RequestParam,@RequestBody区别,使用postman请求)

详情

2021-08-26 14:37:09 3274 5

原创 MySql:锁

1. 意向锁(Intention Locks)InnoDB支持多粒度锁(multiple granularity locking),它允许行级锁与表级锁共存,实际应用中,InnoDB使用的是意向锁。意向锁是指: 未来的某个时刻,事务可能要加共享/排它锁了,先提前声明一个意向。意向锁有这样一些特点:(1)首先,意向锁,是一个表级别的锁(table-level locking);(2)意向锁分为:意向共享锁(intention shared lock, IS),它预示着,事务有意向对表中的某些行.

2021-08-24 15:55:31 114

原创 面试篇:Spring的@Autowired 与@Resource

@Autowired按byType自动注入,@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。@Autowired@Aut.

2021-08-24 14:08:36 112

原创 MySql篇:性能

1. 大表数据查询,怎么优化优化shema、sql语句+索引;第二加缓存,memcached, redis;主从复制,读写分离;垂直拆分,根据你模块的耦合度,将一个大的系统分为多个小的系统,也就是分布式系统;水平切分,针对数据量大的表,这一步最麻烦,最能考验技术水平,要选择一个合理的sharding key, 为了有好的查询效率,表结构也要改动,做一定的冗余,应用也要改,sql中尽量带sharding key,将数据定位到限定的表上去查,而不是扫描全部的表;2. 超大分页怎么处理?数据库层

2021-08-23 16:20:11 106

原创 代码技巧:Pattern.compile函数提取字符串中指定的字符(正则使用)

最近有个需求是要提取一段字符串中特定范围内的内容,查找资料后,使用的是Java中的Pattern.compile函数来实现对指定字符串的截取。记录下来查找的知识和应用,方便以后的查看。Pattern.compile函数语法// Pattern.compile函数语法Pattern Pattern.compile(String regex, int flag)知识学习Pattern.compile函数中两个参数regex 表示定义的规则flag 表示设置的参数类型,主要包含以下几种情况:(

2021-08-18 10:45:04 5750

原创 @JsonFormat与@DateTimeFormat注解的使用

1.注解@JsonFormat <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.8.8</version> </dependency>

2021-08-16 17:07:12 305

原创 项目:mongoDB时区晚8小时

1. 产生原因MongoDB默认的是UTC时间(协调世界时间),刚好比当前区时晚了8个小时;在mongoDB数据库中,时间的保存是ISODate类型,orm关系映射为java.util.Date类型,其保存的时间与我们会有8小时的区别(保存的时间比我们早了8个小时)查询语句按我们的相差时间查询,返回的数据确实是我们需要的,即使数据库中我们看到的iso date相差8个小时。其实java 驱动帮我们做了转换。2. 解决方法@JsonFormat(pattern = "yyyy-MM-dd", t

2021-08-16 17:01:18 1515

原创 算法篇:全排列

class Solution { List<List<Integer>> res=new ArrayList<>(); public List<List<Integer>> permute(int[] nums) { List<Integer> arr=new ArrayList<Integer>(); back(nums,arr); return res;

2021-08-13 16:06:08 64

原创 算法篇:二叉树的前中后续迭代

中序遍历public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res=new ArrayList<>(); Stack<TreeNode> stack=new Stack<>(); TreeNode node=root; while(!stack.isEmpty()||node!=null){ while(node!=null

2021-08-12 14:59:07 68

原创 面试篇:redis为什么单线程

1. 为什么需要多线程首先,现在的CPU一般都是由多个核心组成,每个核心可以认为是一个独立的处理器,它们能够并行地处理任务。所以,如果我们的CPU是多核的,但是程序是单线程的,那么执行程序时,这个线程在某一个时刻只能在一个核心上运行,而其它的核心却是空闲的(如果没有其他程序的话)。所以,为了提高CPU的使用率,我们可以创建多个线程,每个线程处理任务的一部分(每个部分互不依赖),而每个核心执行一个线程,此时CPU的使用率将提高,程序的运行速度自然也就加快了。除此之外,假设我们的程序有A、B、C三个

2021-08-09 16:56:45 1118

原创 面试篇:String

底层原理分析在上篇文章《面试题系列第1篇:说说==和equals的区别?你的回答可能是错误的》中我们已经提到,String的两种初始化形式是有本质区别的。String str1 = "abc"; // 在常量池中 String str2 = new String("abc"); // 在堆上当直接赋值时,字符串“abc”会被存储在常量池中,只有1份,此时的赋值操作等于是创建0个或1个对象。如果常量池中已经存在了“abc”,那么不会再创建对象,直接将引用赋值给str1;如果常量池中没有“abc”

2021-08-05 10:51:34 59

原创 MySql篇:sql技巧

1. SQL的执行顺序from ->on -> join -> where ->group by -> select -> having ->order by -> distinct ->limit  on: 笛卡儿积前的筛选join:表链接,遵循的算法是笛卡儿积where:形成临时表group by:临时表切分成若干临时表select:(1)当没有GROUP BY时,SELECT 会根据后面的字段名称对内存中的一张临时表整列读取。(2

2021-08-05 10:22:25 120

原创 mongodb查询非空数组的几种方法

一、$elemMatch和$nedb.Collection.find({array:{$elemMatch:{$ne:null}}})二、$wheredb.Collection.find({$where:"this.array.length>0"})三、$not和$sizedb.Collection.find({array: {$not: {$size: 0}}})四、'.'路径和$existsdb.Collection.find({{'array.0': {$exists

2021-08-03 09:57:11 973

原创 线程间通讯

核心观点:CountdownLatch阻塞主线程,等所有子线程完结了再继续下去。Syslicbarrier阻塞一组线程,直至某个状态之后再全部同时执行,并且所有线程都被释放后,还能通过reset来重用。CountDownLatchCyclicBarrier减计数方式加计数方式计算为0时释放所有等待的线程计数达到指定值时释放所有等待线程计算为 0 时,无法重置计数达到指定值时,计数置为0重新开始调用 countDown() 方法计数减一,调用 await(

2021-07-29 23:26:37 83

原创 实战篇-ThreadLocal

ThreadLocal 提供了线程本地的实例。它与普通变量的区别在于,每个使用该变量的线程都会初始化一个完全独立的实例副本。ThreadLocal 变量通常被private static修饰。当一个线程结束时,它所使用的所有 ThreadLocal 相对的实例副本都可被回收。ThreadLocal实现原理其实是 ThreadLocal 内部维护了一个 Map ,这个 Map 不是直接使用的 HashMap ,而是 ThreadLocal 实现的一个叫做 ThreadLocalMap 的静态内部类。.

2021-07-29 16:06:12 202

原创 源码篇-AQS

AQS 总结AQS 在内部为此了一个变量 state,用于记录锁状态,线程通过 CAS 修改 state即是加锁解锁过程。AQS 内存维护了一条双向链表,即同步队列,等待锁的线程被封装为 Node 节点连成链表,通过 LockSuppor 工具类的 park()和 unpark()方法切换等待状态。AQS 提供了独占和非独占两种锁实现方式,分别提供了 acquire()/release()和acquireShared()/releaseShared()两套加锁解锁方式; 同时,基于 sta

2021-07-29 11:05:53 81

原创 java基础篇-序列化

1. 为什么要有序列化在分布式环境下,无论是何种数据,都会以二进制序列的形式在网络上传输。序列化是一种将对象以一连串的字节描述的过程,2. 序列化概念序列化可以将对象的状态写在流里进行网络传输,或保存在文件、数据库里,并在需要时把该流读取出来重新构造一个相同的对象。(Java对象序列化的意思就是将对象的状态转化成字节流,以后可以通过这些值再生成相同状态的对象。对象序列化是对象持久化的一种实现方法)3. 反序列化通俗的讲,就是将流转为对象。4. 为什么需要自定义序列号这个序列化ID起着关键的作用

2021-07-29 10:50:18 136

原创 @responseBody+response.getOutputStream()+response.getWriter()

1. @responseBody注解@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML(在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中)在springmvc中当返回值是String时,如果不加@ResponseBody的话,返回的字符串就会找这个String对应的页面,如果找不到会报404错误。如果加上@ResponseBody注解的话,返回的就

2021-07-28 18:16:33 2470

原创 面试篇-线程池

线程池

2021-07-27 14:37:25 50

原创 面试篇-sql

sql

2021-07-25 16:04:05 57

原创 面试篇-Spring的bean的生命周期

Spring对Bean进行实例化(相当于程序中的new Xx())Spring将值和Bean的引用注入进Bean对应的属性中如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()方法(实现BeanNameAware清主要是为了通过Bean的引用来获得Bean的ID,一般业务中是很少有用到Bean的ID的)如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanDactory(BeanFactory bf)方法并..

2021-07-25 15:53:41 164

原创 技术篇-接收前端参数

一: 获取参数SpringBoot提供的获取参数注解包括:@PathVariable,@RequestParam,@RequestBody,三者的区别如下表:二:后端接口加@RequestParamPOST请求@RequestParam:① 用来处理(前端)Content-Type: 为 application/x-www-form-urlencoded或者form-data编码的内容② 该注解有两个属性: value、required; value用来指定要传入值的id名称,required

2021-07-20 14:41:22 1511

原创 技术篇-分页查询

1. boot的分页查询使用PageHelper的starter在pom.xml中引入依赖<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.10</version></dependency&

2021-07-19 16:23:01 106

原创 提取字符串中的数字并加一

public static String custIdIncr(String custID){ String abc = custID.replaceAll("[^(a-zA-Z)]", "");//取出字母 String num = custID.replaceAll("[^(0-9)]", "");//取出数字 int length = num.length(); StringBuffer lengthNum = new StringBuf

2021-07-12 12:43:57 479

原创 mysql篇-事务的隔离级别

什么是事务的隔离性?两个人同时在一个画本上画画,过程中你一笔我一笔,那么最后最后画出来的一定是一个四不像,多个事务同时操作一个数据也会和上面的情况类似,所以为了让不同的事务之间相互不存在干扰,就需要对事务的操作进行隔离,事务的隔离性也就是将操作同一个数据的事务相互分离,让操作之间分开有序的执行。如果不对事务进行隔离会有哪些问题?. 在数据库中,如果多个事务可以同时操作一个数据,那么就会产生脏读、重复读、幻读的问题。脏读出现原因:一个事务在对一条数据进行修改的过程中,其它的事务可以对数据进

2021-07-12 09:46:23 121

原创 面试篇SQL-分页查询之延迟关联

优化前:select * from t_trade_orderwhere create_time between '2019-10-17' and '2019-10-25'limit 1000000, 10;(create_time建表时被设置为普通索引)在create_time索引树上找到create_time=‘2019-10-17’的记录,取得其id。再到主索引树查到对于id的记录如数量小于10,更新时间,循环步骤1、2在create_time索引树取下一个值cre.

2021-07-08 17:00:26 458

空空如也

空空如也

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

TA关注的人

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