ARTS-WEEK2

2019-03-24

本周ARTS

本周ARTS打卡内容:

  1. Algorithm 来源 LeetCode17
  2. Review 分享 一篇go的内存管理
  3. Tip 分享linux命令行查看java线程、内存情况
  4. Share 分享golang Gin框架的实践

Algorithm

LeetCode的17题,手机的字母组合问题:
https://leetcode.com/problems/letter-combinations-of-a-phone-number/

题目要求,给出一个由2-9组成的字符串,返回数字字符串对应的所有可能的字母组合。数字到字母的映射可见手机。

Telephone

首先想到的解法是遍历,遍历数字字符串数组,把每次数字对应的字母列表轮询加到前一步得到的字母列表中,比如“23”,第一个数字对应[“a”,”b”,”c”],第二个数字对应[“d”,”e”,”f”],将第一个数组和第二个数组遍历组合得到[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”],若后续还有数字,将其对应的字母列表与该列表继续遍历组合。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
func letterCombinations(digits string)  []string{
var result, next []string
for i := 0 ;i< len(digits); i++ {
list := numToChar(string(digits[i]))
for _ , l := range list {
if result == nil {
next = append(next, l)
} else {
for _, v := range result {
next = append(next, v+l)
}
}
}
result = next
next = nil
}
return result
}

func numToChar(k string) []string {
if k == "0" {
return []string{" "}
}
if k == "1" {
return []string{""}
}
if k == "2" {
return []string{"a","b","c"}
}
if k == "3" {
return []string{"d","e","f"}
}
if k == "4" {
return []string{"g","h","i"}
}
if k == "5" {
return []string{"j","k","l"}
}
if k == "6" {
return []string{"m","n","o"}
}
if k == "7" {
return []string{"p","q","r","s"}
}
if k == "8" {
return []string{"t","u","v"}
}
if k == "9" {
return []string{"w","x","y","z"}
}
return nil
}

Review

https://povilasv.me/go-memory-management/#fn-1784-7

Review的内容具体可见上一篇文章

https://leitty.github.io/2019/03/24/Golang%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/

Tip

使用jmap -heap pid命令可以观察到JVM堆内存状况,包括年老代、年轻代、Perm、伊甸区的使用情况。

使用jmap pid -dump:format=b, file=可以生成内存堆栈文件。

使用top可以查看cpu资源消耗情况,各进程资源使用情况,使用top -H -p pid可以看到进程对应的线程资源使用情况,或者ps -efL查看线程。

查到线程后转成16进制,通过jstack pid|grep -A 10 0x0000即可看到该java线程具体是做什么的。

Share

分享这个博客:https://github.com/EDDYCJY/blog

Gin框架的实践,作者完成了一个crud系统,同时实现了JWT、Swagger、图片excel上传、redis缓存服务等等功能。