
java永无止境
介绍从零学习java的全部历程和一些工作经历分享
当我谈编程时我谈些什么
说给自己听,写给别人看,一起成长。
展开
-
mybatis默认一级缓存开启吗-spring封装后默认统一关闭
mybatis默认一级缓存开启吗-spring封装后默认统一关闭原创 2023-02-09 15:19:00 · 849 阅读 · 1 评论 -
MySQL 中的 INSERT 是怎么加锁的?
程序员的成长之路互联网/程序员/技术/资料共享关注阅读本文大概需要 12分钟。来自:https://www.aneasystone.com/archives/2018/06/insert-locks-via-mysql-source-code.html看到热心网友在评论中提出的一个问题,我还是彻底被问蒙了。他的问题是这样的:加了插入意向锁后,插入数据之前,此时执行了 select...lock in share mode 语句(没有取到待插入的值),然后插入了数据,下一...原创 2022-05-19 12:29:50 · 2580 阅读 · 1 评论 -
BeanPostProcessor
BeanPostProcessor,针对所有Spring上下文中所有的bean,可以在配置文档applicationContext.xml中配置一个BeanPostProcessor,然后对所有的bean进行一个初始化之前和之后的代理。BeanPostProcessor接口中有两个方法: postProcessBeforeInitialization和postProcessAfterInitialization。 postProcessBeforeInitialization方法在bean初始化之前执行,原创 2022-05-18 20:42:25 · 312 阅读 · 0 评论 -
Spring加载bean的顺序
如果是类加载到Spring容器的顺序,默认是按照类名升序的顺序加载。方法,如果没有指定顺序或者优先级规定,@Bean按照代码的顺序来进行加载;如果在某个Bean加载过程中调用还没来得及加载的Bean的方法,则(还没来得及加载的Bean)会懒加载此Bean。@Beanpublic String fun2() { System.out.println("fun2"); Api api1 = fun1(); System.out.println(api1.hashCode())原创 2022-05-16 10:28:37 · 4139 阅读 · 0 评论 -
java静态代码块和不写static的非静态代码块区别
1、静态代码块是类的代码,非静态代码块是对象的代码。2、静态代码块是static修饰的代码块,反之没有用static修饰的代码块为非静态代码块。3、静态代码块只在第一次new时执行一次,之后不再执行。而非静态代码块每new一次就执行一次。静态代码块 > 非静态代码块class Demo { static { System.out.print(" 静态代码块 "); } { System.out.print...原创 2022-03-01 14:52:54 · 816 阅读 · 1 评论 -
如何衡量架构合理性
衡量架构的合理性架构为业务服务,没有最优的架构,只有最合适的架构,架构始终以高效,稳定,安全为目标来衡量其合理性。架构设计本质就是解决软件复杂度带来的问题,软件复杂度表现形式有很多种,比如业务复杂度、性能复杂度、可用性复杂度、可扩展性复杂度、安全复杂度等;任何一个系统都有它侧重解决的复杂度问题,理解每个架构方案背后需要真正解决的是软件复杂度的什么问题,是评判一个架构设计目的性的关键因素,这也是做架构设计中常提的系统约束条件。业务复杂度体现的是如何来拆解业务,找到合适的软件元素和组件,按合适结构进行原创 2022-02-08 21:28:08 · 10087 阅读 · 0 评论 -
终于搞清楚了:java8的接口为什么新增default,为Lambda服务
终于搞清楚了:java8的接口为什么新增default,为了Lambda服务要用lambda表达式,必须要求接口,有且只有一个抽象方法,就是函数式接口,也可以加上注解来约束,@FunctionalInterface,多写或者少写会报错,Object的方法如equals等特殊不计算。@FunctionalInterfaceinterface HelloLa2{ int sayHello(int a); }//只有一个参数的情况,()也可以省略class cli.原创 2022-01-28 17:25:36 · 825 阅读 · 0 评论 -
终于搞清楚了,Java、Spring异常回滚和@Transactional加不加rollbackFor = Exception.class
先说结论:1、加上没有错。@Transactional(rollbackFor = Exception.class)2、有spring的情况下SQLException,被包装为RuntimeException。org.springframework.dao.DuplicateKeyException来自spring-tx-4.0.0.RELEASE.jar 反编译可见: java.lang.Object ...原创 2022-01-21 15:54:33 · 3041 阅读 · 0 评论 -
UML类图基础
1.类图基础属性类图的表示-表示private #表示protected ~表示default,也就是包权限 _下划线表示static 斜体表示抽象 2.类与类之间关系在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)类与类之间的关系2.1泛化介绍:..原创 2022-01-12 13:14:12 · 190 阅读 · 0 评论 -
springboot配置属性读取
利用@Value注解将对应的属性注入到field上 @Value("${com.Code}") private String comCode;原创 2022-01-10 15:12:00 · 182 阅读 · 0 评论 -
zookeeper一致性协议
zookeeper实现数据一致性的核心是ZAB协议(Zookeeper原子消息广播协议)。该协议需要做到以下几点:(1)集群在半数以下节点宕机的情况下,能正常对外提供服务;(2)客户端的写请求全部转交给leader来处理,leader需确保写变更能实时同步给所有follower及observer;(3)leader宕机或整个集群重启时,需要确保那些已经在leader服务器上提交的事务最终被所有服务器都提交,确保丢弃那些只在leader服务器上被提出的事务,并保证集群能快速恢复到故障前的状态。原创 2022-01-07 15:36:28 · 637 阅读 · 0 评论 -
为什么static和final一起使用
示例:private final static SingleTon instance=new SingleTon();static和final的意义是不同的static修饰的时候代表对象是静态的,而final修饰的时候代表对象只能赋值一次,他们连用的时候是因为定义的那个对象既要它是静态的,也要求它的值不能再被修改。...原创 2022-01-06 20:51:20 · 1197 阅读 · 0 评论 -
Spring Ioc核心代码
1、反射public ClassPathXmlBeanFactory() throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { String u="com.spring.UserDaoImpl"; Object uo=Class.forName(u).newInstance();原创 2022-01-06 16:38:28 · 315 阅读 · 0 评论 -
Guava cache 机制及源码分析
Guava是Google开源出来的Java常用工具集库,包括集合,缓存,并发,字符串,I/O操作等在Java开发过程中经常需要去实现的工具类。Guava Cache 介绍在介绍Guava Cache使用之前,先需要引入下官方推荐的使用场景: * 愿意消耗一些内存空间来提升速度; * 能够预计某些key会被查询一次以上; * 缓存中存放的数据总量不会超出内存容量(`Guava Cache`是单个应用运行时的本地缓存)。 不管性能,还是可用性来说,Guava...原创 2021-12-24 14:03:52 · 240 阅读 · 0 评论 -
json解析小冒号:出错
Json 字符串中有一个 value 中含有冒号(:)特殊字符,需要转义:解决方法:1、使用大冒号替换:2、转义后//:写入3、替换其他符号原创 2021-12-23 09:53:03 · 2008 阅读 · 0 评论 -
ToBToCToM不同业务场景的技术调整
ToBToCToM不同业务场景的技术调整 详细方向 核心技术关注 开发细节 ToC 高并发、高性能、高可用、强扩展 缓存、异步、读写分离、多线程 ToB 数据一致性、业务复杂度 监控、对比、修复 ToM 模型通用、流程复用 可复用、可通用、流程统一 ..原创 2021-12-22 14:41:48 · 924 阅读 · 0 评论 -
为什么事务要单独一个类,避免因为同类中调用不走代理对象
为什么事务要单独一个类,避免因为同类中调用不走代理对象原创 2021-12-20 09:49:57 · 335 阅读 · 0 评论 -
Optional.of()和Optional.ofNullable()区别
Optional.of()或者Optional.ofNullable():创建Optional对象,差别在于of不允许参数是null,而ofNullable则无限制。// 参数不能是null,是null抛异常Optional<Integer> optional1 = Optional.of(1);// 参数可以是nullOptional<Integer> optional2 = Optional.ofNullable(null);// 参数可以是非nullOpt..原创 2021-12-15 12:44:26 · 14645 阅读 · 1 评论 -
解决JSON parse error: Unrecognized field xxx
出现原因:前后端参数不一致,通常前端多传了参数。可以在接收对象上设置@JsonIgnoreProperties(ignoreUnknown = true)原创 2021-12-08 14:57:17 · 9996 阅读 · 0 评论 -
【终于搞清楚了】spring xml头详解
<?xml version="1.0" encoding="UTF-8"?>1、xmlns是XMLNameSpace的缩写,声明xml文件默认的命名空间,类似package的概念。<beans xmlns="http://www.springframework.org/schema/beans"2、xsi是指xml文件遵守xml规范,xml schema instance,xml模式实例,是指具体用到的schema资源文件里定义的元素所准守的规范。即/spring-beans-2原创 2021-12-03 17:34:10 · 487 阅读 · 0 评论 -
Spring AOP嵌套调用的问题 (同一类方法内调用切面切不到)
在自己的 Service 类中使用 this 关键字嵌套调用同类中的其他方法时,由于 this 关键字引用的并不是该 Service Bean 对象的代理对象,而是其本身,故 Spring AOP 是不能拦截到这些被嵌套调用的方法的。现在以调试方式运行这个应用,你会发现在 doSomething1() 中调用 doSomething2() 方法的时候并未去执行CustomerServiceProxy 类的 doBefore()、doAfter() 方法。再来看看这句关键代码:doSomething2()原创 2021-11-18 16:30:46 · 656 阅读 · 0 评论 -
java socket编程中backlog的含义
能够成功创建客户端套接字的个数,刚好就是创建ServerSocket时候指定的backlog。import java.net.ServerSocket;public class Server { public static void main(String[] args) throws Exception{ // port:8888,backlog:5 ServerSocket server = new ServerSocket(888...原创 2021-11-17 20:43:56 · 658 阅读 · 0 评论 -
idea文件上横线
看看类定义前面是不是有@Deprecated注解,意思是这个类已经废弃原创 2021-11-17 14:54:00 · 664 阅读 · 0 评论 -
同步队列SynchronousQueue使用场景介绍
同步队列:SynchronousQueue,零容量的SynchronousQueue,一进一出,避免队列里缓冲数据,这样在系统异常关闭时,就能排除因为阻塞队列丢消息的可能SynchronousQueue没有容量,是无缓冲等待队列,是一个不存储元素的阻塞队列。使用SynchronousQueue阻塞队列一般要求maximumPoolSizes为无界(Integer.MAX_VALUE),避免线程拒绝执行操作。风险:机器线程耗尽,导致宕机...原创 2021-11-15 13:13:48 · 3463 阅读 · 1 评论 -
数据库中的Schema是什么?XML的Schema是什么
在数据库中,schema(发音 “skee-muh” 或者“skee-mah”,中文叫模式)是数据库的组织和结构。schemas和schemata都可以作为复数形式。模式中包含了schema对象,可以是表(table)、列(column)、数据类型(data type)、视图(view)、存储过程(stored procedures)、关系(relationships)、主键(primary key)、外键(foreign key)等。数据库模式可以用一个可视化的图来表示,它显示了数据库对象及其相.原创 2021-11-15 11:53:10 · 1008 阅读 · 0 评论 -
thrift 注解与idl对比
thrift作为跨语言的RPC框架,在公司内部得到大量使用,而thrift支持注解格式与idl生成JavaBean两种方式。经过理解多wiki后,总结两者的特点如下。对比:注解格式的优势:1. IDE代码简洁;2. java间相互调用时,JavaBean是可以直接共享的;3. 支持java的Deprecated语法。idl格式的优势:1. 支持跨语言;2. thrift不支持泛型、重载,在idl可以做更好的限制,如果用注解,thrift新手可能会使用泛型导致问题。此外,两者不宜混用,否则容易造原创 2021-11-10 18:37:32 · 742 阅读 · 0 评论 -
Mysql的自增AUTO_INCREMENT传null
如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号。编号从1开始,并1为基数递增。 当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值。原创 2021-11-10 12:15:56 · 1209 阅读 · 0 评论 -
定时任务的三种方式
1、定时任务扫描2、延时队列3、延时任务原创 2021-11-09 21:12:10 · 170 阅读 · 0 评论 -
IDEA批量移动代码快捷键
左右移动:【Tab】:选中代码右移动【Shift】+【Tab】:选中代码左移动上下移动:【Alt】+【Shift】+【↑,↓】:选中代码上下移动原创 2021-11-05 20:45:27 · 1180 阅读 · 0 评论 -
runable怎么获取线程名字getname和setname
public static void main(String[] args) throws InterruptedException { Runnable same=new CheckSame(); Thread t=new Thread(same,"ssss"); t.getName(); t.start(); } @Override public void run() { getName(...原创 2021-10-28 20:46:32 · 636 阅读 · 0 评论 -
终于搞清楚了:java中wait和sleep的区别
都是睡眠wait是Object类的方法,会释放锁。sleep是Thread.sleep的方法,不会释放锁。当线程执行wait()方法时候,会释放当前的synchronized锁住的对象,然后让出CPU,进入等待状态。对锁的 处理机制不同。由于sleep()方法的主要作用是让线程暂停执行一段时间,时间一到则自动恢复,不涉及线程间的通信,因此,调用sleep()方法并不会释放锁。而wait()方法则不同,当调用wait()方法后,线程会释放掉他所占用的锁,从而使线程所在对象中的其他synchro原创 2021-10-28 19:27:28 · 262 阅读 · 0 评论 -
mybatis中对于使用like来进行模糊查询的几种方式:
mybatis中对于使用like来进行模糊查询的几种方式:(1)使用${...}注意:由于$是参数直接注入的,导致这种写法,大括号里面不能注明jdbcType,不然会报错org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'VARCHAR' in '原创 2021-10-25 21:25:44 · 104 阅读 · 0 评论 -
left join on后面 加条件 与 where后面加条件的区别
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。在使用left jion时,on和where条件的区别如下:1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 nu...原创 2021-10-25 20:31:33 · 295 阅读 · 0 评论 -
java字符串格式验证
/*** 判断字符串满足指定格式 true 合法*/ public static boolean checkValidity (String str, String regex) { Pattern p = Pattern.compile(regex); Matcher m = p.matcher(str); if (m.matches()) { return true; } else { ...原创 2021-10-20 18:23:16 · 2213 阅读 · 0 评论 -
limit是全表扫描仍是部分扫描呢
如果limit前面有orderby等,肯定是全表扫描了,如果没有这些,确实是执行了一部分扫描。我exlain了这个语句,发现无论limit后边值为多少,rows都是所有行数,这怎么回事?其实这个rows只是显示sql计划的行数,不一定就是真正的扫描行数。...原创 2021-10-20 14:28:45 · 1896 阅读 · 0 评论 -
第三代微服务
重磅消息-Service Fabric 正式开源 - 知乎微软的Azure Service Fabric的官方博客在2017.3.24日发布了一篇博客 Service Fabric .NET SDK goes open source ,介绍了社区呼声最高的Service Fabric开源的情况以及当前的情况,当时开源了Service Fabric的.NET SDK部分,社区一直在期盼着Service Fabric的正式开源,经过了一年漫长的等待,2018年3月14日微软终于开源了Service F...原创 2021-10-19 14:17:17 · 503 阅读 · 0 评论 -
微服务架构介绍
一、微服务架构介绍概念:把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。定义:围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。本质:用一些功能比较明确、业务比较精练的服务去解决更大、更实际的问题。二、出现和发展微服务(Microservice)这个概念是2012年出现的,作为加快Web和移动应用程序开发进程的一种方原创 2021-10-19 14:11:06 · 176 阅读 · 0 评论 -
Optional.ofNullable
工作中经常会遇到,查询返回空,如果没有判空处理,一不小心就会空指针异常。加上if判断处理也可以,但是jdk1.8有更优雅的处理方式。public static void main(String[] args) { List<String> list = null; List<String> newList = Optional.ofNullable(list).orElse(Lists.newArrayList()); ne...原创 2021-10-14 19:30:05 · 441 阅读 · 0 评论 -
java增强for循环原理
通过反编译源码,我们看到,其实JAVA中的增强for循环底层是通过迭代器模式来实现的。增强for循环实现原理编译前for (Integer i : list) { System.out.print(i + ",");}编译后Integer i;for(Iterator iterator = list.iterator(); iterator.hasNext(); System.out.println(i)){ i = (Integer)iterator.next(...原创 2021-10-14 14:23:40 · 1222 阅读 · 0 评论 -
mybatis:父子表查询一对多和多对一处理
一对多和多对一对于很多人来说是难点,一定要大量的做练习理解!多对一的处理多对一的理解: 多个学生对应一个老师 如果对于学生这边,就是一个多对一的现象,即从学生这边关联一个老师! 数据库设计CREATETABLE`teacher` (`id`INT(10)NOTNULL,`name`VARCHAR(30) DEFAULTNULL,PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8I...原创 2021-10-14 11:59:17 · 1394 阅读 · 0 评论