- 博客(16)
- 资源 (8)
- 收藏
- 关注
原创 多线程环境下操作HashMap的问题
HashMap为什么不是线程安全,并发操作Hashmap会带来什么问题:这个问题曾经有一个面试官问过我,当时我天真的以为是读写操作并发时存在脏数据的问题,当时面试官不置可否。我后面回来查资料,发现没有那么简单。并发操作HashMap,是有可能带来死循环以及数据丢失的问题的。具体情况如下:(以下代码转自美团点评技术团队的文章Java8系列之重新认识HashMap)情景如下代码:
2017-08-31 14:22:41 13070 7
原创 关于HashMap的总结
1.HashMap中的负载因子:负载因子越大,表明填满的元素越多,则hash冲突机会越大,查找效率低负载因子越小则数组越稀疏,查找效率高,但是造成空间的浪费。默认为0.75,如果机器内存紧张,对查找速度没有要求可以将负载因子设置大一些,如果机器内存足够,对查找速度要求高则将负载因子设置小一些。当发生hash冲突时,新增的Entry中的key若比较为false,则新增的Entry添加
2017-08-31 00:12:29 270
原创 Java中函数参数是值还是对象的问题
首先,Java中的函数传参只有值传递,不存在其他的形式如果是传递基本数据类型,那没什么好说的,传的是值。如果是传递的对象,传递的也是值,这个“值”是该对象的引用的副本,本质上是一个内存地址。举例如下:public static void main(String[] args) { String s = "aaa"; change(s); System.out.print
2017-08-30 21:33:05 575
原创 Web攻击方式总结
1.XSS(跨站脚本攻击)XSS有三种:1.反射型XSS:将恶意脚本代码注入到请求中,生成恶意链接,诱使用户点击以达到攻击目的2.存储型XSS:攻击代码存储在服务器端,常见的就是攻击者写下一篇具有恶意代码的博客,凡是浏览这篇博客的用户都会在浏览器执行恶意代码。3.DOM XSS:通过innerHTML将输入作为html代码写入到页面,修改了dom节点防御XSS:
2017-08-30 13:31:18 270
原创 HTTP请求、响应的报文格式
HTTP请求:HTTP请求报文的第一行各个字段之间以一个空格隔开。方法 URL HTTP版本 回车换行首部字段(可以是多行)回车换行请求实体HTTP响应:HTTP版本 状态码 状态码文字描述 回车换行首部字段(可以是多行)回车换行响应主体关于状态码:1xx:表示请求收到了,正在处理2xx:表示请求正常处理完毕,常见的就是200:请求成
2017-08-26 23:22:10 424
原创 知识点集锦
并发编程:1.CopyOnWriteJVM:1.强引用、软引用、弱引用、虚引用2.CMS收集器原理3.分代策略和GC算法4.JVM调整堆大小的参数算法:1.二分查找2.时间复杂度的计算
2017-08-21 20:26:09 233
原创 对于队列同步器AbstractQueuedSynchronizer的理解
AbstractQueuedSynchronizer,简称AQS,是一个抽象类,它采用了模板方法模式,降低了自定义同步组件实现的门槛。当需要实现自定义的同步组件时,只需要在自定义组件内部定义一个继承AQS的子类,重写自己需要的方法,再调用AQS提供的模板方法即可。AQS向锁的实现者屏蔽了底层的线程唤醒、阻塞、等待的细节,简化了锁的实现方式。AQS使用一个int成员变量表示同步状态,当该变量为0
2017-08-17 14:50:52 454
原创 自定义独占锁的实现
和ReentrantLock中的lock(),unlock具有一样的效果,都是以AQS为基础实现的/** * 自定义的独占锁 * @author shuaicenglou * */class Mutex implements Lock{ /** * AQS提供的模板方法: * acquire:独占式获取同步状态 * release:独占式释放同步状态 * AQS提供
2017-08-17 14:11:37 617
原创 模板方法模式
模板方法模式,就是定义个操作中算法的骨架,而将操作中的细节推迟到子类去实现。比如说,我定义了一个模板方法叫印刷,这个印刷方法是这样的:首先是"晒版",然后是"打印".那么具体的抽象类如下:/** * 印刷模板 * @author shuaicenglou * */public abstract class Press { public abstract void sun
2017-08-17 13:04:15 160
原创 简单的线程池示例
线程池类采用面向接口编程的方式,这种方式有一个好处就是可以作为Spring管理的一个bean使用,不需要自己new对象,将对象的创建交给容器,岂不是美滋滋,因此基于这个考虑,首先定义一个线程池的接口ThreadPool:package com.shuaicenglou.ThreadPool;public interface ThreadPool { /** * 获取线程池中的线程数
2017-08-16 17:02:32 1504 2
原创 数据库连接池示例以及性能分析
直接上代码:连接池ConnectionPool:package com.shuaicenglou.ConnectionPool;import java.util.LinkedList;public class ConnectionPool { private LinkedList pool = new LinkedList<>(); public ConnectionPool(
2017-08-16 14:34:56 327
原创 个人对于轻量级锁、重量级锁的理解
此处说的轻量级锁、重量级锁都不是java语言上的锁,而是jvm为了提高锁的获取与释放的效率而做的优化的手段。Synchronized关键字用的锁是存放在Java对象头的MarkWord里面的,该MarkWord可以不太恰当地认为是一个标记当使用轻量级锁的时候:线程在执行同步块之前,JVM会在每个线程(即:将会访问同一个同步体的线程)的虚拟机栈中创建用于存储锁记录的空间,并将对象头中的M
2017-08-14 21:55:23 4316 15
原创 自定义类加载器和双亲委派模型
自定义类加载器加载的类与应用程序加载器加载的类的equals、instanceof方法等几个判定所属关系的方法判断的结果是false,哪怕这两个类来自同一个class文件,只要类加载器不一样,其判断的结果就会不一样。当然,使用自定义类加载器加载的Object对象等系统环境路径下的类,比较结果是一样的,因为存在双亲委派模型。package JVM;import java.io.IOExcep
2017-08-12 10:50:00 258
原创 JVM垃圾收集器的搭配
JDK1.5及之前的JDK上:如果jvm运行在client上:1.若为单核CPU:新生代使用Serial,老年代使用Serial Old2.若为多核CPU:新生代使用ParNew,老年代使用CMS(硬件比较高级的情况下,如果普通的双核cpu甚至不如serial+serial old)如果jvm运行在server上:1.若注重吞吐量(比如执行的多为后台计算这种任务):新生代使
2017-08-06 13:18:49 1114
原创 海量数据处理(一):求前10000大的数字
在一个大文件里有1亿条记录,每一行记录为1个数字,统计最大的前10000个数字 * 思路: * 维护一个大小为K的最小堆,并认为初始化之后的堆就是最大的K个元素 * 接来下将从第K+1个元素开始与堆顶元素比较,若大于堆顶元素则将堆顶元素抛弃后新元素入堆 * 全部读取完后将该最小堆进行一次排序即可得到最大的K个数字为了模拟这个问题,生成海量数据的代码如下:import j
2017-08-04 16:25:28 814
原创 剑指offer的java实现(2)
/** * 输出旋转数组的最小元素 * @author shuaicenglou * [3,4,5,1,2] * [1,2,3,4,5] * [1,1,0,1,1] * [1,0,1,1,1] */public class Main6 { public static void main(String[] args) { int[] m = {0,0,0,0}; Syste
2017-08-04 10:28:12 193
第四届Xman个人排位赛流量分析之strange_ssid复现
2019-12-29
第三方服务器获取微信公众号图文消息
2019-07-25
HttpClient发起HTTPs请求.rar
2019-07-25
Java写的AES文件加密软件
2018-12-24
java的ElGamal算法实现
2018-04-25
RSATool2v17.rar
2017-07-20
commons-scxml2-2.0-SNAPSHOT.jar
2017-06-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人