API Security Checklist
身份认证
不要使用Basic Auth,使用标准的认证协议(如JWT,OAuth)。
不要再造Authentication,token generating,password storing这些轮子,使用标准的。
在登录中使用Max Retry和自动封禁功能。
加密所有的敏感数据。
JWT(JSON Web Token)
使用随机复杂的密钥(JWT Secret)以增加暴力破解的难度。
不要在请求体中直接提取数据,要对数据进行加密(HS256或RS256)。
使token的过期时间尽量的短(TTL,RTTL)。
不要在JWT的请求体中存放敏感数据,它是可破解的。
OAuth 授权或认证协议
始终在后台验证redirect_uri,只允许白名单的URL。
每次交换令牌的时候不要加token(不允许response_type=token)。
使用state参数并填充随机的哈希数来防止跨站请求伪造(CSRF)。
对不同的应用分别定义默认的作用域和各自有效的作用域参数。
访问
限制流量来防止DDos攻击和暴力攻击。
在服务端使用HTTPS协议来防止MITM攻击。
使用HSTS协 ...
Code Review Checklist
代码作者应该关注的列表作为代码的作者,应该保证:
代码编译成功并且通过静态检查(没有警告)
代码通过所有的测试(单元测试、集成测试和系统测试)
你已经仔细检查了拼写错误,并做了处理(注释、todo等)
概述代码修改的原因以及修改了哪些地方
除此之外,作为代码作者,也应该在提交审查之前,按照代码审查者的列表对自己的代码进行审查。
代码审查者应该关注的列表作为代码审查者,你的任务是寻找最重要的问题。评论代码的结构性或逻辑性问题会更有价值,即使有时候会显得挑剔。
你应该知道什么是好的代码反馈。另外需要注意,最好的代码审查反馈不是点评,而是建议。所以不要说“变量名称应该是removeObject”,最好说“调用变量removeObject怎么样?”。
下面这份列表足够帮助你提出好的代码审查反馈了。
实现
此代码更改会执行它应该做的事情吗?
这种解决方法是最简单的吗?
这个更改有引入一些不需要的编译时或运行时的依赖吗?
是否使用了不应该使用的框架、API、库、服务?
是否存在可以提升解决方法的未使用的框架、API、库、服务?
代码是否处于正确的抽象级别?
代码的模块化是否做的足够好?
你是否 ...
2019年“互联网女皇”报告重磅出炉:你想要的干货全在这里!
原文地址:2019年“互联网女皇”报告重磅出炉:你想要的干货全在这里! 转载
导读:北京时间6月12日凌晨,“互联网女皇”玛丽·米克尔发布了《2019年互联网趋势报告》。报告中关于中国互联网发展的内容由高瓴资本撰写,这也是“互联网女皇”自2014年开始,连续第六年与高瓴资本合作。今年中国部分的报告里有哪些值得关注的重要趋势?我们为您总结出以下精华亮点。
宏观经济长期稳健中国宏观经济走势将保持长期稳健,尽管短期内企业和消费者信心有所波动,但伴随着服务业的持续发展和城镇化进程的不断推进,长期宏观经济增速仍然可观。
中国互联网用户/时长持续增长 短视频成为重要驱动力近年来,中国互联网行业始终保持着较快的增速。2018年,中国移动互联网用户已达到8.2亿,移动互联网数据流量同比增长189%,其中,短视频对中国互联网流量和使用时长的增长功不可没。
中国原发创新——游戏改变生活线上游戏正日益改变着中国的支付、电商、零售、教育以及更多行业,通过游戏化和数字化为传统行业赋能的新模式正在重构人们的消费体验。
互联网驱动的产品和商业模式创新领先世界以微信为代表的及时通讯软件,通过 ...
90后走入焦虑时代:没房没车没京户,还要梦想着财务自由
原文地址:90后走入焦虑时代:没房没车没京户,还要梦想着财务自由 转载
什么是新零售
原文地址:什么是新零售(上),什么是新零售(下) 转载
什么是零售人,为什么商家要给购物中心支付租金?租金的本质是什么?为什么租金和人流量正相关?
购物中心之所以收商家的租金,是因为购物中心为商家带来了流量,人流量是真正的核心价值。租金的本质,是购物中心把人流量折算成一个价格,卖给商家。
怎么吸引流量,然后将流量变现的能力。
流量经济,就是要研究销售漏斗公式:
货,可以归纳为D-M-S-B-b-C
D=Design(设计),指产品款式的设计过程;
M=Manufacture(制造商),也有人称其为工厂;
S=Supply Chain(供应链),通常指的是总代理、省代理、分销商、经销商等机构;
B=Business(大B,商场),指的是大卖场、超市、连锁店等;
b=business(小b,商店),指的是夫妻店、地摊、微商等个人销售者;
C=Consumer(消费者),也就是最终端的客户。
以皮鞋为例,设计师(D)研究市场、研究人体、研究时尚,设计出一双皮鞋,然后把设计卖给制造商;制造商(M)开模具,购买原材料、 ...
建一个5G基站,到底要花多少钱?
原文地址:建一个5G基站,到底要花多少钱? 转载
自从国内5G正式宣布商用之后,全国各地的5G网络建设速度明显加快了。
5G基站的身影,出现在越来越多的城市、角落。5G信号的覆盖范围,也在不断扩大。
这意味着,5G的投资已经全面启动,并且在不断增加。
一直以来,“5G究竟要花多少钱”,是人们普遍关心的话题。有人说,5G的投资将会是4G的2~3倍。也有人说,5G的总投资将到达惊人的1.5万亿元。
根据最新的《2020中国5G经济报告》,国内2020-2025年的5G网络总投资额是0.9~1.5万亿元。
这笔投资的最大一部分,将花在5G基站的建设上。
那么,作为5G投资的重要对象,5G基站,它的成本究竟是由哪些部分组成的呢?这些成本,有没有下降的可能性呢?
今天,小枣君就来做一次5G基站的建设成本分析。
我之前曾经介绍过,基站一般可以分为宏基站和微基站。室外那种大铁塔的,是宏基站。目前我们国内正在规模建设的5G基站,也是宏基站为主。
宏基站
我们就先从宏基站开始说。
一个5G宏基站,目前通常包括以下组成部分:
下图是4G宏基站的组成部分,放在一起对比:
可以看出,相比4G宏 ...
核心员工要离职,怎么办?
原文地址:核心员工要离职,怎么办? 转载
最近身边有几个小伙伴要离开,且已经吃了散伙饭。有要离职的,有要内部转岗的,也有要回老家的。
每年绩效期和晋升期结束后,都会有这样一波情况发生。今年好像有点多,所以趁着这个机会,利用四象限图来协助分析下。
核心员工要离职,怎么办?先看下为什么要走,今天我们不从“要么钱没给够,要么心累了”谈,而是从两个新的视角来看这个问题
因为组织的原因要离开
因为个人的原因要离开
根据这俩维度,我们可以切分为4个象限,四象限如下:
总体来看上图
红色:
是最严重的情况
这个人必走无疑,没得劝
外部因“团队和组织”想走,内部从“自身职业发展”角度也要离开
黄色:
有挽留空间
通过一定的努力,有可能让这个人留下来
但要理解,员工和这个团队的关系已产生裂痕,需要警惕即使这次挽留住了,只是暂时的明火扑灭,更大的火情只是暂时被隐埋
绿色:
人生就是缘分,兄弟一场,好聚好散
有条件的情况下,顺水推舟再送一波
从象限分布来看
象限1:必走
象限1的员工,这种情况是一定会离开的,团队待得已经令他郁闷至极,开口就是解脱,离开就是新开始。
会因某个 ...
漫谈哲学与编程
原文地址:漫谈哲学与编程 转载
谈到哲学,多数人都会直觉性的认为它是很高深的一门学问。实际上大多数情况并非如此,哲学研究的往往是非常简单的一些命题,而这些命题在常人看来可能并没有现实意义。
比如说:到底是先有鸡还是先有蛋的问题;比如说:一个号称只给不能给自己理发的人理发的理发师到底能不能给自己理发的问题。当然本文的目的并不在于讨论这两个问题,我们来聊聊几个稍微简单一些的概念:
哲学中的理性与感性
理性是超越的,本质在于追求无限
超越的意思是说理性本身不依赖任何现实或者经验社会中的任何对象,无限实际上就是说理性本身需要达到的某种理想状态。
比方说:「100%的金」 就是一种无限状态。我们不使用任何经验就可以判断出 100% 的金是必然有的,概念上没人能否定这一点。
但是运用在经验社会中的知识来判断,这个命题就是不正确的,或者说不具有普遍的正确性。因为我们知道无论人类的技术如何高超也无法制造出来 100% 的金。即使到 99.99% 逻辑上也没到达 100%。
这个时候人们对于类似的事情就会产生了不同的反应。有的人会因为理想状态达不到而反向地认为原来的命题是错误的;有的人内心则有一 ...
30个CEO,烧了42亿,告诉我这9个真相
原文地址:30个CEO,烧了42亿,告诉我这9个真相 转载
昨天看到亦冶的《在赢之前,你要先学会输几次》,感叹这个浮躁的社会还有人不断思考沉淀创业经验,并且乐于系统性输出,于是占了TNBT一个版面,聊聊曾经的「输家」,聊聊「创业失败」。
经过与懒癌的抗争,重新翻阅了上半年对30位有失败经历的互联网创业者(至少融资超过1000万人民币)的访谈记录以及自己今年的毕业论文(《Failure Factors of Internet Startups: Analysis of China – Based on Surveys of 30 entrepreneurs》),曾经答应很多创始人的总结终于磨了出来。
因为一直在互联网领域创业,之后也会继续,因此在「创业失败」的对象前加了「互联网」的这个标签,一来研究会更聚焦一些,二来自己会更感同深受。结合当时自己在VC的工作学习以及之前的创业经历,也更容易与创业者交流。
访谈案例概览
从2012年到2018年成立的互联网企业,接受过天使轮以上融资但已关闭的项目共计691个,其中天使轮关闭项目占64%左右,A轮占30%,B轮占4%,C轮及以上占2%, ...
悟空转世,黑客之王
原文地址:悟空转世,黑客之王 转载
先讲个在黑客圈流传的故事。
2018年,沙特人从以色列黑客手里买了一个iPhone的漏洞。花了5000万美金。沙特人用这个漏洞破解了记者卡舒吉的手机。得知他在跟人合谋要推翻沙特王储。然后卡舒吉因故进了土耳其的沙特大使馆。被肢解。
黑客是最神似于侠客的一种存在。
侠客,上天入地,来去无踪,千军之中砍上将人头如探囊取物。
最近三十年,程序员这群人给人类从无到有搭建起来一个不断膨胀、甚至吞噬一切的虚拟世界。先是电脑,然后是互联网,现在是万物互联,甚至包括人的脑袋。人天生是有缺陷的,所以他们创造的东西也是有漏洞的。黑客就是那群对这些漏洞了如指掌的人。于是在虚拟世界里,黑客像侠客一样能上天入地,来去无踪。
今天的黑客已经不是旧印象中盗用QQ号或者信用卡挣点零钱的小毛贼。他们已经是国家间网络战争的中坚力量。
他们干的事,比如攻入华为的邮件系统,瘫痪整个俄罗斯的电力,攻击伊朗核设施,潜入伊拉克作战指挥系统,甚至在2天内攻破美国主力战斗机F-15系统。由这些已经冒出水面的冰山一角,可以试着想象一下真实的对战里会发生些什么。
再没有所谓“和平时代”。每一天,每 ...
资深技术Leader曹乐:如何成为技术大牛
原文地址:资深技术Leader曹乐:如何成为技术大牛 转载
双生说:曹乐是典型学霸,清华本硕,多年互联网大厂研发经验,所以“资深”。我刚到新部门的时候,约各位合作部门的Leader请教,也算帮我做新岗位入职的“平稳降落”。印象最深的,就是作为技术Leader的曹乐,一点都不像技术——他和我谈对业务的理解,各个维度的见解与想法,让人印象深刻。然后,他很热情的帮我安排了他团队几个同学的1-1,帮助我了解了更多从技术视角对业务与技术团队协同、共创的思考。后来,开始深入合作,发现合作的技术同学,不仅仅技术上追求精进,而且是真正的也能够跳出来去看业务全局。能跳出来,能跳进去。
这封信,是曹乐写给团队的。如何成为技术大牛(来自另一学霸同事的评论,感谢):寻找范式、刻意练习、及时反馈;垂直打透、横向迁移、深度复盘;聪明人要下笨功夫。
Enjoy~
很多同学都有关于工程师该如何成长的问题,大家普遍对如何成长为牛人,如何获得晋升,如何在繁忙的工作中持续学习充满了困惑,这其实是每一位同学成长过程中必经之路。最近几次1-1也和同学聊过这方面的问题。在这里也想跟大家分享一下我的一些心得。
同学们普遍 ...
Full GC排查流程
针对之前出现过的full gc情况,这里给出排查的流成性建议,以后如果出现此类事件的时候,希望能够按照流程一步一步排查,防止手忙脚乱~(勿喷)
A. 为了第一手确定full gc情况,先立即申请某一台主机权限。如果自己有dump的权限的话,先快速进行dump日志来观察一下具体的情况。
B. 10-20分钟无法找到原因并解决问题的话,联系PE协助。full gc频繁的话往往是因为内存的问题,但是有时候也可能某些线程运行不当出现代码BUG导致,所以如果此时没有解决问题的话需要快速重启服务器,但是需要保留2台问题机器,以便继续跟踪问题。
C. 拿到jmap和jstack的dump信息之后按照以下流程进行排解: 1.针对jstack的日志,需要确认是否有正在执行循环的线程,因为循环过程往往容易出现过多的中间数据对象。 2.针对jmap日志,基本上只要看top的几个信息就行,如果top1和top2的大小差一个数量级的话,基本上top2就不用看了,直接关注最大的即可。在基本了解了内存的对象情况之后开发自行确认能否立即定位问题。
D. 如果此时依然无法定位问题,查看监控平台,从自己服 ...
GitLab-CI环境搭建与SpringBoot项目CI配置总结
GitLab-CI环境搭建运行GitLab Runner容器
参考Run GitLab Runner in a container - Docker image installation and configuration
执行下述命令运行gitlab-runner容器。
1234docker run -d --name gitlab-runner --restart always \ -v /srv/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest
注册GitLab Runner
参考Registering Runners
使用 docker exec -it gitlab-runner /bin/bash 命令进入 gitlab-runner 容器命令行环境。
执行 gitlab-runner register 命令开始注册一个 runner。
注册时只有输入共享Runner的注册令牌 ...
Java枚举类实例
引用自:Java 语言中 Enum 类型的使用介绍
枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中。而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义相似。不过相比较常量类型,枚举类型可以为申明的变量提供更大的取值范围。
常量定义在 Java 中通过常量方式定义彩虹的七种颜色。
12345678910public static class RainbowColor { // 红橙黄绿青蓝紫 其中颜色的常量定义 public static final int RED = 0; public static final int ORANGE = 1; public static final int YELLOW = 2; public static final int GREEN = 3; public static final int CYAN = 4; public static final int BLUE = 5; public sta ...
Java运算符instanceof的用法
Java 中的 instanceof 运算符用来在运行时指出对象是否是特定类的一个实例。本文简要介绍下 instanceof 运算符的用法和注意事项。
基本用法1result = object instanceof class
参数:
result - boolean 类型
object - 必选项,任意对象实例
class - 任意已定义的对象类
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true,反之若 object 不是指定 class 的一个实例或 object 为 null,则返回 false。
例子:
以下示例展示了实现、继承关系的类实例使用 instanceof 运算符的结果。
1234567891011interface A { }class B implements A { }class C extends B { }
12345678910111213141516A a = null;B b = null;System.out.p ...
Java递归的实践
递归指的是方法或函数自身调用自身,适用于一个功能被重复使用,而每一次使用时的参数是由上次的结果来确定的情况。本文介绍了递归在实际工作场景中的应用。
以下是将一个多层结构数据转换成树形结构的实例,该实例能够很好的展示递归的使用方式。
数据
原始数据
id
parentId
value
1
0
one
2
1
two
3
1
three
4
2
four
5
2
five
6
3
six
7
4
seven
8
4
eight
9
4
nine
10
5
ten
11
6
eleven
12
9
twelve
层级结构
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667{ "id": 1, "value": "one", "nodes&qu ...
Java集合杂谈
Java 中的集合类在开发过程中经常被使用,本文介绍了集合相关的一些知识。
ArrayList 的 remove 方法我们首先从一个常见的面试题切入,代码如下:
代码1
1234567891011List<String> a = new ArrayList<>(100);a.add("1");a.add("2");for (String temp : a) { if ("1".equals(temp)) { a.remove(temp); System.out.println("1---"); } else { System.out.println("2---"); }}
【注】这里的 foreach 循环实际上等价于:
12345678910Iterator<String> iterator = a.iterator();wh ...
Linux下安装Confluence
Confluence简介Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企业wiki 。通过它可以实现团队成员之间的协作和知识共享。
Confluence为团队提供一个协作环境。在这里,团队成员齐心协力,各擅其能,协同地编写文档和管理项目。从此打破不同团队、不同部门以及个人之间信息孤岛的僵局,Confluence真正实现了组织资源共享。
Confluence使用简单,但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息、文档协作、集体讨论,信息推送。
安装步骤
进入Confluence官网
浏览Confluence官网,进入下载页面,选择 Linux 64Bit 版本进行下载,复制下载地址。
远程连接阿里云服务器实例。
下载Confluence
1wget https://downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-6.3.2-x64.bin
向安装文件添加执行权限
1chmod +x ./atlassian-confluence-6.3. ...
Linux常用指令
引用自:【Linux】Linux中常用操作命令
本文列举了一些Linux下比较常用的操作命令,方便日常查看和使用。
常用指令123456789101112131415161718192021222324ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir 创建目录 -p 创建目录,若无父目录,则创建p(parent) cd 切换目录 touch 创建空文件 echo 创建带有内容的文件 cat 查看文件内容 cp 拷贝 mv 移动或重命名 rm 删除文件 -r 递归删除,可删除子目录及文件 -f 强制删除 find 在文件系统中搜索某文件 wc 统计文本中行数、字数、字符数 grep 在文本文件中查找某个字符串 rmdir 删除空目录 ...
Linux系统设置静态IP
在日常工作中,常常会由于动态IP分配导致指定主机或者服务器的内网IP发生变化,造成很多不便,通过设置静态IP可以有效解决此问题。本文简单介绍如何在CentOS 7和Ubuntu 18.04系统中设置静态IP。
CentOS 71. 通过ifconfig命令查看当前的网络设置
2. 修改网卡配置找到 /etc/sysconfig/network-scripts/ 目录下网卡xxx的配置文件并修改为如下内容:
12345678910111213141516171819202122TYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY="no"BOOTPROTO="static"DEFROUTE="yes"IPV4_FAILURE_FATAL="no"IPV6INIT="yes"IPV6_AUTOCONF="yes"IPV6_DEFROUTE="yes"IPV6_FAIL ...