- 博客(19)
- 收藏
- 关注
原创 如何在MySQL的存储过程中书写批量的用户权限/授权语句
网上单独关于MySQL用户权限或者存储过程的文章有不少,但是关于在存储过程中如何书写用户授权语句,尤其是批量授权的资料却很少。为什么笔者会遇到在存储过程中书写批量用户授权语句的需求,是因为笔者在日常开发中承担了一部分简单的运维职责(笔者还是很赞同开发兼运维的思想),其中就包括在公司内部机器中搭建MySQL服务。搭建MySQL服务有一项内容就是配好用户和权限管理。笔者不是专职的数据库运维,在...
2018-08-06 16:41:44 1909
原创 线上环境JVM问题排查常用指令
线上和测试环境的JVM一般运行在linux服务器上,没有界面,遇到问题时需要用指令工具进行排查。这方面的学问博大精深,而且实战重于理论,这篇文章仅仅当作日常问题排查的笔记,方便自己查阅,各方面的细节网上有很多文章进行过深入探讨。1. Tomcat配置排查问题时不一定只围绕程序日志、linux系统性能指令和JDK工具,有时候看看程序部署的tomcat配置文件,也许会有帮助。把${TOMC...
2018-07-28 20:32:56 2009
原创 避坑必看:很详尽的MyBatis返回自增主键实验(包括插入或更新SQL语句insert on duplicate key update的自增主键返回情况)
目录1. 实验对比维度(1)单纯的insert和insert on duplicate key update(2)selectKey和useGeneratedKeys(3)@Param和parameterType(4)单个和批量(5)keyProperty写法2. 基本概念介绍(1)插入或更新SQL(简称InsertOrUpdate)(2)selectKey和u...
2018-07-20 00:48:44 31705 23
原创 @Validated和@Valid区别:Spring validation验证框架对入参实体进行嵌套验证必须在相应属性(字段)加上@Valid而不是@Validated
Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR-303规范),配合BindingResult可以直接提供参数验证结果。其中对于字段的特定验证注解比如@NotNull等网上到处都有,这里不详述在检验Controller的入参是否符合规范时,使用@Va...
2018-04-17 10:57:15 147787 38
原创 Spring Cloud下配置eureka.instance.instance-id使得服务实例在eureka界面增加显示版本号
SpringCloud体系里的,服务实体向eureka注册时,注册名默认是“IP名:应用名:应用端口名”,即${spring.cloud.client.ipAddress}:${spring.application.name}:${spring.application.instance_id:${server.port}}。在eureka界面下显示如图: 有些文章说默认的in
2018-01-27 17:19:17 67453 9
原创 Spring Cloud Zuul 在版本Edgware.RELEASE断路超时配置无法生效问题
搭建Zuul工程时,用的SpringCloud版本为Edgware.RELEASE(没上更高的版本,因为部署环境tomcat和jdk的限制,更高的怕不兼容)。在改网关断路器的超时时间时,试了各种姿势,从zuul本身到ribbon到hystrix配置,均无法生效。试过的配置参数如下:zuul:zuul.retryable=truezuul.ribbon-isolation-strate
2018-01-20 20:08:50 2894 3
转载 (转载一篇对JDK动态代理原理说的很透彻的文章)细说JDK动态代理的实现原理
转载一篇解释JDK动态代理实现原理很清楚的文章。看到很多博文讲JDK动态代理时,只是抓着JDK提供的Proxy类(创建动态代理类)和InvocationHandler(拦截代理方法调用)层面来讲。Proxy和InvocationHandler只是JDK提供给我们的API,只看这两个类根本不会明白什么是动态代理。其实JDK动态代理最关键的还是JVM帮我们做了很多事,包括动态代理类的生成加载,以及生成
2017-12-04 15:08:54 794
原创 (实验)Java一个线程用synchronized嵌套锁多个对象时调用wait()只释放wait函数关联的所对象还是释放所有锁对象
题目起的比较拗口,其实用代码说明起来更简单,如下所示: private static Object lock1 = new Object(); private static Object lock2 = new Object(); private static class Task1 implements Runnable { @Override
2017-11-18 11:28:10 7273 6
原创 堆排序的Java实现(用最大堆实现从小到大排序)
堆排序原理和示意图不多说了,网上各种有。总结下其最核心的思想:(1)自底向上,自右向左遍历建堆。这里的底不是指最后一个节点,而是最后一个非叶子节点。每个非叶子节点与其左儿子与右儿子(假如有的话)相比,如果父节点小,那么将左右儿子中较大的那个与父节点交换,然后递归调整被交换的儿子所在的子树,让其继续满足堆性质。(2)自顶向下调整,使得整个二叉树和其任意子树都满足堆特性。内容和上面建堆中的递归
2017-11-16 12:44:34 2726
转载 一篇对伪共享、缓存行填充和CPU缓存讲的很透彻的文章
转载至http://geek.csdn.net/news/detail/114619看了很多网上讲解java伪共享、缓存行填充和CPU缓存的MESI等等,零零碎碎,目前感觉就这篇文章讲的最清楚,忍不住转载下。原文如下:认识CPU CacheCPU Cache概述随着CPU的频率不断提升,而内存的访问速度
2017-11-09 10:08:36 13364 6
原创 用Intellij+Maven搭建Tomcat源码开发环境步骤
编程的实践性非常强,光看不练事倍功半,就像设计模式,除了看各种书籍记下23种设计模式,还需要在实际工作中非常“刻意”的去运用,才会加深理解,否则根本不知道为何要诞生某一种设计模式。对于成熟的开源框架、容器的学习,除了看源码之外,在实践上似乎无从下手——这些家伙太成熟了,封装的很好,大多时候我们只是用他们的接口和注解,知道怎么配置就可以了;不少的人在工作中也很少对框架进行二次开发和扩展;
2017-10-28 23:13:31 3726 3
原创 Sunday算法的一种Java实现(Leetcode28. Implement strStr())
Leetcode第28题Implement strStr()。即寻找字符串里模式串第一次出现的位置。这类字符串匹配查找的问题,无外乎KMP,BM,Sunday算法。KMP太烧脑,BM和Sunday算法本质上是一样的,但是Sunday算法更取巧,效率更高(天下间的算法要是都有像Sunday算法那样短小精悍的版本,该多好...)。具体原理网上各种有。直接上代码:public c
2017-07-30 23:35:46 938
原创 MySQL left join on 左表连接字段为null的返回结果
写个博客备忘用...MySQL 左连接(右连接类似)查询,例 select * from A left join B on A.id = B.id where...A表是会返回所有符合where条件的记录,B表不满足A.id=B.id的记录则不会返回(同时B也要满足where条件)如果B的连接字段id本身为null,那么视为不满足on的条件,不返回该条记录。那么如果
2017-07-17 16:10:12 52942 9
原创 采用Java阻塞IO对已经到达的socket流实现非阻塞完整读取(一个简单的java http server实现)
最近写服务器时想到一个问题:用Java Bio(即Socket)写服务器,怎么一次性完整读取已经到达的Socket流。对这个需求有很多角度的设定,也有很多解法。我们来一一具化这个需求:(1)解法:依赖http协议的content-length。分析:很直观的想法,可以根据http请求头给定一个固定长度的字节或字符缓存,从中获取content-length,就知道往后要在从流
2017-06-07 14:28:11 7243 1
原创 一种基数排序的Java实现
基数排序 原理不多说了,适用于输入数据量n远大于数据最高位数m的情况。给出一种简单实现,不太想写特别底层的逻辑,中间依赖下TreeMap。package com.jxshen.example.algorithm.sort;import java.util.Collections;import java.util.Iterator;import java.
2017-06-01 18:53:30 394
原创 MyBatis查询无记录时的返回值(备忘用)
在MyBatis 3.4.1下如果Dao的返回值是实体,则select查询无记录时返回null。如果Dao的返回值是List,则select查询无记录是返回的是[],也就是空数组,而不是null。所以这时候判空需要用CollectionUtils.isNotEmpty(),而不是"==null"
2017-05-17 11:18:49 9757
原创 MyBatis批量插入返回主键
用MyBatis进行批量插入时:语句SELECT LAST_INSERT_ID()只适用于单条记录插入时返回主键到实体的id字段上如果想要批量插入后返回所有主键到插入实体的id字段上, 需要在insert上加上useGeneratedKeys和keyProperty,如下所示:而且,这个insert里面不能再加上面的selectKey语句
2017-05-12 19:37:22 1649
原创 windows下vue项目启动步骤
原创,转载请标注引用地址,谢谢~ 前后端分离项目,要做前后端联动测试,没整过前端用vue, nodejs和webpack的开发管理方式。来回折腾终于把已经建好的vue项目启动起来,做个笔记记录下步骤备用,只针对没有任何前端项目启动经验的,可能对别人没有参考意义: os:windows7 (1)git clone已建的vue项目(强迫症患者非要写,废话)(2)装好node...
2017-05-03 14:19:36 55737 8
原创 mysql5.7在windows7下my.ini文件加载路径及数据位置修改
因为要将公司线上数据库传输到本地做测试,捣鼓了半天本地mysql的data位置修改,网上资料也有很多介绍,重复的不赘述,写自己遇到的问题供大家参考。mysql版本:5.7os:windows7(不同的mysql版本在安装路径 data路径和my.ini的启动配置文件路径上可能有差异,不做研究)更改mysql的数据位置,除了网络上资料讲的:(1)关闭mysql
2017-05-03 10:51:03 22324
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人