Entry

高并发下的HashMap(转载:程序员小灰)

╄→гoц情女王★ 提交于 2020-08-09 10:53:58
这一期我们来讲解高并发环境下,HashMap可能出现的致命问题。 HashMap的容量是有限的。当经过多次元素插入,使得HashMap达到一定饱和度时,Key映射位置发生冲突的几率会逐渐提高。 这时候,HashMap需要扩展它的长度,也就是进行 Resize 。 影响发生Resize的因素有两个: 1.Capacity HashMap的当前长度。上一期曾经说过,HashMap的长度是2的幂。 2.LoadFactor HashMap负载因子,默认值为0.75f。 衡量HashMap是否进行Resize的条件如下: HashMap.Size >= Capacity * L oadFactor 1.扩容 创建一个新的Entry空数组,长度是原数组的2倍。 2.ReHash 遍历原Entry数组,把所有的Entry重新Hash到新数组。为什么要重新Hash呢?因为长度扩大以后,Hash的规则也随之改变。 让我们回顾一下Hash公式: index = HashCode( Key ) & ( Length - 1) 当原数组长度为8时,Hash运算是和111B做与运算;新数组长度为16,Hash运算是和1111B做与运算。Hash结果显然不同。 Resize前的HashMap: Resize后的HashMap: ReHash的Java代码如下: /** * Transfers all

阿里云开放平台微前端方案的沙箱实现

雨燕双飞 提交于 2020-08-09 08:46:15
导读 微前端已经成为前端领域如今比较火爆的话题,关于微前端价值的讨论,可以参考克军的 《拥抱云时代的前端开发框架——微前端》 。微前端在技术方面,有一个始终绕不过去话题就是前端沙箱。本篇具体探讨一下,在微前端领域如何实现前端沙箱。 背景 应用沙箱可能是微前端技术体系里面最有意思的部分。一般来说沙箱是微前端技术体系中不是必须要做的事情,因为如果规范做的足够好,是能够避免掉一些变量冲突读写,CSS 样式冲突的情况。但是如果你在一个足够大的体系中,总不能仅仅通过规范来保证应用的可靠性,还是需要技术手段去治理运行时的一些冲突问题,这个也是沙箱方案成为微前端技术体系的一部分原因。 首先纵观各类技术方案,有一个大前提决定了这个沙箱如何做:最终微应用是 单实例 or 多实例 存在宿主应用中。这个直接决定了这个沙箱的复杂度和技术方案。 • 单实例:同一个时刻只有一个微应用实例存在,此刻浏览器所有浏览器资源都是这个应用独占的,方案要解决的很大程度是应用切换的时候的清理和现场恢复。比较轻量,实现起来也简单。 • 多实例:资源不是应用独占,就要解决资源共享的情况,比如路由,样式,全局变量读写,DOM. 可能需要考虑的情况比较多,实现较为复杂。 最开始我们的想法是: 从业务场景:我们可能存在的情况是当用户操作一个产品 A 的同时和另一个产品 B 发生了关联操作,需要唤醒应用 B 做操作

HashMap如何处理hash冲突(重复)问题

痴心易碎 提交于 2020-08-09 07:33:15
核心的概念 map是entry的集合,一个key、value就是一个entry 图解 Java在处理hash冲突的时候使用了链表 图中的0到10号 的方块就是entry(键值对),如果发生hashcode的冲突,就会像4号方块那样,开始向后追加,注意看4号方块的next的属性,那个属性不是null,而是指向了一个方块 来源: oschina 链接: https://my.oschina.net/u/4384335/blog/4274231

Python检查系统可疑用户

生来就可爱ヽ(ⅴ<●) 提交于 2020-08-09 06:39:35
最近一台服务器被***了,***者在服务器上替换了一个系统命令,如ps,ss,netstat,lsof等文件。怎么排查的就不说了。本文的主要目的是写一个检查系统用户的一个脚本,检查哪些系统用户有家目录,哪些用户没有家目录,以及哪些用户可以登录系统。 我们这里的环境有点乱,有的服务器上的web用户可以登录系统,有的系统上却不能登录系统,很是不规范,因此写了这么一个脚本来做检查。接下来,就直接上代码了,主要用到了pwd及spwd模块,比起使用读入/etc/passwd及/etc/shadow文件,然后对其进行处理要方便的多。 # encoding: utf8 # written by lavenliu at 20170211 import pwd import spwd sys_users = {} usr_no_passwd = [] usr_has_passd = [] users_entry = pwd.getpwall() for entry in users_entry: sys_users[entry.pw_name] = entry.pw_shell for username in sys_users.keys(): pass_entry = spwd.getspnam(username) if pass_entry.sp_pwd == '!!' or pass

ThreadLocal会不会内存泄漏?

丶灬走出姿态 提交于 2020-08-09 05:04:09
1. 前言 有关 ThreadLocal 源码分析的文章不少,其中有个问题常被提及:ThreadLocal 是否存在内存泄漏? 不少文章对此讲述比较模糊,经常让人看完脑子还是一头雾水,我也有此困惑。因此找时间跟小伙伴讨论了一番,总算对这个问题有了一定的理解,这里记录和分享一下,希望对有同样困惑的朋友们有所帮助。当然,若有理解不当的地方也欢迎指正。 2. 应用场景 ThreadLocal 的应用场景不少,这里举个简单的栗子:单点登录拦截。 也就是在处理一个 HTTP 请求之前,判断用户是否登录: 若未登录,跳转到登录页面; 若已登录,获取并保存用户的登录信息。 先定义一个 UserInfoHolder 类保存用户的登录信息,其内部用 ThreadLocal 存储,示例如下: public class UserInfoHolder { private static final ThreadLocal<Map<String, String>> USER_INFO_THREAD_LOCAL = new ThreadLocal<>(); public static void set(Map<String, String> map) { USER_INFO_THREAD_LOCAL.set(map); } public static Map<String, String> get() {

哈夫曼编码—文件的压缩与解压(Java)

若如初见. 提交于 2020-08-08 20:58:53
哈夫曼编码—文件的压缩与解压(Java) <!-- more --> 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 压缩代码 package cn.guizimo.huffmancode; import java.io.*; import java.util.*; /** * @author guizimo * @date 2020/8/8 11:55 上午 */ public class HuffmanCode { public static void main(String[] args) { String zipFile = "d://123.png"; String dstFile = "d://123.zip"; zipFile(zipFile, dstFile);; System.out.println("压缩成功!"); } public static void unZipFile(String zipFile, String dstFile) { InputStream is = null; ObjectInputStream ois = null; OutputStream os = null; try { is = new FileInputStream(zipFile); ois =

Map 集合按字母排序方法

放肆的年华 提交于 2020-08-08 18:02:15
@Test public void testMapSort() { Map<String, String> map = new HashMap<>(); map.put("bdc", "bbb"); map.put("caf", "ccc"); map.put("aef", "aaa"); map.put("def", "ddd"); System.out.println("排序前:" + map); //进行排序 List<Map.Entry<String, String>> entries = new ArrayList<Map.Entry<String, String>>(map.entrySet()); Collections.sort(entries, new Comparator <Map.Entry<String, String>>() { @Override public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) { return o1.getKey().compareTo(o2.getKey()); } }); System.out.println("排序后:" + entries); //将key,value拼接 StringBuffer sb = new

哈夫曼编码—数据压缩与解压(Java)

浪尽此生 提交于 2020-08-08 16:03:36
哈夫曼编码—数据压缩与解压(Java) <!-- more --> 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 介绍 赫夫曼编码也翻译为 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式, 属于一种程序算法 赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一。 赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在20%~90%之间 赫夫曼码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,称之为最佳编码 通信领域中信息的处理方式 定长编码 数据传输太长 i like like like java do you like a java // 共40个字符(包括空格) 105 32 108 105 107 101 32 108 105 107 101 32 108 105 107 101 32 106 97 118 97 32 100 111 32 121 111 117 32 108 105 107 101 32 97 32 106 97 118 97 //对应Ascii码 01101001 00100000 01101100 01101001 01101011 01100101 00100000 01101100 01101001 01101011

java接口签名(Signature)实现方案

流过昼夜 提交于 2020-08-08 16:02:54
预祝大家国庆节快乐,赶快迎接美丽而快乐的假期吧!!! 前言   在为第三方系统提供接口的时候,肯定要考虑接口数据的安全问题,比如数据是否被篡改,数据是否已经过时,数据是否可以重复提交等问题。其中我认为最终要的还是数据是否被篡改。在此分享一下我的关于接口签名的实践方案。 如果这种方案不是很好理解,请参考 另一篇 更简单暴力的方案 java接口签名(Signature)实现方案续 。 签名流程 签名规则   1、线下分配 appid 和appsecret,针对不同的调用方分配不同的appid和appsecret   2、加入 timestamp (时间戳),10分钟内数据有效   3、加入流水号 nonce (防止重复提交), 至少为 10 位。 针对查询接口,流水号只用于日志落地,便于后期日志核查。 针对办理类接口需校验流水号在有效期内的唯一性,以避免重复请求。    4、加入 signature ,所有数据的签名信息。   以上红色字段放在请求头中。 签名的生成    signature 字段生成规则如下。   数据部分    Path: 按照path中的顺序将所有value进行拼接    Query :按照key字典序排序,将所有key=value进行拼接    Form :按照key字典序排序,将所有key=value进行拼接    Body :     Json:

webpack入门

混江龙づ霸主 提交于 2020-08-08 14:35:28
前面的话   webpack 是一个模块打包器(module bundler)(例如,Browserify 或 Brunch)。它不是一个任务执行器(task runner)(例如,Make, Grunt 或者 Gulp )。任务执行器就是用来自动化处理常见的开发任务,例如项目的检查(lint)、构建(build)、测试(test)。相对于 打包器(bundler) ,任务执行器则聚焦在偏重上层的问题上面。可以得益于使用上层的工具,而将打包部分的问题留给 webpack   打包器(bundler)帮助你取得准备用于部署的 JavaScript 和样式表,将它们转换为适合浏览器的可用格式。例如,JavaScript可以压缩、拆分 chunk 和懒加载,以提高性能。打包是 web 开发中最重要的挑战之一,解决此问题可以消除开发过程中的大部分痛点   webpack的内容丰富且杂乱,对于新手并不友好。本文以一个实例的形式,对webpack的重要概念进行介绍,并着重说明如何使用webpack 概述   webpack是一个模块打包器。 【特点】   webpack有以下特点 代码拆分   webpack 有两种组织模块依赖的方式,同步和异步。异步依赖作为分割点,形成一个新的块。在优化了依赖树后,每一个异步区块都作为一个文件被打包。 Loader   Webpack 本身只能处理原生的