java
文章平均质量分 82
liweisnake
这个作者很懒,什么都没留下…
展开
-
聊聊hash
最近对hash有了更多深入的理解。这里也写篇文章专门来聊聊hash。Hash是一种常见的数据结构或者说计算方法,以其O(1)的时间算法复杂度闻名于世。曾有人说,如果世界上只有一种数据结构,那么我选择hash,足见hash的地位及牛逼之处,而代码编写中hash也屡见不鲜,因为他实在是太常见太好用了。但是实际使用过程中,基本的hash是远远不够的,按照用途,对hash其实还有如下需求:1....原创 2020-04-08 21:00:23 · 907 阅读 · 0 评论 -
ClassLoader中getSystemResource与getResource的区别
在开发过程中碰到某些环境无论如何都加载不到资源,而某些环境下却总能加载到资源。事出蹊跷,为了搞清楚这个问题,来到代码中查看原因,发现代码如下:URL url = ClassLoader.getSystemResource(folder);断点后folder=templates,无论如何都加载不到资源导致url总是null。尝试修改代码为,于是一切皆好。URL url = Templ...原创 2019-11-26 17:34:48 · 4530 阅读 · 0 评论 -
java基础中一些值得聊的话题(可以当做面试题)
现在写没有见过的程序基本上都是网上查找,然后copy,这样找个人培训一下也能够做到,那么你的核心竞争力到底在哪呢?答案就是基础。基础牢固的童鞋更容易快速上手和掌握理解新东西。 1. equals和hashcode问题。 在effective java中有这样一条:覆盖equals时总要覆盖hashCode。 在什么场景下会需要去覆盖这两个方法呢?究竟为什么需要在覆盖equa原创 2014-01-01 22:16:31 · 2358 阅读 · 0 评论 -
java基础中一些值得聊的话题(并发篇)
java的并发体系也是非常庞大,而且注意点非常多。这里可能不会面面俱到(否则就是写书了)。 之前写过一篇关于java并发方式的文章。 这里以一个从重到轻的方式来详细聊聊java的并发。 Synchronized和ReentrantLock 最常见的同步方式是synchronized,之所以叫synchronized是因为synchronized会将锁作用于整个对象或者类,而原创 2014-01-06 20:03:34 · 1746 阅读 · 0 评论 -
如何做性能测试
性能优化的常见概念吞吐量(TPS, QPS):简单来说就是每秒钟完成的事务数或者查询数。通常吞吐量大表明系统单位时间能处理的请求数越多,所以通常希望TPS越高越好响应时间:即从请求发出去到收到系统返回的时间。响应时间一般不取平均值,而是要去掉不稳定的值之后再取均值,比如常用的90%响应时间,指的就是去掉了10%不稳定的响应时间之后,剩下90%的稳定的响应时间的均值。从聚类的观点看,其实就是...原创 2017-06-08 22:40:30 · 33381 阅读 · 3 评论 -
手动做UTF-8编码的转换
看到一个题目:不使用 String.getBytes() 等其他工具类/函数完成下面功能 public static void main(String[] args) throws IOException { String str = "Hello, 我们是中国人。"; byte[] utf8Bytes = toUTF8Bytes(str); FileOutputStr原创 2016-07-02 09:02:50 · 3033 阅读 · 0 评论 -
java基础中一些值得聊的话题(内存篇)
在java编程中,内存的问题要么不是问题,要么就是极大的问题。 让我们来看看这些问题包括什么?首先,一个会遇到但是比较难缠的问题是OOM(OutofMemory),跟OOM可能相关的问题是内存泄露;另一个关于内存的问题是GC(garbage collection)。 我们为什么要关注OOM呢?比如一个简单的例子,如果遇到这样一个OOM异常,我们能大致判断出来是什么问题吗?j原创 2014-01-03 17:14:39 · 1635 阅读 · 0 评论 -
spring data JPA
最近使用了spring data jpa来完成数据访问层的实现。感觉比较强大,也比较复杂,中间还有不少限制。话说数据库sql的应用有点像打怪升级,一点一点不断增加难度。文章从4个层次讨论了jpa的用法,层层递进,希望能够帮到使用中的人原创 2016-04-30 15:16:00 · 21666 阅读 · 1 评论 -
终极生产者消费者问题
www.infoq.com/cn/articles/High-Performance-Java-Inter-Thread-Communications?utm_source=infoq&utm_medium=popular_links_homepage原创 2014-03-14 08:20:24 · 1930 阅读 · 0 评论 -
收集一些开源项目的架构图
本文视图以最简短的语言解释各个开源项目的架构,图片均来源于网络 spring spring的核心能力来源于ioc和aop。如果要一句话讲清这两个能力,那么可以这么描述,ioc就是一个大工厂,aop就是动态代理。 如果你不敢相信一个工厂模式有这么大的威力,说实话我也不敢相信,但是它发展至今就是如此牛。围绕着如何构建ioc容器,spring有3个核心子项目,分别是bean, cont原创 2014-01-02 22:11:21 · 3728 阅读 · 0 评论 -
java基础中一些值得聊的话题(加载篇)
在开始java的类加载旅程之前,先普及一下c的链接方式。 我们假设最初的程序10w行代码都写在一个文件里,那么,我们完全可以不需要链接的过程。但是,从可维护性来讲,上面的假设完全不可接受。因此,需要诞生链接器帮我们将不同的文件组合到一块。原创 2014-01-12 20:45:50 · 2353 阅读 · 0 评论 -
java超时控制
超时控制是我们在系统中容易忽视却又不能忽视的功能。一方面,超时并不是我们系统的主要业务功能,大多数超时控制已经被虚拟机或者服务器实现了;另一方面,超时控制是许多业务必备的隐性功能,试想,一个web应用如果在10秒默认超时过后才响应,客户能够忍受吗? 这篇文章主要总结了一些常见的超时处理机制,以及适用的场景。 首先这里提出一个实际遇到的问题,大家可以思考如何解决。在调用corba原创 2013-01-03 15:41:24 · 5076 阅读 · 0 评论 -
javac的结构和执行流程介绍
一直以为我们常用的javac是“高效"的c或c++代码写成的。直到openjdk中也找到他的身影时才发现java其实是如此的强大,只是我们一直没有挖掘出它的潜力罢了。 可以在com.sun.tool.javac中找到javac的初始调用入口,而真正执行编译的类是com.sun.tools.javac.main.JavaCompiler。 如图:可以将编译的过程分为两个大的步骤:语法原创 2013-05-14 08:59:28 · 1423 阅读 · 0 评论 -
java并发的方式
面试的时候问,java有些什么并发的方式解决竞争条件,经常得到的回答是:synchronized, 我承认,这个回答没有问题。但是,能够再深入一点,再全面一点吗? 让人觉得眼前一亮的回答是:按照性能从坏到好,可以分为阻塞式加锁,非阻塞式加锁,无锁几种情况。 阻塞式加锁:即采用synchronized和ReentrantLock(还可以顺便说一下自旋锁,偏向锁等等),他们都是重量原创 2013-06-19 19:47:43 · 1134 阅读 · 0 评论 -
java中等待所有线程都执行结束
今天看到一篇文章,是关于java中如何等待所有线程都执行结束,文章总结得很好,原文如下http://software.intel.com/zh-cn/blogs/2013/10/15/java-countdownlatchcyclicbarrier/?utm_campaign=CSDN&utm_source=intel.csdn.net&utm_medium=Link&utm_content=ot原创 2013-10-23 14:55:30 · 7257 阅读 · 3 评论 -
JDBC的误用-从一个outofmemory中想到的
最近在写一个对数据库进行批处理并调用其他开源库索引的程序。但总是运行几分钟后就OOM,最初的报错让我怀疑是那个开源库不够健壮,后来才发现是JDBC程序写得有问题。 OOM的确非常难定位问题,因为很可能耗内存的大户是A,但是有可能不幸的B刚好在分配内存时撞上OOM,于是堆栈都是关于B的错误,如果顺着堆栈,很可能会误导我们。 遇到OOM不要慌张,可以打开神器jvirtualvm,该原创 2013-10-07 20:15:35 · 1720 阅读 · 0 评论