安全的单例模式 发表于 2020-08-12 分类于 设计模式 阅读次数: Valine: 双重检查模式以双重检查模式为例12345678910111213public class Singleton { private static Singleton singleton; public static Singleton getSingleton(){ if(singleton==null){ synchronized (Singleton.class){ if(singleton==null){ singleton=new Singleton(); } } } return singleton; }} 阅读全文 »
Sql相关知识点总结 发表于 2020-08-08 更新于 2020-08-12 分类于 数据库 阅读次数: Valine: 本文整理了一些常见的sql知识点(包括博客链接整理)如何查找MySQL中查询慢的SQL语句如何查找MySQL中查询慢的SQL语句 阅读全文 »
HashMap和HashTable的区别 发表于 2020-07-25 更新于 2020-07-26 分类于 数据结构 阅读次数: Valine: 基本区别1.线程安全Hashtable是线程安全,HashMap是非线程安全。HashMap的性能会高于Hashtable,我们平时使用时若无特殊需求建议使用HashMap,在多线程环境下若使用HashMap需要使用Collections.synchronizedMap()方法来获取一个线程安全的集合,HashTable中的方法添加了synchronized 阅读全文 »
LRU的实现方式 发表于 2020-05-23 更新于 2020-07-25 分类于 数据结构 阅读次数: Valine: 面试时被问到LRU的实现,决定尝试使用Java实现一下一、基于LinkedHashMapLinkedHashMap中使用了hashmap和双链表,只要重写removeEldestEntry方法,就会在超过固定大小时移除最早的节点 阅读全文 »
平滑加权轮询的Java实现 发表于 2020-03-24 分类于 Java 阅读次数: Valine: 原算法参考文章负载均衡算法 — 平滑加权轮询 本文只是实现了其Java版本 123456789101112131415161718192021222324252627282930313233343536public class LoadBalance { public static void main(String[] args) { int[] config_weight=new int[3];//配置权重 Map<Integer,String> map=new HashMap<>(); map.put(0,"A"); map.put(1,"B"); map.put(2,"C"); config_weight[0]=5; config_weight[1]=1; config_weight[2]=1; int[] eff_weight=config_weight.clone();//有效权重,初始化为配置权重 List<String> list=new ArrayList<>(); for(int i=0;i<7;i++){ list.add(getServer(config_weight,eff_weight,map)); } System.out.println(list); } public static String getServer(int[] config_weight,int[] eff_weight,Map<Integer,String> map){ int currentPos=-1; int max=0; int curWeightSum=0; for(int i=0;i<eff_weight.length;i++){ if(eff_weight[i]>max){ currentPos=i; max=eff_weight[i]; } curWeightSum+=eff_weight[i]; } eff_weight[currentPos]-=curWeightSum; for(int i=0;i<eff_weight.length;i++){ eff_weight[i]=eff_weight[i]+config_weight[i]; } return map.get(currentPos); }}
设置ssh密钥登陆云服务器 发表于 2020-02-15 分类于 Linux 阅读次数: Valine: 使用密码登陆远端云服务器,进入~/.ssh执行:1ssh-keygen123Enter file in which to save the key (/home/eai/.ssh/id_rsa): <====== enter 确认Enter passphrase (empty for no passphrase): <====== 输入密钥密码锁,或者直接enter默认无密码Enter same passphrase again: <====== 再次输入密钥密码锁 阅读全文 »
方法区、永久代和元空间Metaspace 发表于 2020-01-17 分类于 JVM 阅读次数: Valine: 方法区方法区与 Java 堆一样,是各个线程共享的内存区域,它用于存储常量池、域、方法数据、方法体、构造函数、类中专用方法、实例初始化、接口初始化等数据,其大小可以通过参数来设置。通常方法区存储区域的大小在程序启动后就是固定的了,JVM运行一段时间后,需要加载的类通常都已经加载到JVM中了。《Java 虚拟机规范》只是规定了有方法区这么个概念和它的作用,并没有规定如何去实现它。同时,在JDK1.7开始,原本规定在方法区中的常量池移了出来,在Java堆中中开辟了一块区域存放。 阅读全文 »
ubuntu设置可以远端访问docker环境 发表于 2020-01-11 分类于 docker 阅读次数: Valine: 最近使用docker发现无法使用远端访问Linux的docker环境解决办法环境:Ubuntu 16.04步骤: 创建/etc/systemd/system/docker.service.d目录 阅读全文 »
如何防止表单重复提交 发表于 2020-01-10 分类于 计算机网络 阅读次数: Valine: 原因网站中有很多地方都存在表单重复提交的问题,为了防止用户有意或者恶意的重复提交表单,都应该考虑设计防止表单重复提交的机制要防止表单的重复提交,就要标识用户的每一次访问请求,使得每一次访问对于服务端来说都是唯一确定的,为了标识用户的每次访问请求,可以在用户请求的一个表单域增加一个隐藏表单项,这个表单项的值每次都是唯一的token,如: 阅读全文 »
NIO中的内存映射 发表于 2020-01-09 分类于 java 阅读次数: Valine: 内存映射概念这个功能主要是为了提高大文件的读写速度而设计的。内存映射文件(memory-mappedfile)能让你创建和修改那些大到无法读入内存的文件。大多数操作系统都可以利用虚拟内存实现来讲一个文件或者文件的一部分“映射”到内存中,然后,这个文件就可以当作内存数组一样的访问。将文件的一段区域映射到内存中,比传统的文件处理速度要快很多。内存映射文件它虽然最终也是要从磁盘读取数据,但是它并不需要将数据读取到OS内核缓冲区,而是直接将进程的用户私有地址空间中的一部分区域与文件对象建立起映射关系,就好像直接从内存中读、写文件一样,速度会大大加快。 阅读全文 »