/**
* 进制转换
*/
public static void main(String[] args) {
int x = 8;
// 十进制转二进制 方式一
System.out.println(Integer.toBinaryString(x));
// 十进制转二进制 方式二
System.out.println(Integer.toString(x, 2));
// 二进制转十进制
System.out.println(Integer.valueOf("1000", 2));
}
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
一开始看到这个题目,很是迷惑,不熟悉链表的数据结构,不清楚 ListNode
参数对象是什么样子的,想要做这个题目,首先需要构建一个单链表。
单链表每个节点必然包含
知道单链表的数据结构后,对于此题依旧毫无头绪,不知如何下手,只有先看题解,进行分析理解。
与官方题解有点不同,对
l1.val == l2.val
节点值相等的情况,做了单独处理,减少了递归次数。public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) { return l2; } else if (l2 == null) { return l1; } else if (l1.val < l2.val) { l1.next = mergeTwoLists(l1.next, l2); return l1; } else if (l1.val > l2.val) { l2.next = mergeTwoLists(l1, l2.next); return l2; } else { l2.next = mergeTwoLists(l1.next, l2.next); l1.next = l2; return l1; } }
首先判断 l1
和 l2
是否为 null
,如果为 null
,直接返回另一方数据,这个比较好理解,一方为 null
,直接使用另一方链表,不需要对链表的节点数据进行比较排序了。
如果 l1
和 l2
节点都不为 null
,那么比较两方节点中的数据值。
分为三种情况
l1.val < l2.val
①l1
节点的位置确定,因为l1
节点的值小,按顺序要排在前面。 ②l2
节点的位置无法确定,需要与l1
节点的下一个节点值进行比较。 ③l1
节点的指针指向 ② 的结果。 ④ 返回l1
节点。l1.val > l2.val
①l2
节点的位置确定,因为l2
节点的值小,按顺序要排在前面。 ②l1
节点的位置无法确定,需要与l2
节点的下一个节点值进行比较。 ③l2
节点的指针指向 ② 的结果。 ④ 返回l2
节点。l1.val == l2.val
①l1
和l2
节点的位置都可以确定,且紧密相邻。 ②l1
节点的下一个节点值 和l2
节点的下一个节点值进行比较。 ③l2
节点的指针指向 ② 的结果。 ④l1
节点指向l2
节点。 ⑤ 返回l1
节点。
迭代循环第 1、2 步,直到 l1
或 l2
节点为 null
复杂度分析
l1 节点数为 n l2 节点数为 m
- 时间复杂度为 O(n)
会遍历每一个节点 (n + m) 进行比较
- 空间复杂度为 O(n)
最多会调用 (n + m) 次函数
双十一阿里云搞优惠活动,早就想接触下阿里云的产品了,随即购买了阿里云的服务器,还挺便宜一年 199 元,不知道下一年的双十一会不会比这个优惠,同时也购买了域名,申请了免费的 SSL 证书。
云服务器分配完毕后,开始搭建环境、配置 Nginx 服务,Nginx 服务配置参考了菜鸟教程的 Nginx 安装配置
购买的域名是 liuhongfeng.cn
,本来是想购买 liuhongfeng.com
这个域名的,无奈已被别人占用,域名购买成功后,配置解析到已买的阿里云服务器,解析成功后就可以直接通过域名访问服务了,但是域名没有进行备案,访问域名跳转到了备案提示页面,不备案是不行的,接着在阿里云进行域名备案,初审、邮寄幕布、拍照、提交资料到管局,千等万等,18 天后备案终于成功。
阿里云的免费证书还是很好申请的,工作日的话,基本半个小时就申请下来了,在证书控制台下载 Nginx 版本证书,文件解压后会得到下面这两个文件:
.crt
文件是安全证书
.key
文件是证书的私钥文件
将 .crt
证书文件的扩展名修改为 .pem
在 Nginx 的安装目录下创建 cert
目录,并且将两个文件拷贝到 cert
目录中,如下图所示:
conf
目录中的 nginx.conf
文件,在文件的最后添加如下配置信息:
# HTTPS server
server {
listen 443; #监听的端口
server_name localhost;
ssl on;
root html; #网站目录
index index.html index.htm; #默认访问文件优先顺序
ssl_certificate cert/cert-1541670637888_www.liuhongfeng.cn.pem;
ssl_certificate_key cert/cert-1541670637888_www.liuhongfeng.cn.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
保存退出
nginx.conf
的正确性
[root@hongfeng nginx]# /usr/local/webserver/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/webserver/nginx/conf/nginx.conf test is successful
[root@hongfeng nginx]# /usr/local/webserver/nginx/sbin/nginx -s reopen
此时通过 https://liuhongfeng.cn
或者 https://www.liuhongfeng.cn
访问服务会显示如下:
跳转后的链接左侧,出现小锁子的图标,说明 SSL 证书安装成功。
但是此时通过 liuhongfeng.cn
或 www.liuhongfeng.cn
访问还不是 https
请求,需要将访问的默认 80 端口请求重定向到 https
的 443 端口上,这就用到了 Nginx 的 rewrite
的方法,将所有的 http
请求通过 rewrite
重写到 https
上。
再次编辑 nginx.conf
文件,将 server_name
的值设为域名地址,下面追加 rewrite ^(.*)$ https://$host$1 permanent;
,如下所示:
server {
listen 80;
server_name liuhongfeng.cn;
rewrite ^(.*)$ https://$host$1 permanent;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
保存退出
再次执行第4、5步,访问 liuhongfeng.cn
或 www.liuhongfeng.cn
就直接跳转到了 https://liuhongfeng.cn
或 https://www.liuhongfeng.cn
SSL 证书是遵守 SSL 安全套接层协议的服务器数字证书。SSL 证书由浏览器中受信任的根证书颁发机构在验证服务器身份后颁发,具有网站身份验证和加密传输双重功能。
HTTPS 是一种基于 SSL 协议的网站加密传输协议。
网站安装SSL证书后,使用 HTTPS 加密协议访问,可激活客户端浏览器到网站服务器之间的 SSL 加密通道(SSL 协议),从而实现高强度双向加密传输,防止传输数据被泄露或篡改。简单来说,HTTPS = HTTP + SSL,是 HTTP 的安全版。
名词解释参考: 名词解释_产品简介_SSL证书-阿里云
在 Git 命令学习过程中,遇到在 IDEA 开发工具的 Terminal 下执行 git log
提交说明中文显示乱码,输出如下:
$ git log
commit dbdc72b768154d62bb39dd7998b4fb663d33fa4a
Author: liuhongfeng <liuhongfeng@git>
Date: Thu Sep 27 16:33:37 2018 +0800
<E6><89><93><E5><8C><85><E9><83><A8><E7><BD><B2>
在 Windows 系统 Git 安装目录 Git\etc
下找到 bash.bashrc 文件,编辑器打开后,在尾行追加如下内容:
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
关闭当前 Terminal 的 session 连接,然后 New Session 连接,终端下再次执行 git log
$ git log
commit dbdc72b768154d62bb39dd7998b4fb663d33fa4a
Author: liuhongfeng <liuhongfeng@git>
Date: Thu Sep 27 16:33:37 2018 +0800
打包部署
提交说明中文显示正常