不会飞的章鱼

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

为什么要使用单例?

单例的定义

一个类只允许创建一个对象(或者叫实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。

单例的用处

从业务概念上,有些数据在系统中只应该保存一份,就比较适合设计为单例类。比如,系统的配置信息类。除此之外,我们还可以使用单例解决资源访问冲突的问题。

阅读全文 »

10月份面试偶然遇见一个做基础架构的实验室的招聘,意外结识了三位面试官,上周去了这家公司所在的位置,与负责人S老哥做了一次长达三个小时的谈话,我将内容分块提炼了出来。

你到底想要做什么

这是一个很简单的问题,却有很多人想不明白,包括我在内。

谈话结束后,我想了想,放佛找不到到底想要做什么,本科毕业工作三年,我只能说,我不想做频繁的CRUD工作,我想做有深度、有成长、有成就感的工作,但我现在还没有找到这个工作是什么。

以终为始

阅读全文 »

线程加锁

  • 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 之间要加空格
  • 用空行分隔开不同的逻辑块
  • 逗号后面加空格
阅读全文 »