
java
文章平均质量分 55
倚楼听风夜听雨
这个作者很懒,什么都没留下…
展开
-
工作四年半的一个反思
毕业四年半了,为什么没有说五年,其实也是不太愿意承认毕业接近五年,职业还处于一个起步期想想这四年多都干了什么上学的时候学习php,前端,做一个CURD boy,不知索引 缓存为何物,其他的就更别说了,不得不承认现在行业也是真的内卷,我刚毕业那会还没流行什么leetCode,也可能流行了,我比较low不知道,哈哈1 第一年毕业,进入了一家小公司,做一个CURD boy,是真的CUrd,开始接触缓存,索引,只知道背什么索引优化原则,最左前缀什么,不知道干什么用,也没什么用的机会2 第二年,去了一家用户k原创 2020-12-21 22:08:37 · 323 阅读 · 0 评论 -
BeanFactoryPostProcessor的作用可不仅仅是修改Bean定义
一说到 BeanFactoryPostProcessor,很多人的第一反映就是他可以修改Bean定义,对,他是可以修改Bean定义,然而,他的作用仅限于修改Bean定义吗?显然不是,他是Spring提供的一个扩展点,解耦的一个手段,下面仔细说一下:先说下他是怎么修改Bean定义的@FunctionalInterfacepublic interface BeanFactoryPostProcessor { void postProcessBeanFactory(ConfigurableListab原创 2020-09-25 18:01:17 · 2259 阅读 · 0 评论 -
@Autowired 写在属性和构造函数上的区别
下面是@Autowired的作用域@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})构造方法方法参数属性注解类型本文主要介绍一下,写在构造方法和属性上的区别,举一个例子来说明@Componentpublic class C2 { public void say(){ S原创 2020-09-24 11:13:55 · 2957 阅读 · 0 评论 -
BeanFactory 和 ApplicationContext的区别
BeanFactory 是顶级接口ApplicationContext 继承于BeanFactory , 都具有生产Bean的能力,但BeanFactory不具备包扫描的能力ApplicationContext 具有更多的功能,事件发布等,服务非常好BeanFactory 就是一个无情的生产机器,没有其他服务,只能通过下面的方式去注册Bean定义,生产BeanDefaultListableBeanFactory defaultListableBeanFactory = new DefaultList原创 2020-09-22 14:22:41 · 190 阅读 · 0 评论 -
Mac 安装 hsdis 查看 java 汇编指令
先安装下hgbrew install mercurial官网地址: https://www.chrisnewland.com/updated-instructions-for-building-hsdis-on-osx-417hg clone http://hg.openjdk.java.net/jdk8u/jdk8u# 官网上少了这一步sh get_source.shcd jdk8u/hotspot/src/share/tools/hsdis/wget http://ftp.hean原创 2020-09-22 10:18:25 · 489 阅读 · 1 评论 -
写一个单例,无论什么情况下都能保证只有一个
方式一:双重检查package app;/** * @author devilu */public class Single{ private static volatile Single instance; private Single() throws Exception { // 如果用反射的方式new,直接抛异常 if(instance != null){ throw new Exception(getCla.原创 2020-09-22 09:37:50 · 162 阅读 · 0 评论 -
java 中的各种锁原理介绍 之 Synchronized
Synchronized轻量级锁基于java自身实现,重量级锁依赖系统底层互斥量实现太长不看,这里有总结, 整个流程在文章末尾有流程图Synchronized 中有几种锁,听起来感觉这话有点怪,Synchronized本身不就是一种锁吗?是的,但是JVM内置锁在1.5之后版本做了重大的优化,存在一个锁的膨胀升级过程,下面会一一介绍偏向锁,基于Mark Word实现 ,Mark Word 底下有介绍轻量级锁,所谓轻量级锁是基于对象头Mark Word实现的,这里升级为轻量锁其实就是Mark W原创 2020-09-15 17:47:13 · 353 阅读 · 0 评论 -
最简单易懂的Spring boot,mybatis,sharding jdbc 分库分表教程
网上的基于配置文件的文章太多了且有些写的乱七八糟对新手极为不友好,本篇文章采用 全部 Java 编码的方式,来实现数据的分库分表,并力求做到简单明了工具准备安装Spring boot,我这里是通过idea安装, java8,maven这里采用mybatis逆向工程生成代码,生成插件选择Maven连接池采用阿里巴巴的Druid安装依赖pom文件如下,主要依赖有,mybatis-spring-boot-starter,druid-spring-boot-starter,sharding-jdbc原创 2020-08-31 10:40:16 · 425 阅读 · 0 评论 -
Spring boot 结合 Mybatis , 并用Mybatis逆向工程生成Model
先用Idea 安装Spring boot安装完,用以下内容替代pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http原创 2020-08-26 10:53:57 · 366 阅读 · 1 评论 -
从源码角度看 Spring Bean 的创建时机
先说结论非懒加载的单例Bean在容器创建的过程中就创建好了多例或者懒加载的在使用的时候创建废话少说,上源码// Instantiate all remaining (non-lazy-init) singletons. 实例化所有剩余的(非懒加载的)单例finishBeanFactoryInitialization(beanFactory);// Trigger initialization of all non-lazy singleton beans...触发所有非懒加载单例bean的原创 2020-08-22 14:06:06 · 273 阅读 · 0 评论 -
Spring 源码编译遇到的坑
系统 : Macidea版本 :2019.3gradle :两个版本,4.10.3 和 5.5.1Spring 版本:v5.1.17.RELEASE按照官方给的说明:下载源码,先不要打开,进入源码目录,执行 ./gradlew :spring-oxm:compileTestJava,这个时候它会自动下载gradle 4.10.3 (好吧,我得承认,前前后后,gradle的版本我下载了n个, Spring 的源码版本我也下载了n个, 只有这个编译通过了)导入项目 Impor..原创 2020-08-22 14:04:43 · 1240 阅读 · 0 评论 -
java & 0xff
最近在tcp的基础上写一个自定义的协议,处理拆包粘包的时候发现一个情况数据是以字节流的形式在tcp中传输,所以,大于一个字节的数据类型,都要转为byte[] 的形式以int类型举例,在java中一个int类型的数据占4个字节,也就是需要new byte[4] int a = 9071; byte[] bytes = new byte[4]; bytes[0] = (byte) (a >> 24 ); // 拿到最高位的8位 b原创 2020-08-22 14:02:47 · 738 阅读 · 2 评论 -
Spring 是如何解决循环依赖的
一般想到这个问题,答案就是三级缓存,那么问题又来了,缓存的啥?用啥缓存的?为啥是三级不是二级?三级缓存指的其实就是三个Map。源码如下图/** Cache of singleton objects: bean name to bean instance. */private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);/** Cache of singleton fact原创 2020-08-22 14:01:40 · 243 阅读 · 0 评论 -
tomcat 在Spring boot 中的启动时机
之前遇到一个问题,我们需要在Spring Boot 启动后做一些配置表刷新的工作,这个刷新比较耗时于是,我们实现了 xxRunner implements CommandLineRunner但发现一个问题,配置还未刷新,tomcat就对外服务了近来正在阅读源码,在源码里找到了答案简单来看,Tomcat 在 refreshContext 的时候便创建了,而 CommandLineRunner 的调用却在最后。但在 onRefresh 的时候,tomcat 只是完成了注册操作,并没有真的启动,真原创 2020-08-21 14:52:45 · 490 阅读 · 0 评论