HashMap 阅读
摘要:最近研究了一下java中比较常见的map类型,主要有HashMap,HashTable,LinkedHashMap和concurrentHashMap。这几种map有各自的特性和适用场景。使用方法的话,就不说了,本文重点介绍其原理和底层的实现。文章中的代码来源于jdk1.9版本。 HashMap特点
阅读全文
posted @
2018-08-30 18:53
爱养花的码农
阅读(282)
推荐(0)
JAVA中重写equals()方法的同时要重写hashcode()方法
摘要:object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true;注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声
阅读全文
posted @
2018-08-30 18:27
爱养花的码农
阅读(533)
推荐(0)
全排列
摘要:1 void FullPermutation(int array[],intleft,intright) 2 3 { 4 5 if(left== right) 6 7 { 8 9 for(inti= 0;i<length;i++) 10 11 cout<< array[i]<< " "; 12 15 } 16 17 els...
阅读全文
posted @
2018-08-30 16:05
爱养花的码农
阅读(155)
推荐(0)
查找 二叉树中 k1 到 k2区间的节点
摘要:1 vector res; 2 int key1, key2; 3 4 void traverse(TreeNode * root){//采用前序遍历 5 if(root == NULL) 6 return; 7 if(key1 val && key2 >= root->val)//满足条件的就存入...
阅读全文
posted @
2018-08-30 15:53
爱养花的码农
阅读(264)
推荐(0)
二叉树 序列化 反序列化
摘要:1 public class Solution { 2 public int index = -1; 3 StringBuilder s = new StringBuilder(); 4 String Serialize(TreeNode root) { 5 if(root == null){ 6 s.append("#,...
阅读全文
posted @
2018-08-30 14:39
爱养花的码农
阅读(137)
推荐(0)
n! 阶乘
摘要:其实1、2、3、4、6、7…都是可以不用考虑的,因此选择以5为迭代步数即可。 首先,这些数字都可以不用进行%5(对5取余数)运算,因此每次循环时可以直接将函数的count变量直接加1。其次,考虑25、125、625…等5的幂次项,因为他们每一个都可以在与偶数相乘之后产生多个0。因此,设置一个循环体,
阅读全文
posted @
2018-08-30 10:10
爱养花的码农
阅读(271)
推荐(0)
a+b
摘要:1 import java.io.*; 2 import java.util.*; 3 4 public class Main{ 5 6 public static void main(String[] args) { 7 Scanner in = new Scanner(System.in); 8 int a = in.nextInt...
阅读全文
posted @
2018-08-30 09:47
爱养花的码农
阅读(290)
推荐(0)
storm
摘要:Storm在集群上运行一个Topology时,主要通过以下3个实体来完成Topology的执行工作:1. Worker(进程)2. Executor(线程)3. Task下图简要描述了这3者之间的关系:1个worker进程执行的是1个topology的子集(注:不会出现1个worker为多个topo
阅读全文
posted @
2018-08-24 10:29
爱养花的码农
阅读(181)
推荐(0)
synchronized 详细解说
摘要:转自 http://blog.csdn.net/javazejian/article/details/72828483 出自【zejian的博客】 写的很详细很好,做下记录 本篇主要是对Java并发中synchronized关键字进行较为深入的探索,这些知识点结合博主对synchronized的个人
阅读全文
posted @
2018-08-22 11:01
爱养花的码农
阅读(1113)
推荐(0)
redis 面试
摘要:Redis有哪些数据结构? 字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。 如果你是Redis中高级用户,还需要加上下面几种数据结构HyperLogLog、Geo、Pub/Sub。 如果你说还玩过Redis Module,像BloomFilter,Redis
阅读全文
posted @
2018-08-20 19:41
爱养花的码农
阅读(138)
推荐(0)
jstat命令
摘要:jstat命令使用 jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数] 注意:使用的jdk版本是jdk8. 类加载统计: Loaded:加载class的数量 Bytes:所占用空间大小 Unloa
阅读全文
posted @
2018-08-16 17:14
爱养花的码农
阅读(217)
推荐(0)
bug 调试
摘要:系统性能分析中,CPU、内存和 IO 是主要关注项。 系统层面 1. 对于 CPU,如果是常见的 Linux,可以先用 top 命令查看负载状况。 top -H -p [pid] pstree -p [pid] 2. 利用 free 之类查看内存使用。 3. 对于 IO 问题,既可能发生在磁盘 IO
阅读全文
posted @
2018-08-16 17:12
爱养花的码农
阅读(133)
推荐(0)
redis & memcache
摘要:观点一: 1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等; 2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储; 3、虚拟内存--Redis当物理内存用完时,可以将
阅读全文
posted @
2018-08-15 08:49
爱养花的码农
阅读(164)
推荐(0)
Java进阶知识点:不要只会写synchronized - JDK十大并发编程组件总结
摘要:一、背景 提到Java中的并发编程,首先想到的便是使用synchronized代码块,保证代码块在并发环境下有序执行,从而避免冲突。如果涉及多线程间通信,可以再在synchronized代码块中使用wait和notify进行事件的通知。 不过使用synchronized+wait+notify进行多
阅读全文
posted @
2018-08-09 18:52
爱养花的码农
阅读(996)
推荐(0)
Java进阶知识点:并发容器背后的设计理念
摘要:一、背景 容器是Java编程中使用频率很高的组件,但Java默认提供的基本容器(ArrayList,HashMap等)均不是线程安全的。当容器和多线程并发编程相遇时,程序员又该何去何从呢? 通常有两种选择: 1、使用synchronized关键字,将对容器的操作有序错开,确保同一时刻对同一个容器只存
阅读全文
posted @
2018-08-09 18:51
爱养花的码农
阅读(225)
推荐(0)
Java进阶知识点:服务端高并发的基石 - NIO与Reactor AIO与Proactor
摘要:一、背景 要提升服务器的并发处理能力,通常有两大方向的思路。 1、系统架构层面。比如负载均衡、多级缓存、单元化部署等等。 2、单节点优化层面。比如修复代码级别的性能Bug、JVM参数调优、IO优化等等。 一般来说,系统架构的合理程度,决定了系统在整体性能上的伸缩性(高伸缩性,简而言之就是可以很任性,
阅读全文
posted @
2018-08-09 18:20
爱养花的码农
阅读(290)
推荐(0)
Java进阶知识点:不可变对象与并发
摘要:一、String的不可变特性 熟悉Java的朋友都知道,Java中的String有一个很特别的特性,就是你会发现无论你调用String的什么方法,均无法修改this对象的状态。当确实需要修改String的值时,String方法的实现是构造一个新的String返回给你。如下: 这与C++ STL中的s
阅读全文
posted @
2018-08-09 14:34
爱养花的码农
阅读(1048)
推荐(0)
Java进阶知识点: 枚举值
摘要:Java进阶知识点1:白捡的扩展性 - 枚举值也是对象 一、背景 枚举经常被大家用来储存一组有限个数的候选常量。比如下面定义了一组常见数据库类型: public enum DatabaseType { MYSQL, ORACLE, SQLSERVER } 当围绕这一组常量出现功能上的扩展点时,很多人
阅读全文
posted @
2018-08-08 17:52
爱养花的码农
阅读(1000)
推荐(0)
Java进阶知识点:协变与逆变
摘要:一、背景 要搞懂Java中的协办与逆变,不得不从继承说起,如果没有继承,协变与逆变也天然不存在了。 我们知道,在Java的世界中,存在继承机制。比如MochaCoffee类是Coffee类的派生类,那么我们可以在任何时候使用MochaCoffee类的引用去替换Coffee类的引用(重写函数时,形参必
阅读全文
posted @
2018-08-08 17:33
爱养花的码农
阅读(400)
推荐(0)
Java进阶知识点:更优雅地关闭资源 - try-with-resource
摘要:一、背景 我们知道,在Java编程过程中,如果打开了外部资源(文件、数据库连接、网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们。因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在编程时确保在正确的时机关闭外部资源,就会导致外部资源泄露,紧接着就会出现文件被异常占用,
阅读全文
posted @
2018-08-08 11:21
爱养花的码农
阅读(437)
推荐(0)
总览
摘要:未完待续...................
阅读全文
posted @
2018-08-07 18:47
爱养花的码农
阅读(102)
推荐(0)
java核心技术 笔记
摘要:一 、 总览 1. 类加载机制:jdk内嵌的class_loader有哪些,类加载过程。--后面需要补充 2. 垃圾收集基本原理,常见的垃圾收集器,各自适用的场景。--后面需要补充 3. 运行时动态编译,解释执行,JIT执行热点代码等知识点 hotspot jvm目前是解释与编译同在的混合模式,有c
阅读全文
posted @
2018-08-07 18:47
爱养花的码农
阅读(189)
推荐(0)
Java三种编译方式
摘要:Java程序代码需要编译后才能在虚拟机中运行,编译涉及到非常多的知识层面:编译原理、语言规范、虚拟机规范、本地机器码优化等;了解编译过程有利于了解整个Java运行机制,不仅可以使得我们编写出更优秀的代码,而且还可以使得在JVM调优时更得心应手。 下面我们先来看下Java体系中的三种编译方式:前端编译
阅读全文
posted @
2018-08-07 18:43
爱养花的码农
阅读(5071)
推荐(0)
一个压缩算法
摘要:package algorithm; public class Zigzag { // 对于所有整数,符号位放最后一位。 整数数值位不变;负数除符号位外,全部取反。 public int int_to_compInt(int n) { return (n > 31); } //符号位迁移至第一位。正数数值位不变。负数数值位取反。 public int comInt_to_in...
阅读全文
posted @
2018-08-06 17:31
爱养花的码农
阅读(154)
推荐(0)
GC
摘要:JVM提供的收集器较多,特征不一,适用于不同的业务场景: Serial收集器:串行运行;作用于新生代;复制算法;响应速度优先;适用于单CPU环境下的client模式。ParNew收集器:并行运行;作用于新生代;复制算法;响应速度优先;多CPU环境Server模式下与CMS配合使用。Parallel
阅读全文
posted @
2018-08-01 17:59
爱养花的码农
阅读(146)
推荐(0)
对称性和非非对称性加密
摘要:加密分为两种方式一种是对称加密,一种是非对称加密。 在对称加密算法中,加密和解密使用的密钥是相同的。也就是说,加密和解密使用的是同一个密钥。因此,对称加密算法要保证安全性的话,密钥要做好保密。只能让使用的人知道,不能对外公开。 在非对称加密算法中,加密使用的密钥和解密使用的密钥是不相同的。一把是作为
阅读全文
posted @
2018-08-01 17:58
爱养花的码农
阅读(1301)
推荐(0)