Map key 和 value 是否可以为 null
目录(结论):
HashMap key 和 value 都可以为 null
HashTable、ConcurrentHashMap 中的 key 和 value 均不能为 null,但 ConcurrentHashMap 是主动判空,而 HashTable 的 value 主动判空,key 则是 调用 key.hashCode() 抛出异常
[toc]
HashMap key 和 value 都可以为 null验证:
123456789public static void main(String[] args) { Map<Integer, Integer> map = new HashMap<>(); map.put(null, 1); map.put(1, null); System.out.println(map.get(null)); // 输出 1 System.out.println(map.get(1)); // 输出 null System.out.println(map.get(99 ...
GitBash 设置命令别名
1vim /etc/profile.d/aliases.sh
然后编辑需要的命令别名即可
CentOS 7 安装 Node.js 和 npm
添加NodeSource到yum源1curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -
安装Node.js和npm1sudo yum install nodejs
验证(打印安装的版本)12node --versionnpm --version
Spring Task 定时任务
Spring Task 定时任务Spring Task 定时任务可通过两种方式进行配置:1、注解配置,2、XML配置
前期准备创建 Maven 项目,在 pom.xml 文件中添加 spring-context 依赖
12345<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.4.RELEASE</version></dependency>
1、通过@Scheduled注解配置方式实现定时任务
在 src/main/resources/spring/ 目录下创建 spring-task.xml 文件,配置注解扫描和开启 @Scheduled 注解
1234567891011121314151617<?xml version="1.0" encoding="UTF-8" ...
Cron 表达式
Cron 表达式
cron - Wikipedia
Cron表达式 (aliyun.com)
Cron 表达式介绍Cron 表达式是一个具有时间含义的字符串,由 5 个或 6 个空格隔开,分为 6 个或 7 个域,每个域表示不同的含义。单个域可以有多个值,使用半角,隔开,值可以是确定的取值,也可以是具有逻辑含义的特殊字符。
域取值
域
是否必须
取值范围
特殊字符
秒
是
[0,59]
* , - /
分钟
是
[0,59]
* , - /
小时
是
[0,23]
* , - /
日期
是
[1,31]
* , - / ? L W
月份
是
[1, 12]或[JAN, DEC]
* , - /
星期
是
[1, 7]或[MON, SUN]
* , - / ? L #
年份
否
注:月份和星期的缩写不区分大小写
特殊字符
特殊字符
含义
示例
*
所有可能的值。
在月域中,*表示每个月;在星期域中,*表示星期的每一天。
,
列出枚举值。
在分钟域中,5,20表示分别在5分钟和20分钟触发一次。
-
范围。
在分钟域中,5-20 ...
IDEA 自动添加作者、日期等信息
IDEA 自动添加作者、日期等信息点击 File → Settings → Editor → File and Code Templates,进入到入下图页面,输入想要的模板即可。提供几种常用的模板:
风格1:官方Style
12345/** * @Author i@likeqc.top * @Date ${DATE} ${TIME} * @Version 1.0 */
风格2:简约Style
123/** * Created by i@likeqc.top on ${DATE} ${TIME} */
ps:此种方式使用与新建类时自动添加作者信息,需要在方法上添加作者信息可以点击此链接。
IDEA、Tomcat 乱码解决方法
IDEA、Tomcat 乱码解决方法1、将IDEA 的配置全改为 UTF-8 编码
File → Settings(快捷键 Ctrl + Alt + S) → Eidtor → File Encodings 中圈出来的三个地方的编码格式都改为 UTF-8 。
IDEA配置文件 添加-Dfile.encoding=UTF-8
2、修改Tomcat配置文件
Tomcat安装目录 → conf → logging.properties,全都改为 UTF-8 编码
Tomcat VM options 添加 -Dfile.encoding=UTF-8
likeqcends
MySQL 修改 root 密码的方法
MySQL 修改 root 密码的方法
转载自菜鸟教程,亲测可用,记下来备用
方法1:用 SET PASSWORD 命令
首先登录 MySQL(命令行或UI工具均可)
格式:
1set password for 用户名@localhost = password('新密码');
例子:
1set password for root@localhost = password('123');
方法 2:用 mysqladmin
格式:
1mysqladmin -u用户名 -p旧密码 password 新密码
例子:
1mysqladmin -uroot -p123456 password 123
方法 3:用 UPDATE 直接编辑 user 表
例子(适用于MySQL5.7以下版本):
123use mysql; update user set password=password('123') where user='root' and host='localhost'; flus ...
二叉树的遍历
二叉树遍历(先序、中序、后序)二叉树的节点类型1234567891011class TreeNode { int val; //左子树 TreeNode left; //右子树 TreeNode right; //构造方法 TreeNode(int x) { val = x; }}
先序遍历12345678910111213141516171819202122232425// 递归先序遍历public static void fun(TreeNode root) { if (root != null) { System.out.print(root.val + ""); fun(root.left); fun(root.right); }}// 非递归,需要使用到栈public static void fun_2(TreeNode root) { Stac ...
TCP 协议如何保证可靠传输
TCP 协议如何保证可靠传输TCP报文段头部
TCP 保证可靠传输的方式有:校验和、序列号、超时重传、流量控制、拥塞控制。
校验和
在发送和接收数据时,都会计算检验和,若不一致,说明数据在传输过程中出现了错误,则丢弃出错的数据包。
序列号和确认应答
TCP发送的每一个报文段都有序号字段,每次接收到数据后,都会对传输方发送 ACK 报文进行确认应答。接收方可以根据序列号对数据包进行排序和去重,把有序的数据传输给应用层,确认号可以告诉发送方成功接收了哪些数据以及下一次的数据从哪里开始发送。
超时重传
当 TCP 发出一个报文后,会启动一个定时器,如果超时还没有收到确认,发送发将重发这个报文。
约定最大报文长度
建立 TCP 连接时,双方约定最大报文段长度作为发送单位,理想的长度是刚好不被网络层分片。
流量控制
TCP 通过滑动窗口实现流量控制,窗口的大小就是发送方无需等待 ACK 的情况下还能发送的最大数据量,TCP 通过窗口大小来协调端对端的发送速度,确保接收端来得及接收,从而减少丢包。
拥塞控制
慢开始
避免一开始就向网络中发送大量数据,所以 cw ...