- 博客(50)
- 收藏
- 关注
转载 Spring Bean的生命周期及常用扩展点分析
Spring Bean的生命周期只有四个阶段。把这四个阶段和每个阶段对应的扩展点糅合在一起虽然没有问题,但是这样非常凌乱,难以记忆。要彻底搞清楚Spring的生命周期,首先要把这四个阶段牢牢记住。实例化和属性赋值对应构造方法和setter方法的注入,初始化和销毁是用户能自定义扩展的两个阶段。在这四步之间穿插的各种扩展点,稍后会讲。实例化 Instantiation 属性赋值 Populate 初始化 Initialization 销毁 Destruction实例化 -> 属性赋值...
2020-08-31 10:36:10
415
转载 项目中使用Lombok的优点和缺点
Lombok是一款非常实用Java第三方工具,它可以帮助开发人员消除Java的冗长代码,尤其是对于简单的Java对象(POJO)。Lombok在给我们带来便利的同时,也带来了不小的隐患。鉴于自己踩过的许多坑,所以我从不主动推荐别人使用Lombok,但是,也并不会干涉他人使用。并且,因为我身边有些同事的代码还是使用了的,所以我也被迫的要安装Lombok的插件。以上就是我对Lombok的态度。既然聊到这个话题,我们也来分析下Lombok的特点:1、Lombok的使用1.1IDE中安装Lom.
2020-08-12 15:50:06
1827
原创 idea打出来的springboot jar包和普通jar包区别
上图是一个springboot打出来的jar包;BOOT-INF下面是我们写的类和SpringBoot 打包成的 jar 包称为可执行 jar 包,而普通 jar 包往往作为依赖使用;
2020-08-05 19:43:48
1187
原创 maven构建本地骨架项目archetype并发布到私服
一、本地创建一个符合自己公司规范的多模块的maven项目二、在项目根pom文件中添加maven archetype插件<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-archetype-plugin</artifactId> <version>
2020-08-04 20:12:42
6559
3
原创 项目启动后nacos客户端狂刷Info日志问题排查
项目启动后狂刷如下INFO日志,看内容大概可以猜到是config内容的change事件推送,但配置项的值其实并没改变:在github上的nacos项目的issues#2684下找到相同问题:本地nacos client为1.2.0版本(由nacos-spring-context:0.3.6决定),而远程nacos server为1.2.1版本,两边对配置值的MD5加密结果不一致的BUG导致;—解决:可能需要重新部署一套1.2.0版本的nacos1.2.1的nacos-common中MD5加密如图
2020-07-28 21:19:13
3137
原创 postman传String类型参数时不能加双引号
今天用postman接口自测,接口成功,但是死活没有数据。查看控制台sql,确实查询到的数据为0.但奇怪的是,将sql复制到navicat,然后复制参数替换?,然后执行,却是有数据的。奇了怪了,还有这种事?IDE因为配置文件问题连到其它库去了?select缓存?试了半天,原来是自己多此一举,给String类型的参数加了单引号或双引号的缘故。仔细观察,String类型的参数,...
2019-08-29 15:18:48
20564
1
原创 同一个服务器跑多个不同版本JDK的项目
以前不知道同一台服务器上能同时跑不同JDK版本的项目,想着JAVA_HOME这个环境变量只能设置一个,那么执行java -jar 命令跑项目时只能对应到JAVA_HOME的这个JDK版本。今天有了这个需求。首先想到的是修改 jekins的部署脚本(我们项目是利用jekins部署的),加了个export JAVA_HOME=XXX:结果如上图错误,发现是JAVA_HOME后面的 = 号出...
2019-07-02 20:00:29
4631
1
原创 foreach循环里list.remove倒数第二个元素不会报ConcurrentModificationException异常
关键就是:foreach的底层就是迭代器,迭代器循环会依次调hasNext()和iterator.next()remove倒数第二个后,ArrayList集合私有属性size=size -1。接着迭代下一次循环时先判断 hasNext,public boolean hasNext() {return cursor != size;}只有此时游标cursor == size...
2019-06-26 20:36:03
1043
2
转载 产品从无到有的完整工作流程
一个产品从无到有的过程可以分为两个阶段:产品设计阶段和产品执行阶段。第一阶段:产品设计阶段不同的书对产品设计阶段的工作分类不同,但本质其实都是一样的。本文从其中一个角度来切入 -- 行内经典入门书籍《用户体验要素》中提出的五个层级:战略层、范围层、结构层、框架层、表现层 -- 并结合其他书籍及老师总结的流程及方法,总结出我理解的设计工作流程。五个层级提供了一个产品设计阶...
2019-04-24 10:42:11
2746
原创 exe执行文件变白色无图标解决方法
在命令提示符下输入下列命令即可恢复。 按键 “WIN+R” 输入即可cmd 然后输入分别输入 : taskkill /im explorer.exe /f cd /d %userprofile%\appdata\local del iconcache.db /a start explorer.exe exit看了看这段代码,应该就是把图标缓存的数据库给...
2019-04-08 17:31:03
6645
转载 @ControllerAdvice 拦截异常并统一处理
在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler、@InitBinder、@ModelAttribute,并应用到所有@RequestMapping中。参考:@ControllerAdvice 文档一、介绍创建 MyControllerAdvice,并添加 @ControllerAdvice注解。packa...
2019-04-02 19:01:30
1099
转载 JAVA字符串格式化-String.format()的使用
常规类型的格式化String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。format(Locale local...
2019-01-16 14:37:07
343
原创 JAVA获取CLASSPATH路径
ClassLoader 提供了两个方法用于从装载的类路径中取得资源: public URL getResource (String name); public InputStream getResourceAsStream (String name); 这里name是资源的类路径,它是相对与“/”根路径下的位置。getResource得到的是一个UR...
2019-01-03 15:52:25
169
转载 OSI七层模型详解
OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 。完成中继功能的节点通常称为中继系统。在OSI七层模型中,处于不同层的中继系统具有不同的名称。 一个设备工作在哪一层,关键看它工作时利用哪一层的数据头部信息。网桥工作时,是以MAC头部来决定转发端口的,因此显然它是数据链路层的设备。具体说:物理...
2018-12-27 14:28:42
193
原创 MySQL数据库隔离级别及实现原理
本篇博文为结合其它几篇博文而来,侵删。 所谓的数据库事务操作其实就是一组原子性的操作,要么全部操作成功,要么全部操作失败。 并行事务的四大问题: 1.更新丢失:和别的事务读到相同的东西,各自写,自己的写被覆盖了。(谁写的快谁的更新就丢失了) 2.脏读:读到别的事务未提交的数据。(万一回滚,数据就是脏的无效的了) 3.不可重复读:两次读之间有别的事务...
2018-12-27 09:06:40
1150
1
原创 很多架构师都做错的一道Integer的java基础题
Integer a =1 , b= 2; System.out.println("before:a="+a+" b="+b); Field field = Integer.class.getDeclaredField("value"); field.setAccessible(true); int temp = a...
2018-11-21 10:39:48
260
转载 Spring动态替换Bean
BeanPostProcessor是创建每个类时都会去执行的一个接口,postProcessBeforeInitialization是在类初始化之前调用的一个方法,创建的对象的引用会指向改方法的返回值对象。调用过程示例如下:ClassA classA = new ClassA();classA = postProcessBeforeInitialization(classA, "class...
2018-11-01 15:12:37
8826
转载 看完让你彻底搞懂Websocket原理
原文:https://www.zhihu.com/question/20215561一、websocket与httpWebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有 1.1 和 1.0 之说,也就是所谓的 keep-alive ,把多个HTTP请求合并为一个,但是 Webso...
2018-11-01 11:13:17
109
转载 程序设计之单例模式VS静态方法
原文:https://blog.youkuaiyun.com/johnny901114/article/details/11969015?utm_source=copy 我们在设计程序经常会有这种需求 , 某个类里的方法能够全局访问. 在这种情况下有两种实现方案 : 1>单例模式(Singleton);2>静态方法.但是, 对于这两种实现方式 , 那种更好呢?在国内论坛上看了一...
2018-10-15 15:36:37
172
原创 Java动态编译和动态加载详解
一.动态编译在某些情况下,我们需要动态生成java代码,通过动态编译,然后执行代码。JAVA API提供了相应的工具(JavaCompiler)来实现动态编译。//获取JavaCompiler JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();//获取java文件管理类 StandardJavaFileManage...
2018-10-15 13:58:43
5581
原创 mysql大小写区别测试
(测试环境 mysql5.7)先说结论:MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:1、数据库名与表名是严格区分大小写的;2、表的别名是严格区分大小写的;3、列名与列的别名在所有的情况下均是忽略大小写的;4、变量名也是严格区分大小写的;MySQL在Windows下都不区分大小写。 所以在不同操作系统中为了能使程序和数据库都能正常运行,最好...
2018-10-15 13:13:11
1061
转载 Java JDBC中,MySQL字段类型到JAVA类型的转换
1. 概述 在使用Java JDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该选择哪种Java类型与之对应?本篇将为你揭开这个答案。2. 类型映射 java.sql.Types定义了常用数据库(MySQL、Oracle、DB2等)所用到的数据类型,官名也叫JDBC类型。每个数据库产品的数据类型定义各不相同,但都有JDBC类型与之对应,如MySQL的BIGINT--&g...
2018-10-09 13:55:27
868
原创 session在什么时候创建,以及session一致性问题
sessionid是一个会话的key,浏览器第一次访问服务器会在服务器端生成一个session,有一个sessionid和它对应。tomcat生成的sessionid叫做jsessionid。session在访问tomcat服务器HttpServletRequest的getSession(true)的时候创建,tomcat的ManagerBase类提供创建sessionid的方法:随机数+时间...
2018-09-17 14:01:04
25036
3
转载 hibernate,mybatis,beetlsql 全面比较
这是我的一个综合评分,总共分为12个单项,每个单项最高5分,最低0分。注意,评价只包含这些软件提供的标准功能,不包含第三方提供的功能,如代码生成等。 开发效率hibernate 能获取数据库metadata,因此简单的sql操作,如插入,更新,删除,翻页等,都可以自动完成。但因为概念复杂,经常会导致开发人员会写sql,能写java,但不会写hibernate情况出现(关系配置或...
2018-09-03 16:28:31
704
转载 Tomcat 源码分析 WebappClassLoader 分析 (基于8.0.5)
0. 疑惑在刚接触 Tomcat 中的ClassLoader时心中不免冒出的疑惑: "Tomcat 里面是怎么样设计ClassLoader的, 这样设计有什么好处?"; 我们先把这个问题留着, 到最后在看 !1. Java 中 ClassLoader 类别1. BootstrapClassLoader 加载路径: System.getProperty("java.class....
2018-09-02 16:38:34
1186
3
转载 dubbo远程调用源码分析
dubbo远程调用源码分析(一):客户端发送请求本文分为三部分,分别是:消费端注册部分消费端动态代理部分消费端事件处理器部分https://blog.youkuaiyun.com/lkforce/article/details/79816921-----------------------------------------dubbo远程调用源码分析(二):服务端接收请求htt...
2018-08-29 18:06:16
223
转载 Tomcat内部结构和请求过程
Tomcat Tomcat的组织结构 由Server.xml的结构看Tomcat的体系结构 Tomca的两大组件:Connecter和Container Connecter组件 Container组件 Tomcat 中其它组件 Tomcat Server处理一个HTTP请求的过程 Tomcat Server处理一个HTTP请求的过程Tomcat...
2018-08-29 11:50:24
125
转载 Java过滤器与SpringMVC拦截器之间的关系与区别
今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深夜,时间原因,我就把一些网友的观点重点摘录下来,大家仔细看后也一定会有一个比较新的认识(在此非常感谢那些大牛们的无私奉献,分享他们的经验与心得,才能让像我这样的小白有机会站一下你们这些巨人的肩膀,才...
2018-08-29 10:24:34
121
转载 数据层的多租户浅谈
在上一篇“浅析多租户在 Java 平台和某些 PaaS 上的实现”中我们谈到了应用层面的多租户架构,涉及到 PaaS、JVM、OS 等,与之相应的是数据层也有多租户的支持。数据层的多租户综述多租户(Multi Tenancy/Tenant)是一种软件架构,其定义是:在一台服务器上运行单个应用实例,它为多个租户提供服务。在SaaS实施过程中,有一个显著的考量点,就是如何对应用数据进行...
2018-08-28 14:55:12
1582
原创 IDEA创建Tomcat8源码工程流程
准备工作1.apache-tomcat-8.5.32-src源码包,官网下载并解压即可;2.apache-ant-1.10.5(用的最新版)下载并安装:Tomcat源码默认采用的是ant编译;安装好以后配置环境变量配置好环境变量后在dos下运行 ant -version 查看是否能成功使用项目创建过程 1、pom.xml文件配置由于需要将项目导入idea中,...
2018-08-27 13:53:42
867
原创 新手一次OutOfMemoryError: PermGen space后的查找过程记录
今天项目跑着跑着,报了永久区的OOM(JDK用的1.7)。好吧,学了不少JVM的知识,刚好可以用用。开搞~!首先我想看看当前JVM的各个参数。结果打印出来的参数中连PermGen都收不到?what?可以搜到Metaspace。可我这个项目用的JDK是1.7不是1.8啊,怎么有元数据区。不是说这个命令能打印出所有的JVM参数吗?而且这个格式也太乱了吧,根本不好阅读。好...
2018-08-09 11:54:35
194
转载 http的长连接和短连接
1.以前的误解很久之前就听说过长连接的说法,而且还知道HTTP1.0协议不支持长连接,从HTTP1.1协议以后,连接默认都是长连接。但终究觉得对于长连接一直懵懵懂懂的,有种抓不到关键点的感觉。今天通过一番研究,终于明白了这其中的奥秘。而之前,也看过长连接相关的内容,但一直都是云里雾里的。这次之所以能在这么短的时间里搞清楚,和自己技术的沉淀密不可分。因此,这里借着这个机会,再次强调一下,千万...
2018-08-03 13:49:54
155
转载 Class文件结构
Class文件结构目录Class类文件结构 无符号数 表 魔数 Class文件的版本号 常量池 访问标志(2字节) 类索引、父类索引和接口索引集合 字段表集合 方法表集合 属性表集合 Class类文件结构Class文件是一组以8字节为基础单位的二进制流, 各个数据项目严格按照顺序紧凑排列在class文件中, 中间没有任何分隔符,这使得cl...
2018-08-03 10:58:40
5546
1
转载 数据库事务4种隔离级别及7种传播行为
一、隔离级别:数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。1. ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。 这种隔离...
2018-07-30 18:45:40
113
转载 JAVA并发编程: CAS和AQS
转自:https://blog.youkuaiyun.com/u010862794/article/details/72892300 说起JAVA并发编程,就不得不聊聊CAS(Compare And Swap)和AQS了(AbstractQueuedSynchronizer)。CAS(Compare And Swap)什么是CASCAS(Compare And Swap),即比较并交换。...
2018-07-27 09:33:36
212
转载 可达性算法、Java引用 详解
转自 https://www.jianshu.com/p/8f5fa8288d9b 在堆里存放着几乎多有的java对象实例,垃圾搜集器在对堆进行回收之前,第一件事情就是确定这些对象之中哪些还“存活”着(即通过任何途径都无法使用的对象)。一、可达性分析算法在Java中,是通过可达性分析(Reachability Analysis)来判定对象是否存活的。该算法的基本思路就是通过一些被称...
2018-07-27 08:54:14
932
转载 MySQL 性能优化神器 Explain 使用分析
简介MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化.EXPLAIN 命令用法十分简单, 在 SELECT 语句前加上 Explain 就可以了, 例如:EXPLAIN SELECT * from user_info WHERE id < 300;准备为了接下来方便演示 ...
2018-07-26 22:48:41
85
转载 jvm调优过程
前阵 对底层账单系统进行了压测调优,调优的最后一步--jvm启动参数中,减小了线程的堆栈空间:-XX:ThreadStackSize=256K,缩减至原来的四分之一,效果明显,不过并没有调试其他内存空间及gc相关参数。这次有机会在实际压测中,调优这一部分内容,笔者以cms收集器为例,将有、无调优配置情况下的压测结果进行对比,来分析各项调用参数的意义及效果。准备工作:1.调用查询...
2018-07-26 11:48:09
357
转载 数据缓存技术
本文大纲: 缓存概述 CDN缓存 反向代理缓存 分布式缓存 本地缓存 缓存架构示例 缓存常见问题 一、缓存概述 缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。 1、缓存的原理 将数据写入/读取速度更快的存储(设备); 将数...
2018-07-19 11:17:25
358
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人