加密算法
算法 | 长度 |
---|---|
MD5 | 128bit |
SHA1 | 160bit |
SHA256 | 256bit |
算法 | 长度 |
---|---|
MD5 | 128bit |
SHA1 | 160bit |
SHA256 | 256bit |
节点定义
构造
遍历
应用
常见解题思路 递归,根据当前节点信息、递归左子树返回数据、递归右子树返回数据,判断是否解决;有时需要额外的变量存储结果。
图解 思路 参考 leetcode,忽略 random 优化的思路步骤如下。
1 | /** |
测试
1 |
|
输出
1 | [ -1, 0, 0, 1, 1, 2, 3, 3, 4, 8, 9 ] |
在一些场景下,我们需要通过 new 来创建 spring bean,而不是借助 spring 框架,这时会遇到 @Autowired
注解的字段没有初始化的问题(null)。 此时,可以借助 aspect 来解决,具体步骤可以分为三步。
context:spring-configed
-javaagent:/path/to/aspectjweaver-{version}.jar
对于 spring boot,启用 context:spring-configed
可以在 Application 类上使用注解 @EnableSpringConfigured
来实现,可能还需要 @EnableAspectJAutoProxy
注解。对于xml配置,可以添加如下代码。
1 | <aop:aspectj-autoproxy/> |
[TOC]
1 | d := time.Duration(10) |
1 | fmt.Printf("%v", []float64{0.1, 0.5, 0.99, 0.999}) |
1 | urlBaiduFanyiSug := "https://fanyi.baidu.com/sug" |
1 | // []byte -> string; bys: []byte |
1 | go mod tidy # 整理依赖, 下载没有下载的, 移除没有的 |
1 | git config --global --add url."git@your-repo.com:".insteadOf "https://your-repo.com/" |
1 | go list -m -versions git.*.com/org/repo |
1 | go get git.*.com/org/repo |
阶段 | STW(STOP THE WORLD) |
---|---|
STW sweep termination | YES |
concurrent mark and scan | NO |
STW mark termination | YES |
1 | GODEBUG=gctrace=1 ./<program> <parameters> |
1 | gctrace: setting gctrace=1 causes the garbage collector to emit a single line to standard |
1 | gc # @#s #%: #+#+# ms clock, #+#/#/#+# ms cpu, #->#-># MB, # MB goal, # P |
gc #
:编号@#s
:自程序启动到打印 gc 日志的时间#%
:自程序启动,gc 花费的时间占比#+#+# ms clock
:垃圾回收时间,(sweep)+(mark & scan)+(termination)#+#/#/#+# ms cpu
:垃圾回收占用的 CPU 时间 (sweep)+(mark & scan (辅助时间/后台gc时间/空闲时间))+(termination)#->#-># MB
:gc 开始时堆大小、gc 结束时堆大小、存活堆大小#MB goal
:全局堆大小#P
:使用的处理器数量ms cpu 约等于 cpu_num * ms clock
示例
1 | gc 35 @1130.489s 1%: 0.71+3290+0.12 ms clock, 5.7+5932/26084/4619+1.0 ms cpu, 35956->37042->8445 MB, 37411 MB goal, 32 P |
参考
1 | curl http://127.0.0.1:12067/debug/pprof/profile > profile.dat |
1 | string -> int32 |
GLIBC_2.32' not found
1 | 错误 |
针对 redis 的 benchmark,可使用 redis 自带的 redis-benchmark
工具。
1 | 命令 |
参数 | 说明 | 默认值 | 示例 |
---|---|---|---|
-h | 主机 | 127.0.0.1 | |
-p | 端口 | 6379 | |
-a | 密码 | ||
-s | 指定服务器socket | ||
-c | 客户端并发连接数 | 50 | |
-n | 请求数 | 10000 | |
-d | 以字节的形式指定 SET/GET 值的数据大小 | 2 | |
-k | 连接保持,1=keep alive 0=reconnect | 1 | |
-r | SET/GET/INCR 使用随机 key, SADD 使用随机值 | ||
-P | 通过管道传输 <numreq> 请求 |
1 | |
-q | 强制退出 redis,仅显示 query/sec 值 | ||
–csv | 以 CSV 格式输出 | ||
-l | 生成循环,永久执行测试 | ||
-t | 仅运行以逗号分隔的测试命令列表 | set,lpush | |
-l | Idle 模式,仅打开 N 个 idle 连接并等待 |
1 | redis-benchmark -h <host> -p <port> -t set -n 100000 -d 1024 -a <password> |
ReLU(Rectified linear unit),线性整流函数。
ReLU(a) = max(0, a)
我们的 consul dashboard(基于 consul ui 源码,新增了权限控制,独立部署)突然出现 504 异常。
打开浏览器调试器的 network,查看异常的请求。
/v1/*
接口,向部署的node应用发送请求,node 应用再将请求通过插件( express-http-proxy
)代理转发至 consul server。
很奇怪,其他所有机房都没有问题。而且,多刷几次,偶尔可以正常响应。
这一台机器的 Java 服务报了奇怪的 \n not found: limit=0 content=�~@�
异常。
1 | [ERROR 2021-03-15 20:21:39.114] com...init(ConsulBase.java:58) [[consul] init consul base failed, e=[com.orbitz.consul.ConsulException: Error connecting to Consul |
看样子,是无法连接consul,接口异常?此外,由于无法连接consol,报了一堆无法找到服务端的RPC异常,这也正常,注册中心连不上,肯定也就拿不到服务列表。
我们的 C++ 服务( 使用库ppconsul
),直接报了无法注册的异常。
1 | E0315 19:28:54.129444 11661 ...cpp:456] [consul] register local consul agent failed! |
首先,尝试重启 consul server。不重启还好,一重启,这台机器之前注册的服务全没了,怎么重启服务都注册不上。
随后,查看consul日志,伴随着不太明了的异常。
于是,想通过consul程序,看下members,确认加入了集群,但是…
他,出错了,很奇怪的错。
1 | Error retrieving members: Get "http://127.0.0.1:8500/v1/agent/members?segment=_all": EOF |
到这里,可以想到的是,是consul接口出问题。开始的时候前端请求异常,应该也是因为代理请求consul接口,出错导致的。凡事都有个但是,排查端口发现,有正常的连接建立啊。
而且呢,还很多。
等等… 难道… 是因为… 太多了?赶紧搜下。
好吧,找到了这里。
单个 IP 限制的最大连接数,是 200。行吧。改大试试吧。
1 | { |
至此,好了。
错误信息
1 | 2023/11/10 14:48:23 [ERR] memberlist: Failed to send gossip to 172.31.153.158:9301: write udp 127.0.0.1:8301->192.168.6.8:9301: sendto: invalid argument |
解决
修改绑定地址 -bind=192.168.6.5
。
1 | consul agent -config-dir=/etc/consul.d/ -data-dir=/var/lib/consul/ -bind=192.168.6.5 |
1 | 列举目录 |