prism

看完还不懂HashMap算我输(附职场面试常见问题)

馋奶兔 提交于 2020-04-09 04:22:36
HashMap的原理与实现 版本之更迭: –》JDK 1.7 : Table数组+ Entry链表; –》JDK1.8 : Table数组+ Entry链表/红黑树;(为什么要使用红黑树?) 一问HashMap的实现原理 你看过HashMap源码吗,知道底层的原理吗 为什么使用数组+链表 用LinkedList代替数组可以吗 既然是可以的,为什么不用反而用数组。 重要变量介绍: ps:都是重要的变量记忆理解一下最好。 DEFAULT_INITIAL_CAPACITY Table数组的初始化长度: 1 << 4 2^4=16 (为什么要是 2的n次方?) MAXIMUM_CAPACITY Table数组的最大长度: 1<<30 2^30=1073741824 DEFAULT_LOAD_FACTOR 负载因子:默认值为 0.75 。 当元素的总个数>当前数组的长度 * 负载因子。数组会进行扩容,扩容为原来的两倍(todo:为什么是两倍?) TREEIFY_THRESHOLD 链表树化阙值: 默认值为 8 。表示在一个node(Table)节点下的值的个数大于8时候,会将链表转换成为红黑树。 UNTREEIFY_THRESHOLD 红黑树链化阙值: 默认值为 6 。 表示在进行扩容期间,单个Node节点下的红黑树节点的个数小于6时候,会将红黑树转化成为链表。 MIN_TREEIFY

Java注解入门到精通,这一篇就够了

不问归期 提交于 2020-04-09 04:21:54
阅读本文建议先看下目录,把握整体脉络。最好是使用过或者自定义过注解,即使没有用过注解,文章中的示例一定要自己动手敲一敲,本文将会带你更深一步揭开注解的真面目,看不懂你来捶我< 一、为什么要学注解? ​ 在日常开发中,基本都是在使用别人定义或是各种框架的注解,比如Spring框架中常用的一些注解: @Controller 、 @Service 、 @RequestMapping ,以此来实现某些功能,但是却不知道如何实现的,所以如果想学习这些框架的实现原理,那么注解就是我们必知必会的一个点。其次,可以利用注解来自定义一些实现,比如在某个方法上加一个自定义注解,就可以实现方法日志的自动记录打印,这样也可以展现足够的逼格。所以如果你想走上人生巅峰,更好的利用框架,又或者想要高一点的逼格,从团队中突出,那么学习注解都是前提。 二、注解是什么? ​ 在Java中注解其实就是写在接口、类、属性、方法上的一个标签,或者说是一个特殊形式的注释,与普通的 // 或 /**/ 注释不同的是:普通注释只是一个注释,而注解在 代码运行时 是可以被 反射 读取并进行相应的操作,而如果没有使用反射或者其他检查,那么注解是没有任何真实作用的,也不会影响到程序的正常运行结果。 ​ 举个例子 @Override 就是一个注解,它的作用是告诉阅读者(开发人员、编译器)这个方法重写了父类的方法,对于开发人员只是一个标志

初识Spring

蓝咒 提交于 2020-04-09 04:19:02
初学Spring笔记整理 Spring简介 Spring Bean 定义 Spring Bean 作用域 例子: (1)用无参构造方法创建对象 (2)用带参的构造方法创建对象 (3)用静态工厂创建对象 (4)用非静态工厂创建对象 Spring的单例模式和多例模式 Spring框架的依赖注入 依赖注入简介 依赖注入的类型: (1)setter方法注入: (2)调用带参的构造方式注入: (3)p名称空间注入: (4)spel表达式注入: 复杂类型注入 (1)List是一种按照序号标识的集合 (2)Set与List相似但是元素不允许重复 (3)Map则是一种自定的键值对,键值都可以是任意的类型。 Spring `property`标签中的 ref属性和ref 标签有什么不同? Spring简介 1. Spring官网: http://spring.io/ Spring是一个 开放源代码 的设计层面框架,它解决的是业务逻辑层和其他各层的 松耦合问题 ,因此它将 面向接口的编程思想 贯穿整个系统应用,Spring是于2003年兴起的一个轻量级的Java开发框架。由 Rod Johnson 创建。简单来说, Spring是一个分层的JavaSE/EE full-stack(一站式)轻量级开源框架 Spring是一个非常活跃的开源框架, 基于IOC和AOP 来构架多层JavaEE系统

慧编程:光环板--MQTT扩展使用说明

送分小仙女□ 提交于 2020-04-09 04:14:42
慧编程:光环板–MQTT扩展使用说明 一、前言 前几天为光环板写了一个MQTT的扩展(ps:不得不说:慧编程(mblock)的开发者平台真的很不错( https://ext.makeblock.com ):简单,方便,入手快!👍👍👍)。今天从慧编程的产品那里得知:有很多用户对光环板的MQTT协议还不知道如何使用!为了让更多的用户能够学会使用MQTT扩展,于是写下了这篇MQTT的教程! 二、加载MQTT协议 首先,先添加我们的光环板设备 然后在指令栏中-添加扩展-MQTT 在用到我们的MQTT功能之前首先你要有一个物联网平台的账户,扩展默认的物联网平台是( iot.dfrobot.com.cn )当然也可以使用本地物联网平台。 登录IoT网站,注册账号。进入工作间。新建一个设备,默认名字“设备一”。 一个账号,默认一共有10000条信息的储存容量。这些容量共所有设备共享。例如,图中设备上方显示“0/1000”,那么此设备最大可储存1000条信息,已使用0条信息的储存空间。如果此设备收发的信息超过1000条,新信息将不再存入。 每个设备默认每隔1s储存一次消息。 观察到设备唯一识别码Topic以及左侧的用户信息,点击眼睛图标可以将隐藏的Iot_id和Iot_pwd显示出来。 为了稍后编程需要,记下相关账号 : iot_id: Skv3zKyNb iot_pwd: r1lD3ztJ4b

二分法模板

馋奶兔 提交于 2020-04-09 04:14:28
13. 二分搜索 给定一个有序的数组,查找value是否在数组中,不存在返回-1。 int BinarySearch ( int array [ ] , int n , int value ) { int left = 0 ; int right = n - 1 ; // 如果这里是 int right = n 的话,那么下面有两处地方需要修改,以保证一一对应: // 1 、下面循环的条件则是 while ( left < right ) // 2 、循环内当 array [ middle ] > value 的时候,right = mid while ( left <= right ) // 循环条件,适时而变 { int middle = left + ( ( right - left ) >> 1 ) ; // 防止溢出,移位也更高效。同时,每次循环都需要更新。 if ( array [ middle ] > value ) right = middle - 1 ; // right赋值,适时而变 else if ( array [ middle ] < value ) left = middle + 1 ; else return middle ; // 可能会有读者认为刚开始时就要判断相等,但毕竟数组中不相等的情况更多 // 如果每次循环都判断一下是否相等,将耗费时间 }

USACO黑色星期五

我怕爱的太早我们不能终老 提交于 2020-04-09 04:13:28
题目描述: 13号又是一个星期五。13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数。给出N年的一个周期,要求计算1900年1月1日至1900+N-1年12月31日中十三号落在周一到周日的次数,N为正整数且不大于400. 这里有一些你要知道的: 1、1900年1月1日是星期一. 2、4,6,11和9月有30天.其他月份除了2月都有31天.闰年2月有29天,平年2月有28天. 3、年份可以被4整除的为闰年(1992=4*498 所以 1992年是闰年,但是1990年不是闰年). 4、以上规则不适合于世纪年。可以被400整除的世纪年为闰年,否则为平年。所以,1700,1800,1900和2100年是平年,而2000年是闰年. 请不要调用现成的函数 请不要预先算好数据 (就是叫不准打表)! 输入格式: 一个正整数n. 输出格式: 输出请从周六开始 样例: 输入 #1 20 输出 #1 36 33 34 33 35 35 34 题目看完后我首先想到的是判断闰年,于是定义了判断闰年的函数: int judge ( int year ) { if ( year % 4 == 0 && year % 100 || year % 400 == 0 ) { return 1 ; } return 0 ; } 定义一下数组,存平年和闰年的月份的

MODBUS移植STM32,分别配置STM32做从机和主机

久未见 提交于 2020-04-09 04:12:59
MODBUS移植STM32,分别配置STM32做从机和主机 近期自学了MODBUS通信协议,也从网上找了很多资料,自己也分别做了从机和主机的配置,现在进行配合操作 MCU采用STM32F103C8T6 实现功能,主机分别对从机实现读和写的操作 主机要用到一个外部中断实现发数据的操作 一、配置从机 1.1、配置系统实现定时1MS的功能 初始化系统时钟为72MHZ /****************************************************************************** * @brief 选择外部时钟或者内部时钟并进行倍频 * @param RCC_PLLSource:PLL时钟源 : 可以选择:RCC_PLLSource_HSI_Div2、RCC_PLLSource_HSE_Div2、RCC_PLLSource_HSE_Div1 PLLMUL:PLL输入时钟的倍频系数 范围:RCC_CFGR_PLLMULL2~16 PLL时钟根据时钟和倍频来确定,选择内部时钟最高64M * @retval ******************************************************************************/ void SysClock_Configuration(uint32_t RCC

IDL 一种用来快速优化“云检测”速度的方法

主宰稳场 提交于 2020-04-09 04:12:10
利用im2col提高云检测的速度 常规的“云检测”在计算“滑块”的标准差的时候都是采用双重循环的方式,逐行逐列的进行计算,这样会导致速度很慢。本人提出一种快速计算矩阵“滑块”标准差的方法。 需要读者首先掌握im2col方法:https://blog.csdn.net/luqialiu3392/article/details/105352620 ; im2col函数 FUNCTION fun_col2im , column , input_shape , filter_h , filter_w , stride = stride , pad = pad param_number = N_PARAMS ( ) IF param_number EQ 4 THEN BEGIN w = input_shape [ 0 ] h = input_shape [ 1 ] out_h = FLOOR ( ( h + 2 * pad - filter_h ) / stride ) + 1 out_w = FLOOR ( ( w + 2 * pad - filter_w ) / stride ) + 1 column = REFORM ( column , [ out_w , out_h , filter_w , filter_h ] ) ; column = TRANSPOSE ( column ,

用 C 语言开发一门编程语言 — 语法解析器

不问归期 提交于 2020-04-09 04:08:22
目录 文章目录 目录 前文列表 编程语言的本质 实现语法解析器 使用 MPC 解析器组合库 安装 快速入门 波兰表达式 正则表达式 实现波兰表达式的语法解析 前文列表 《 用 C 语言开发一门编程语言 — 交互式 Shell 》 《 用 C 语言开发一门编程语言 — 跨平台 》 编程语言的本质 在 19 世纪 50 年代,语言学家 Noam Chomsky 定义了一系列关于语言的重要理论。这些理论支撑了我们今天对于语言结构的基本理解。其中重要的一条结论就是: 自然语言都是建立在递归和重复的子结构之上的 。Chomsky 提出的理论是非常重要的。它意味着,虽然一门语言可以表达无限的内容,我们仍然可以使用有限的规则去解析所有用该门语言写就的东西。这些有限的规则就叫语法(grammar)。 当我们学习一门自然语言的时候,我们往往从语法开始。当我们学习一门编程语言的时候也一样,当我们尝试开发一门编程语言的时候亦如此,首先要考虑的就是语言的语法、及其语义。 实现语法解析器 为了定义一门编程语言的语法,首先需要能够正确解析用户按照语法规则编写的程序。为此,需要编程语言程序就需要一个语法解析器,用来判断用户的输入是否合法,并产生解析后的内部表示。内部表示是一种计算机更容易理解的表示形式,有了它,我们后面的解析、求值等工作会变得更加的简单可行。 使用 MPC 解析器组合库 MPC(Micro

linux基础命令-生成ssh密钥

陌路散爱 提交于 2020-04-09 04:04:34
需求:在配置jenkins持续部署的时候需要配置SSH但是我基本忘记了,并且遇到了错误 Failed to connect change directory:jenkins.plugins.publish_over.BapPublisherException:Failed to conn 创建一个SSH KEY ssh-keygen -t rsa 命令行出现: 询问你输入SSH KEY的文件名,默认是id_rsa/id_rsa.pub Enter file in which to save the key ( /root/.ssh/id_rsa ) : 询问你输入密码,记住passphrase,在jenkins会非常有用 Enter passphrase ( empty for no passphrase ) : 这两个直接空格就可以,方便快捷。 2. 之后会在/root/.ssh目录下看到三个文件 id_rsa(私钥), id_rsa.pub(公钥), authorized_keys 3. 将id_rsa.pub中的内容粘贴到应用服务器的/root/.ssh/authorized_keys下,若是没有自己创建。 点赞 1 收藏 分享 文章举报 天又热了 发布了140 篇原创文章 · 获赞 81 · 访问量 1万+ 私信 关注 来源: oschina 链接: https://my