一点点小感慨 看到一个面试者的简历, 点了看了下他的Github和CSDN博客, 想起了我以前也写过一些博客. 点过来看看以前写的博客还是有人看的. 也有反馈一些问题. 感觉自己以前真是热血, 现在真的是懒得写这些了....
为什么下一个5年java后台开发你该选择Spring Boot? Spring是一个无所不包的一站式java开发平台. 但由于10多年的发展, Spring的体系太过庞大, 程序员无法掌握其历史, 同时复杂的依赖, 大量的配置, 复杂的部署给开发带来了很大的阻碍.Spring Boot基于约定大于配置的理念, 简化了依赖管理, 简化了配置, 简化了部署. 大大降低了使用Spring开发的难度, 大大加快了开发速度. 我认为必将是Java后台开发下一个5年的杀手级框架.
kotlin与Spring, 默认类,方法,property为final带来的问题--依赖注入失效,NullPointerException异常 使用kotlin写Spring时,kotlin默认类,方法,property为final带来的问题 -- 依赖注入失效, NullPointerException的原理及解决方法
Kotlin enum类与companion设计的不协调--NPE导致ClassNotFoundException, Could not initialize class. kotlin使用companion代替static, 而enum类是在类初始化时就初始化实例, 如果在enum实例中引入到了companion object中的字段, ide和编译器都不会提示错误, 但是运行那么就会导致enum类初始化失败. 因为初始化实例时, companion object还没有初始化. 引用其字段, 导致NPE, 类初始化失败, 导致ClassNotFoundException
Kafka 0.9 新版本consumer客户端使用介绍 kafka最初的客户端使用scala写的, 但是有很多限制. 在0.8.1版本中, 用Java重写了producer客户端, 0.9版本中用java重写了consumer客户端, 新的客户端提供了更加易用, 清晰一致的api. 本文翻译了kafka官方的新consumer使用介绍. 主要介绍了新版本的客户端与旧客户端的区别, 新版本的使用, 详细介绍了一些重要配置, 消费语义等方面.
kafka权威指南 第一章翻译 Meet Kafka Kafka The Definitive Guide, Early Release第一章 Meet Kafka翻译. 主要介绍队列系统是如何逐渐引入业务中, 以及LinkedIn的业务需求的发展带来了哪些技术上的问题, 以及这个背景下kafka的诞生.
无法删除节点 Zookeeper: Packet len5391978 is out of range 问题今天在对Zookeeper进行性能测试, 在/zktest节点下建了16W个节点,每个节点名为30个字符 然后进行删除时出现Packet len5391978 is out of range的错误, 导致不能获取节点列表, 也不能删除节点.
使用springfox整合SpringMVC和Swagger Swagger 是一系列对 RESTful 接口进行规范描述和页面展示的工具. 通过 springfox-swagger 将 Swagger 与 Spring-MVC 整合, 可从代码中的注解获取信息, 并生成相应的文档. 效果如下所示. 目前 Swagger 的 api 版本规范已经更新到 2.0 版本, 中文网络上基本上都是 1.0 的 api 版本规范的教程. 捣鼓了一天终于搞定了.
Spring中的所有路径匹配问题总结 Spring 路径问的最多的问题就是如何拦截所有以. do 结尾的请求. 大家都是在猜, 网上给出的答案五花八门然而大部分都是错的. 正确答案是 /**/*.do. 其实Spring中无论是handler路径映射, 还是interceptor路径匹配, 还是sping.xml中加载配置文件时使用的"classpath*", 都使用的是AntPathMatcher规则, 这里做详细的介绍
Java7 NIO2 Path类 Java 从 1.0 开始就有了 Java IO 模型, 在 JDK 1.4 中添加了 NIO, 主要添加了非阻塞 IO 支持, Java 7 中, 增加了异步通道, 对本地文件系统添加了更多元数据支持 (File Attributes), 文件树遍历 (FileTreeWalker), 文件变化监测的 Watch Service 等功能
Spring重复扫描导致事务失败的解决方案及深入分析 问题及日志使用Spring和mybatis,然后配置事务,出现SqlSession was not registered for synchronization because synchronization is not active,事务没有启用成功。[org.mybatis.spring.SqlSessionUtils] - Creating a new SqlSession [...
IntelliJ IDEA使用Maven创建Spring和Mybatis工程出现...BindingException: Invalid bound statement (not found) IntelliJ IDEA使用Maven创建Spring和Mybatis工程,出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)异常的解决方法
IntelliJ IDEA使用Maven创建Spring和Mybatis工程出现...BindingException: Invalid bound statement (not found)... 使用intelliJ idea创建Mybatis工程后,扫描xml所在的包也配置了,如下,<!--spring与MyBatis结合,不需要mybatis配置映射文件--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <pr...
ThreadLocal源码解析 今天在看Spring 3.x企业应用开发实战,第九章 Spring的事务管理,9.2.2节ThreadLocal的接口方法时,书上有提到Threadlocal的简单实现,我就去看了下JDK1.8的Threadlocal的源码。发现实现方式与书中讲的并不相同,同时在网上搜索了一下,发现有比较多的人理解错了。先看一下容易误导的解释:在ThreadLocal类中有一个Map对象,这个Map以每个T...
FireFox和VimFox插件--个人感觉最好用的火狐快捷键插件 个人比较喜欢键盘操作,特别是浏览网页时,一般都说编程的人该用chrome,个人感觉并不是很好用.切换到linux下后,chrome有个比较严重的问题,就是在输入网址时,非常的卡顿,于是开始使用firefox浏览器.有了解到这些浏览器的插件都比较多,于是搜索了一下,Vimium比较难用,快捷键很少,而Vimperator学习成本又比较高,所以使用了VimFox后,就决定用它了.下...
HTTP摘要认证方式分析与验证 使用tomcat自己创建了一个网页.http://218.197.239.47:8080/First/MyHtml.html进行了权限设置,使用摘要验证,用户名(root)和密码(admin),输入提示"Test DIGEST"成功验证后,我们查看响应头和请求头信息如下所示:其中最重要的信息为请求头中的Authentication首部:...
HTTP内建Authentication机制分析 内建的用户登陆机制Authentication:访问http://linux.linuxidc.com/网页弹出:此时的HTTP请求和响应如下:返回的是401 Unauthorized状态码,同时弹出需要验证的输入框如果不输入任何信息,验证失败。如果输入信息,用户名,密码都是www.linu...
我的linux系统配置 更新了win10,使用了一段时间,win10经常蓝屏,发热也比较严重,如果使用了两天以上未关机就会比较卡了。所以决定使用linux,使用的是Deepin 2014.3版本。Deepin系统自带了搜狗输入法,wps,谷歌浏览器,windows版的QQ。可能是直接把独立显卡关了,就没有Ubuntu很头疼的发热问题。基本上可以直接使用了。做了一些配置,...
Top K问题用Python求解 用Python写的Top K问题,一种是对N个数据直接排序,然后取出其最大的K个数。复杂度为N*logN。一种是通过保留K个数的槽,然后不断去N个数中取数,如果取出的数比K个槽中的数的最小值要大,那么就替换这个最小值。所以时间复杂度为N*logK.以下为时间。复杂度N*logkN*logN1W0.0049101173134
Top K问题用Python求解 用Python写的Top K问题,一种是对N个数据直接排序,然后取出其最大的K个数。复杂度为N*logN。一种是通过保留K个数的槽,然后不断去N个数中取数,如果取出的数比K个槽中的数的最小值要大,那么就替换这个最小值。所以时间复杂度为N*logK.以下为时间。复杂度N*logkN*logN1W0.00491011731340.0...
对Throwable的处理 Java以严谨著称,对于checked异常, 1. 在出现异常的地方使用catch捕捉并忽略它 2. 直接抛出异常 对于第一种方法,有的时候很危险,异常有的时候必须被上层知道,如果有部分执行不正确,程序是需要停止的。第二种方法,会很麻烦,这样一层层调用,每层都要写异常相关的代码,会多很多的代码。 可以定义一个这样的方法对异常和错误进行处理: public static void...
同步工具类-闭锁CountDownLatch 闭锁延迟线程的进度直到到达终止状态。相当于一扇门,在闭锁到达结束状态之前,这扇门一直是关闭着的。并没有任何线程能够通过。当到达结束状态时,这扇门会打开允许所有的线程通过。闭锁可以用来确保某些活动直到其他活动都完成后才继续执行。闭锁只可以使用一次。 1. 确保某个操作在其所需要的所有资源都被初始化后才能继续执行,二元闭锁可以用来表示”资源R已经被初始化”。 2. 确保某个服务在其所依赖的...
JAVA虚拟机新生代,老生代的分析 一个这样的代码文件public class Hello{ public static void main(String[] args) { Object obj = new Object(); System.gc(); System.out.println(); obj = new Object(); obj = new Object();
JAVA虚拟机新生代,老生代的分析 一个这样的代码文件public class Hello{ public static void main(String[] args) { Object obj = new Object(); System.gc(); System.out.println(); obj = new Object(); obj = new Object...
java.sql.SQLException: Parameter metadata not available for the given statement Java通过JDBC读取mysql语句参数元数据时出错
java.sql.SQLException: Parameter metadata not available for the given statement static void readMeta(String sql, Object[] params) throws SQLException { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { con...
java.sql.SQLException: Parameter metadata not available for the given statement static void readMeta(String sql, Object[] params) throws SQLException { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { con...
可配置的DAO设计模式 DAO(Data Access Object)模式实际上是两个模式的组合,即Data Accessor 模式和 Active Domain Object 模式。其中 Data Accessor 模式实现了数据访问和业务逻辑的分离,而Active Domain Object 模式实现了业务数据的对象化封装,一般我们将这两个模式组合使用。DAO模式是标准的J2EE设计模式之一。
可配置的DAO设计模式 DAO(Data Access Object)模式实际上是两个模式的组合,即Data Accessor 模式和 Active Domain Object 模式。其中 Data Accessor 模式实现了数据访问和业务逻辑的分离,而Active Domain Object 模式实现了业务数据的对象化封装,一般我们将这两个模式组合使用。DAO模式是标准的J2EE设计模式之一...
可配置的DAO设计模式 DAO(Data Access Object)模式实际上是两个模式的组合,即Data Accessor 模式和 Active Domain Object 模式。其中 Data Accessor 模式实现了数据访问和业务逻辑的分离,而Active Domain Object 模式实现了业务数据的对象化封装,一般我们将这两个模式组合使用。DAO模式是标准的J2EE设计模式之一...
对于零宽度断言的理解 零宽度的意思是这个表达式不匹配任何字符。比如正则表达式中^, $, \b,并不匹配任何字符,它们只是表示要匹配的字符的两头满足这个条件。‘^abc$’表示要匹配的中间条件abc,表示在字符串的开头这个缝隙后面是abc,而字符串的结尾这个缝隙前面是abc。我们知道\babc\b可以匹配abc这个的单词,也可以匹配@abc*.也就是说’\b’表示这个间隙一边是单词的部分(字母或数字
对于零宽度断言的理解 零宽度的意思是这个表达式不匹配任何字符。比如正则表达式中^, $, \b,并不匹配任何字符,它们只是表示要匹配的字符的两头满足这个条件。‘^abc$’表示要匹配的中间条件abc,表示在字符串的开头这个缝隙后面是abc,而字符串的结尾这个缝隙前面是abc。我们知道\babc\b可以匹配abc这个的单词,也可以匹配@abc*.也就是说’\b’表示这个间隙一边是单词的部分(字母或...
单例模式中的Double check lock Double check lockpackage test;public class Singleton { public static Singleton singleton; private Singleton(){ } public static Singleton getInstance(){ if(singleton==null...
单例模式中的Double check lock Double check lockpackage test;public class Singleton { public static Singleton singleton; private Singleton(){ } public static Singleton getInstance(){ if(singleton==null...
python对象类型分类 同样分类的类型共享其集合。在python中,有三个主要类型(以及操作)的分类:数字(整数,浮点数,二进制,分数等) 支持加法和乘法等 序列(字符串,列表,元组) 支持索引,分片和合并 映射(字典) 支持通过键的索引等 对象的类型告诉Python去执行什么样的任务。 集合是自成一体的一个分类(不会把键值映射到值,也没有逐位的排序顺序)。1.不可变类型(数字,字符...
STM32F103定时器功能比较 stm32F103的定时器占用的篇幅比较大。 分为高级定时器TIM1,和TIM8,通用定时器TIM2,3,4,5,和基本定时器TIM6和TIM7。 它们之间的区别和联系如下:基本定时器:● 16位自动重装载累加计数器● 16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1~65536之间的任意数值分频● 触发DAC的同步电路● 在更新事件(计数器溢出)时产生中断/D...
linux 命令笔记 以这个格式输出当前日期,注意命令行中的+号,和空格。date +%Y%m%d输出:20150406输出了前天的日期。还可以输出几个月前或者几个月后的日期。可使用info date查看更多date --date='2 days ago' +%Y%m%d输出:20150404连接字符串str1=abcstr2=defstr3=${str1}${str2}echo $str3输出:abcdef
linux 命令笔记 以这个格式输出当前日期,注意命令行中的+号,和空格。date +%Y%m%d输出:20150406输出了前天的日期。还可以输出几个月前或者几个月后的日期。可使用info date查看更多date --date='2 days ago' +%Y%m%d输出:20150404连接字符串str1=abcstr2=defstr3=${str1}${str2}echo $st...
Eclipse CDT "for loop initial declaration used outside C99 mode" 解决办法 C99支持下面这种for 循环的变量i的定义及初始化方式: for (int i = 0; i{ } C99标准之外的C标准支持下面这种for 循环的变量i的定义及初始化方式: int i; for (i = 0; i { } 如何解决:右键点击项目->Prop
Eclipse CDT "for loop initial declaration used outside C99 mode" 解决办法 C99支持下面这种for 循环的变量i的定义及初始化方式:for(inti=0; i<10; i++){}C99标准之外的C标准支持下面这种for 循环的变量i的定义及初始化方式:inti;for(i =0; i <10; i++){}如何解决:右键点击项目->Proper...
Jlink V8修复 装了Keil 5.14,手残把Jlink V8的固件更新了,然后就挂了。折腾了好久,以下是总结的几个要点。1.需要win7或者xp的32位,64是不行的2.按照这里面的pdf的方法修复 点击打开链接3.如果那样试了以后还是显示无法识别的USB设备,那就可能是atm6124驱动(点击下载)没装。这个芯片是Jlink V8的主控芯片。按照上面步骤,Jlink V8可
Jlink V8修复 装了Keil 5.14,手残把Jlink V8的固件更新了,然后就挂了。折腾了好久,以下是总结的几个要点。1.需要win7或者xp的32位,64是不行的2.按照这里面的pdf的方法修复点击打开链接3.如果那样试了以后还是显示无法识别的USB设备,那就可能是atm6124驱动(点击下载)没装。这个芯片是Jlink V8的主控芯片。按照上面步骤,Jlink V8可以正常连接...
STM32中断设置相关寄存器的分析 1.中断设置使能和清除寄存器器的分析 地址 名称 描述 0xE000 E100 SETENA 设置使能中断0到31,写1将位置1,写0无作用 0xE000 E180 CLRENA 写1将位置0,禁能中断,写0无作用__ASM void SET_CLEAR_IRQ(void) { LDR
STM32中断设置相关寄存器的分析 1.中断设置使能和清除寄存器器的分析地址 名称 描述0xE000 E100 SETENA 设置使能中断0到31,写1将位置1,写0无作用0xE000 E180 CLRENA 写1将位置0,禁能中断,写0无作用__ASM void SET_CLEAR_IRQ(void) { LDR...
Cortex-M0(+)内核的处理器架构简介 系统架构Cortex-M0处理器具有32位系统总线接口,以及32位地址线,即有4GB的地址空间。 系统总线基于AHB_Lite高级高性能总线协议。外设总线基于APB高级外设总线协议,通过一个转换桥连接到AHB上。这只是Cortex-M0内核的大概模式,Cortex-M0+的存储器系统与Cortex-M0基本相同。但是厂商根据需要会进行调整。 以下的是基于cortex-M0+内核
Cortex-M0(+)内核的处理器架构简介 系统架构Cortex-M0处理器具有32位系统总线接口,以及32位地址线,即有4GB的地址空间。 系统总线基于AHB_Lite高级高性能总线协议。外设总线基于APB高级外设总线协议,通过一个转换桥连接到AHB上。这只是Cortex-M0内核的大概模式,Cortex-M0+的存储器系统与Cortex-M0基本相同。但是厂商根据需要会进行调整。 以下的是基于cortex-...
Cortex-M0+指令集 Cortex M0+保留了Cortex-M0的全部56个指令。 根据功能可以将Cortex-M0+处理器的指令化为以下几组在处理器内移动数据 MOV,MRS(move special register to register),MSR存储器访问 LDR(LDR,LDRH,LDRB),STR(STR,STRH,STRB),LDM,LDMIA(基地址寄存器会更新),STMI
Cortex-M0+指令集 Cortex M0+保留了Cortex-M0的全部56个指令。 根据功能可以将Cortex-M0+处理器的指令化为以下几组在处理器内移动数据 MOV,MRS(move special register to register),MSR存储器访问 LDR(LDR,LDRH,LDRB),STR(STR,STRH,STRB),LDM,LDMIA(基地址寄存器会更新),...
基于Cortex M0+的STM32L053xx学习资料介绍 因为Cortex M0+架构比较新,国内开发板比较少,感觉论坛上资料也不是很多。国内主要是M3内核的开发板比较多。对于初学者来说,又不太清楚Cortex M0+与M3之间的区别,M0+满是英文资料,看起来很痛苦。 经过一段时间的学习,总算摸清楚了学习stm32需要哪些资料。以我所使用的stm32L053C8的discovery开发板为例。 1.板级的资料 User manu
基于Cortex M0+的STM32L053xx学习资料介绍 因为Cortex M0+架构比较新,国内开发板比较少,感觉论坛上资料也不是很多。国内主要是M3内核的开发板比较多。对于初学者来说,又不太清楚Cortex M0+与M3之间的区别,M0+满是英文资料,看起来很痛苦。 经过一段时间的学习,总算摸清楚了学习stm32需要哪些资料。以我所使用的stm32L053C8的discovery开发板为例。 1.板级的资料User manual主...
基于Cortex M0+的STM32L0系列简介 简单介绍了ST新推出的STM32L0xx系列。介绍其与STM8L,STML1的对比,stm32L0系列三个子系列x1,x2,x3的不同,还有stm32L0芯片的命令规则。
基于Cortex M0+的STM32L0系列简介 L0系列是意法半导体于2014年新推出的超低功耗的MCU,基于ARM Cortex M0+内核。目前有STM32L0x1,STM32L0x2,STM32L0x3三个子系列,默认主频为32M,RAM都是8KB,最大片上flash为64KB。 对于STM32L0系列的三个子系列的区别在官方的网页上有详细说明 官网网页STM32L1系列也是属于超低功耗系列芯片,但是属于cortex-M...