不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

线程加锁

  • Go 语言不仅仅提供基于 CSP 的通讯模型,也支持基于共享内存的多线程数据访问

  • Sync 包提供了锁的基本原语

  • sync.Mutex 互斥锁
    Lock()加锁,Unlock 解锁

  • sync.RWMutex 读写分离锁
    不限制并发读,只限制并发写和并发读写

  • sync.WaitGroup
    等待一组 goroutine 返回

  • sync.Once
    保证某段代码只执行一次

  • sync.Cond
    让一组 goroutine 在满足特定条件时被唤醒

Mutex 示例

Kubernetes 中的 informer factory

阅读全文 »

什么是云原生

  • 在包括公有云、私有云、混合云等动态环境中构建和运行规模化应用的能力。
  • 云原生是一种思想,是技术、企业管理方法的集合。

技术层面:

  • 应用程序从设计之初就为在云上运行而做好准备。
  • 云平台基于自动化体系。

流程层面:

阅读全文 »

为什么需要 Go 语言

Go 语言的原则

Less is exponentially more
– Rob Pike, Go Designer

Do Less, Enable More
– Russ Cox, Go Tech Lead

为什么需要 Go 语言

阅读全文 »

系统设计分析

Scenario 场景

秒杀系统场景

2020 年6 月18 日 0 点开始,京东自营限量 100台,以 4000 元的价格,抢购 iPhone 11 64G 版本,先到先得,一人限购一台,售完即止。
微信抢红包
抢春运火车票
抢购小米手机

QPS 分析

阅读全文 »

题目

lintcode

暴力循环O(n^3)

1
2
3
4
5
6
伪代码
for 起点 O(n)
for 终点 O(n)
检测中间的子串是不是一个回文串 O(n)

时间复杂度:O(n^3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#python3
class Solution:
"""
@param s: input string
@return: a string as the longest palindromic substring
"""
def longestPalindrome(self, s):
# write your code here
for length in range(len(s),0,-1):
for i in range(len(s) - length + 1):
l,r = i,i+length-1
while l < r and s[l] == s[r]:
l+=1
r-=1
if l>=r:
return s[i:i+length]
return ""
阅读全文 »

面试评分和 Offer 的关系

  • 有 >= 1 个 Strong No Hire => No offer
  • 有 >= 2 个 No hire => No offer
  • 有 1 个 No Hire + 1 个 Weak Hire => No Offer
  • 有 1 个 No Hire,其他都是 Hire => Offer or 加面(取决于公司招人多不多,门槛高不高)
  • 有 1 个 Weak Hire => Offer or 加面
    特殊情况:
  • 一个 Strong Hire + 一个 Strong No Hire => 开个会一起讨论一下,通常结果是加面或者No Offer。

快速提高 Coding Quality的十二个技巧

Coding Style 相关

  • 二元运算符两边加空格,单元运算符不加空格
  • 花括号和 for, if 之间要加空格(Java),圆括号和 if 之间要加空格
  • 用空行分隔开不同的逻辑块
  • 逗号后面加空格
阅读全文 »