关闭
当前搜索:

(转载一篇对JDK动态代理原理说的很透彻的文章)细说JDK动态代理的实现原理

转载一篇解释JDK动态代理实现原理很清楚的文章。看到很多博文讲JDK动态代理时,只是抓着JDK提供的Proxy类(创建动态代理类)和InvocationHandler(拦截代理方法调用)层面来讲。Proxy和InvocationHandler只是JDK提供给我们的API,只看这两个类根本不会明白什么是动态代理。其实JDK动态代理最关键的还是JVM帮我们做了很多事,包括动态代理类的生成加载,以及生成...
阅读(136) 评论(0)

(实验)Java一个线程用synchronized嵌套锁多个对象时调用wait()只释放wait函数关联的所对象还是释放所有锁对象

题目起的比较拗口,其实用代码说明起来更简单,如下所示: private static Object lock1 = new Object(); private static Object lock2 = new Object(); private static class Task1 implements Runnable { @Override...
阅读(139) 评论(0)

堆排序的Java实现(用最大堆实现从小到大排序)

堆排序原理和示意图不多说了,网上各种有。总结下其最核心的思想: (1)自底向上,自右向左遍历建堆。这里的底不是指最后一个节点,而是最后一个非叶子节点。每个非叶子节点与其左儿子与右儿子(假如有的话)相比,如果父节点小,那么将左右儿子中较大的那个与父节点交换,然后递归调整被交换的儿子所在的子树,让其继续满足堆性质。 (2)自顶向下调整,使得整个二叉树和其任意子树都满足堆特性。内容和上面建堆中的递归...
阅读(83) 评论(0)

一篇对伪共享、缓存行填充和CPU缓存讲的很透彻的文章

转载至 http://geek.csdn.net/news/detail/114619 看了很多网上讲解java伪共享、缓存行填充和CPU缓存的MESI等等,零零碎碎,目前感觉就这篇文章讲的最清楚,忍不住转载下。 原文如下: 认识CPU Cache CPU Cache概述 随着CPU的频率不断提升,而内存的访问速度...
阅读(192) 评论(0)

用Intellij+Maven搭建Tomcat源码开发环境步骤

编程的实践性非常强,光看不练事倍功半,就像设计模式,除了看各种书籍记下23种设计模式,还需要在实际工作中非常“刻意”的去运用,才会加深理解,否则根本不知道为何要诞生某一种设计模式。 对于成熟的开源框架、容器的学习,除了看源码之外,在实践上似乎无从下手——这些家伙太成熟了,封装的很好,大多时候我们只是用他们的接口和注解,知道怎么配置就可以了;不少的人在工作中也很少对框架进行二次开发和扩展;...
阅读(119) 评论(0)

Sunday算法的一种Java实现(Leetcode28. Implement strStr())

Leetcode第28题Implement strStr()。即寻找字符串里模式串第一次出现的位置。 这类字符串匹配查找的问题,无外乎KMP,BM,Sunday算法。KMP太烧脑,BM和Sunday算法本质上是一样的,但是Sunday算法更取巧,效率更高(天下间的算法要是都有像Sunday算法那样短小精悍的版本,该多好...)。具体原理网上各种有。直接上代码: public c...
阅读(143) 评论(0)

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的条件,不返回该条记录。 那么如果...
阅读(1480) 评论(0)

采用Java阻塞IO对已经到达的socket流实现非阻塞完整读取(一个简单的java http server实现)

最近写服务器时想到一个问题:用Java Bio(即Socket)写服务器,怎么一次性完整读取已经到达的Socket流。 对这个需求有很多角度的设定,也有很多解法。我们来一一具化这个需求: (1) 解法:依赖http协议的content-length。 分析:很直观的想法,可以根据http请求头给定一个固定长度的字节或字符缓存,从中获取content-length,就知道往后要在从流...
阅读(1225) 评论(0)

一种基数排序的Java实现

基数排序 原理不多说了,适用于输入数据量n远大于数据最高位数m的情况。 给出一种简单实现,不太想写特别底层的逻辑,中间依赖下TreeMap。 package com.jxshen.example.algorithm.sort; import java.util.Collections; import java.util.Iterator; import java....
阅读(128) 评论(0)

MyBatis查询无记录时的返回值(备忘用)

在MyBatis 3.4.1下 如果Dao的返回值是实体,则select查询无记录时返回null。 如果Dao的返回值是List,则select查询无记录是返回的是[],也就是空数组,而不是null。所以这时候判空需要用CollectionUtils.isNotEmpty(),而不是"==null"...
阅读(250) 评论(0)

MyBatis批量插入返回主键

用MyBatis进行批量插入时: 语句 SELECT LAST_INSERT_ID() 只适用于单条记录插入时返回主键到实体的id字段上 如果想要批量插入后返回所有主键到插入实体的id字段上, 需要在insert上加上useGeneratedKeys和keyProperty,如下所示: 而且,这个insert里面不能再加上面的selectKey语句...
阅读(160) 评论(0)

windows下vue项目启动步骤

前后端分离项目,要做前后端联动测试,没整过前端用vue, nodejs和webpack的开发管理方式。来回折腾终于把已经建好的vue项目启动起来,做个笔记记录下步骤备用,只针对没有任何前端项目启动经验的,可能对别人没有参考意义: os:windows7 (1)git clone已建的vue项目(强迫症患者非要写,废话) (2)装好nodejs,最新版本6.10以上的好像都能自...
阅读(9834) 评论(1)

mysql5.7在windows7下my.ini文件加载路径及数据位置修改

因为要将公司线上数据库传输到本地做测试,捣鼓了半天本地mysql的data位置修改,网上资料也有很多介绍,重复的不赘述,写自己遇到的问题供大家参考。 mysql版本:5.7 os:windows7 (不同的mysql版本在安装路径 data路径和my.ini的启动配置文件路径上可能有差异,不做研究) 更改mysql的数据位置,除了网络上资料讲的:(1)关闭mysql...
阅读(11967) 评论(0)
    个人资料
    • 访问:25693次
    • 积分:352
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:2篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论