昆山

昆山对房地产业太重要了,有多家五十强公司从本省出发,第一站放在昆山,在昆山坐稳了再进军全国。

昆山是从省内公司向全国性公司的重要节点,在特别的时间段里,甚至是唯一的可成功节点。

既然昆山是可成功节点,那肯定有必失败节点。哪些城市是必失败节点呢?

背后的深层次原因是什么呢?

隐忍阻碍了组织进化

分享一段 少时读书看到各种隐忍的典范,进入职场后经常扮演隐忍的角色。

但是年届不惑后,反省长期坚持隐忍实际上阻碍了组织进化,因为你没有和组织进行充分的磨合。

这段话不是反对隐忍,而是认识到隐忍对组织不利的一面。

安邦的土地

金融街笔记20180510

我很财迷安邦在国贸外头的十几亩地,长安街北侧。

某次过去,看到如此肥美的一大块土地,靠院墙种了几十棵高大的杨树,空旷的院子里停了许多员工私家车。瞬间醉了,我拍拍肚皮,何时入我囊中?

Python知识图谱

Python从初级到高级.jpg

Python 2.3开始使用至今,整理历年经验所得,知识图谱,希望有助于学习Python的同学。

写了二十万行左右的Python代码,是Python让我得以在帝都安身立命。

技术选型

当时选择Python引入到项目团队中来,考察了当时可以接触到的几乎所有的编程语言,比如C, C++, Java, Perl, PHP, Delphi, Pascal, 甚至研究能不能使用 Masm 写出来一套满足项目需要的基础框架出来。

项目需要大量的数据处理,需要应对高频的新需求,需要跨平台迁移到不同的Linux或AIX上面运行。

提出了著名的3C原则, C Complete,能不能覆盖绝大部分的问题域, C Cost,成本,既包含开发成本也包括运维成本,也包含迭代成本,C Change,快速应对变化。

基于上述3C原则,特别最后一个C,我决定选择了Python

选择Python的其他原因

  1. Google把Python作为公司层面的第三门编程语言,和C、Java并列(大厂背书)
  2. 当时非常流行的BitTorrent下载软件使用Python开发(成功实践)
  3. 可以参考BitTorrent源代码(可以学习)

知识来源

日后的开发经历中,的确多多从BitTorrent源代码中受益。当时可以学习的资料非常用有限,中文资料稀缺到几乎可以说没有。

当时三个知识来源

  1. Python官方,教父写的早期文档和各种PEP
  2. Google
  3. BitTorrent源代码

方法论

第一个版本开发出来,部署上线,即取得非常惊艳的效果,效率比其他语言开发的史前版本高出1个数量级,功能和处理逻辑复杂于史前版本,但是效率依旧高出一个数量级。

第二年开始重构,这个时候我已经非常熟悉Python的语言特性,也观摩过若干个知名开源项目的源代码。在重构中引入单元测试。

这段学习让我总结出来的方法论如下

  1. 选择合适的工具可以大幅度降低研发成本和确保交付品质
  2. 识别不同的知识来源,善用之
  3. 选择恰当的重构或优化时间点,避免早期重构和过度优化

获奖感言

BTW

  1. 感谢Python 之父 Guido van Rossum
  2. 把单元测试技术介绍给我的哥们,名字叫黄冬,后来担任优酷土豆的CTO。

Python高级码农面试题

应年轻人邀请假设作为面试官的话,会问哪些问题呢。下面整理笔者可能提出的Python高级码农面试题如下。

如有谬误,欢迎斧正。

  1. 循环内创建正则表达式然后直接使用,可以吗?说明理由
  2. 代码中多处重复定义的常量字符串,会保留几份呢?比如China Power Boy 出现1000次。
  3. 动态属性有哪几种实现方式,说说你使用动态属性的场景
  4. Python处理128和1024两个整数有什么不同呢?
  5. 说说你阅读Python编译器源代码后,对编程什么帮助?如果没有阅读过源代码也努力说一说。
  6. 第三方知名框架和你的项目代码有什么不同呢?说说看,框架使用了哪些高级语言特性
  7. 使用监控工具监控Python程序,有什么注意事项?你监控过吗?
  8. 正常运行的Python程序经常死掉,你准备怎么优化呢
  9. 复杂参数列表作为函数参数,和字典作为函数参数,有效率区别吗?请说明原因。形如如下两种函数参数方式
1
2
3
4
def func(a, b, c, d, e, f, g)
....

def func(dictX)

平安三怼

分享这些年因公去平安大厦的三件事情,值得分享。

第一次去我搜罗了摆在架子上所有的产品彩页,各种花花绿绿的图册。(外部视角)

第二次去特别关注了股东八卦,组织八卦,其它八卦。有一条八卦至今让我受益匪浅。(内部视角)

第三次去聊了三个没有答案只能怼的问题,签字画押。当时我被怼的非常尴尬,脸色发白,天热,汗。既然是怼,当然我说不出来什么。能够提出来这三个生怼的问题,我的心思暴露无遗,可惜对方漠视了。(我的视角)

以后沟通的时候,如果你生怼对方,或者对方生怼你,那么一定要重新思考一下怼的问题。

世上从来就没有没来由的生怼。

……

十二个月后,我梦想成真。

图片发自简书App

微信小程序审核经验

BTW,最近使用京东 Taro完成小程序的开发,并且通过腾讯的审核。

各位如果在执行过程中,萌发放弃的念头,不要苛责自己,有放弃的念头是正常的,但是扭头还是继续做下去。 关于审核提供几条经验(并非我做得好)

① 不要留下那些并未启用的页面或页面元素,腾讯哥会探测

② 在代码中删除所有未真正使用的服务端接口 比如 /xxx/unused,腾讯哥会去探测你的服务端接口

③ 如果你的服务端的确会出错的话,还是给予带有错误码的JSON返回

④ 在服务端处理的时候,特别警惕传入参数类型,比如你要求整数,腾讯哥探测的时候,他不知道你是整数

⑤文笔对题,上下文一致,卖猪肉的就不要说养猪,养猪的不要谈兽医,不要扩大自己的业务范围,尽量压缩,至少于我们对标题的直观判断一致。审核特别害怕你扩大自己的业务范围

Taro快速入门目录

Taro 多端统一开发框架,支持用 React 的开发方式编写一次代码,生成能运行在微信小程序/百度智能小程序/支付宝小程序、H5、React Native 等的应用。

Taro 特性

React 语法风格

Taro 的语法规则基于 React 规范,它采用与 React 一致的组件化思想,组件生命周期与 React 保持一致,同时在书写体验上也尽量与 React 类似,支持使用 JSX 语法,让代码具有更丰富的表现力。 代码示例

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
import Taro, { Component } from '@tarojs/taro'
import { View, Button } from '@tarojs/components'

export default class Index extends Component {
constructor () {
super(...arguments)
this.state = {
title: '首页',
list: [1, 2, 3]
}
}

componentWillMount () {}

componentDidMount () {}

componentWillUpdate (nextProps, nextState) {}

componentDidUpdate (prevProps, prevState) {}

shouldComponentUpdate (nextProps, nextState) {
return true
}

add = (e) => {
// dosth
}

render () {
return (
<View className='index'>
<View className='title'>{this.state.title}</View>
<View className='content'>
{this.state.list.map(item => {
return (
<View className='item'>{item}</View>
)
})}
<Button className='add' onClick={this.add}>添加</Button>
</View>
</View>
)
}
}

快速开发微信小程序

Taro 立足于微信小程序开发,众所周知小程序的开发体验并不是非常友好,比如小程序中无法使用 npm 来进行第三方库的管理,无法使用一些比较新的 ES 规范等等,针对小程序端的开发弊端,Taro 具有以下的优秀特性:

✅ 支持使用 npm/yarn 安装管理第三方依赖。

✅ 支持使用 ES7/ES8 甚至更加新的 ES 规范,一切都可自行配置。

✅ 支持使用 CSS 预编译器,例如 Sass 等。

✅ 支持使用 Redux 进行状态管理。

✅ 支持使用 Mobx 进行状态管理。

✅ 小程序 API 优化,异步 API Promise 化等等。

支持多端开发转化

Taro 方案的初心就是为了打造一个多端开发的解决方案。目前 Taro 代码可以支持转换到 微信/百度/支付宝小程序 、 H5 端 以及 移动端(React-Native)。

  1. 初始化环境