java |

动态获取泛型的类型

java泛型的概念实际上java中泛型的实现只是一个语法糖,在编译的时候会起作用,帮我们做一些校验,比如String类型的List是否添加了Integer类型的对象。而该校验在编译后会被“擦除”,所以你可以在运行期间跳过泛型检测(例如反射),我们可以实验证实一下。 先写个简单使用泛型的例子: import java.util.List; import java.util.ArrayList; public class TestGeneric { public ...

Kevin Lim
mysql |

数据库基本概念

完整性约束概念数据库完整性约束有很多,主要有以下几种: 实体完整性:规定表的每一行在表中是惟一的实体. 域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定. 参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散. 用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件.用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某 ...

Kevin Lim
算法 |

常用排序算法总结

前言 排序算法做为算法的入门,是比较重要的,虽然在实际开发当中很少自己去实现排序算法,但是掌握其一些基本概念,学会如何去写还是非常有必要的,所以系统的学习总结一下,希望能彻底搞明白这些知识点。如果有读者发现有写的不对的,可以微博私信我,谢谢。 学习算法之前,首先理解一下所谓稳定性的概念。 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这 ...

Kevin Lim
数据结构 |

数据结构--堆

堆的概念 堆首先是一个完全二叉树,我们先看一下完全二叉树的定义 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。 再看看堆的定义(二叉堆) 1.父节点的值总是大于(小于)或等于每一个子节点的值2.每个结点的左子树和右子树也是一个堆 根据堆是一个二叉树,我们可以得出一些特性,假设当前结点在数组中的下标为i 一个结点的左儿子数据所在的下标为(i+1)*2-1 一个结点的右 ...

Kevin Lim
算法 |

动态规划算法浅谈

最近在leetcode上面做题,有一道算法题是求最长回文序列的。Longest Palindromic Substring。 这题我没有做出来,我的思路是最笨的解法,用一个map来存放每个字母出现的所有索引,然后for循环遍历字符串,当字符在map中取出来不为空,就循环遍历取出来的索引集合到当前索引之间满足回文序列的最大值。例如ababac,当遍历到第3个a时,map中a对应的list值为[0,2],找当前索引4到0之间的最大回文序列长,4到2之间的最大回文序列长。时间复杂 ...

Kevin Lim
java |

JVM再探-垃圾收集器和内存分配策略

java程序内存的分配和释放都是由JVM进行管理的,新建一个对象等分配了一定的内存后,当对象不再被引用时,就需要释放对应的内存,这些都统一归JVM管理,对于JVM的内存释放我们称之为垃圾回收. 垃圾收集器算法JVM垃圾收集算法简单分为3类,标记-清除算法,复制算法以及标记-整理算法. 标记-清除算法标记内存中不再被引用的对象,然后在标记完成后进行统一回收.不足:一是效率问题,标记和清除的过程都需要花费一定时间;二是标记清除后产生大量不连续的内存碎片,当大的对象生成时需要 ...

Kevin Lim
java |

JVM初探-内存区域划分

最近写的爬虫抓取某写网站数据时,发现程序有出现OutOfMemory异常..记得以前面试的时候面试官问有没有遇到过OOM,我都不懂对方问的是啥..好了,扯点废话,接下来开始学习一下JVM相关的知识,以便于今后遇到OOM问题知道如何解决. 内存区域划分程序计数器可以看做是一小块内存区域用于存放当前线程所执行的字节码到什么位置了,我们都知道不同线程执行有个CPU轮询分配时间片的过程,假设是单核CPU,线程A执行到三分之一的位置,CPU由于执行线程B,线程A需要暂停执行.这时就 ...

Kevin Lim
redis |

使用redis实现在线人数统计

实现方案用户登录的时候往redis里面存储一个值(对应的在线人数增1),这个值的key值是和这个用户的唯一识别码(例如userId或者username)有联系,在存储的同时,设置其对应的生命周期,比如30分钟,当用户在网站上点击相关操作时(可以结合AOP去实现),重新刷新这个值为30分钟,如果用户什么都不干,30分钟后,redis里面存储的值消失了(对应的在线人数减1),另外用户注销时,直接删除这个用户对应的数据。而我们在获取在线人数的时候不需要对其进行加减操作,我们只需统计 ...

Kevin Lim