感悟&&杂谈
布道
专注但要有大局观(先大后小,思路为先,实验为辅)
展开
-
竞品数据抓取指南
谈起爬虫,一般人都会嗤之以鼻,没错,它本身不是一个很有挑战的技术活!当然,直到你读完本文内容可能会有所改观。本着技术服务于业务,业务需要的是供应商谈判助手,市场营销.....等等。抓包有这么复杂吗?没错,一般情况下我们直接爬取一个网页(html)或对方的接口是没什么难度,根据对方的规则进行即可,然后就是数据清洗,筛选出自己关注的产品制作报表即可。技术上实现上没有太大的创新,无非就是关注2个点:收集种子(生产url) 消费种子(消费url)二者递归即可!下图就是笔者理解的一个分布式的爬原创 2020-09-29 17:26:35 · 642 阅读 · 0 评论 -
常见应用系统设计须知
大多优秀的开源的后端程序,通常有三个部分组成,而这些都完全独立开发。协议本质是有对外沟通(通讯)的需求,服务于client与server。大多数情况下,我们采用内置的通用网络协议(http或各种rpc) 也可以自定义网络协议,只需提供序列化和反序列化函数,就可以定义出自己的算法常言道:数据是稳定的,处理是多变的,而算法着手于在稳定的数据结构中,提供高效丰富的计算,评估它的标准在于时间及空间复杂度。通用算法有:sort,merge,map-reduce等任务流任务执行的宿主是线原创 2020-09-10 18:33:32 · 962 阅读 · 0 评论 -
Double-checked locking should not be used
单例模式,确保一个类只有一个实例,它又分为饿单例模式(类加载时实例化一个对象给自己的引用,如果对象很大是对内存一种巨大的浪费)和懒单例模式(调用取得实例的方法如getInstance时才会实例化对象)。而懒单例模式稍稍复杂下,主要是要考虑两点是否Lazy 初始化和多线程安全。双重检查锁定是在输入同步块之前和之后检查惰性初始化对象的状态以确定对象是否被初始化。如果没有对float或int以外的任何可...原创 2019-05-09 21:36:39 · 3703 阅读 · 0 评论 -
window7下同时使用github和gitlab
最近公司的代码管理慢慢从svn迁移至gitlab(可参阅相关笔记),而个人也一般会采用github托管一些开源代码代码。如何能在本机环境下二者切换自如,免密,无冲突提交,这个分享下。注:个人环境是window7,TortoiseGit 2.5.0.,git.exe2.15.11.生成密钥打开git-bash.exe,生成公钥和私钥,生成后的目录为:C:\Users\fei.chen...原创 2019-03-19 17:17:22 · 2259 阅读 · 1 评论 -
屏蔽来自CSDN的垃圾广告
CSDN 上的垃圾广告太多了,特别这种百度推广的广告特别恶心!!如果你使用的是windows,可以轻松屏蔽掉,只需要 改一下 hosts 文件(位于 C:\Windows\System32\drivers\etc)127.0.0.1 cpro.baidu.com127.0.0.1 pos.baidu.com127.0.0.1 wangmeng.baidu.com127.0.0.1 ...原创 2019-03-12 22:49:35 · 948 阅读 · 1 评论 -
BDD之Java Testing with Spock
为何会专门写这篇BDD呢?之前我发表过一篇《代码重构之TDD的思考》,有童靴联系到我,探讨之余,感觉这几年集成化方面的测试方案产出太少了,优秀的也太少了。今天带大家了解一个新东西“BDD”,纠结是新瓶换旧药还是别的呢?BDD(Behavior-Driven Development),也叫行为驱动开发,感觉是不是像TDD(Test-Driven Development)一样的空白无力。其实不然,...原创 2018-12-27 21:15:00 · 1115 阅读 · 0 评论 -
每次输入验证码,你都在义务为Google劳动
最近看到了一篇文章,一个小小的验证码,它可以玩的很高端,惊叹歪果仁的思维真超前,方案确实有前瞻性。今天,应用最广的验证码系统就是 reCAPTCHA (Completely Automated Public Turing Test To Tell Computers and Humans Apart,区分人机的全自动图灵测试系统)了。那么,reCAPTCHA 到底做了多大贡献呢?200...原创 2018-12-17 09:58:59 · 489 阅读 · 0 评论 -
代码重构之TDD的思考
需求的不断变更是重构的最根本原因,代码架构最初的设计也是经过精心的设计,具有良好架构的。但是随着时间的推移、需求的剧增,必须不断的修改原有的功能、追加新的功能,还免不了有一些缺陷需要修改。为了实现变更,不可避免的要违反最初的设计构架。经过一段时间以后,bug越来越多,越来越难维护,新的需求越来越难实现,最初的代码构架对新的需求渐渐的失去支持能力,而是成为一种制约(新需求的开发成本会超过开发一个新的...原创 2018-12-14 17:39:53 · 1190 阅读 · 0 评论 -
好文推荐:努力是没有用的
最近看到一篇关于台湾漫画家蔡志忠一个演讲《努力是没有用的》,讲的也确实很有道理,对于当下80~90后也有很好的指导意义。 有些人非常勤奋,别人休息的时候,都在努力工作学习。但是努力了一辈子,人生也没有显著的提升,就像新闻报道里经常说的:"某某在平凡的岗位上,勤勤恳恳工作了一辈子"。 然而也有一些成功者似乎也没有特别努力,就取得了许多成就,走上了人生巅峰。蔡志忠以自...原创 2018-10-08 15:08:42 · 681 阅读 · 1 评论 -
软件架构工程发展历程
大师级人物Martin Fowler在他谈论微服务的个人主页上提到,微服务并没有一个非常明确的定义。事实上有很多种分布式系统的实现都可以被看成(或者说勉强看成)是面向微服务架构的。微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务于服务间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的...转载 2017-08-28 22:42:47 · 2510 阅读 · 0 评论 -
敏捷开发之Scrum扫盲
现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP...目录 什么是敏捷开发?为什么说是以人为核心?什么是迭代?关于Scrum和XP什么是Scrum?什么是Sprint?如何进行Scrum开发?为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述Scrum中的各个环节,主要目的有两个,...转载 2017-08-25 17:01:51 · 335 阅读 · 0 评论 -
采用最终一致性解决微服务一致性问题
随着微服务的越来越多,一致性问题也越来越被重视。纠结是怎样才能ACID呢?CAP还是Base呢?其实强一致性的方案也特别多,比如net的msdtc、java的atomikos...等。但他们这类基于2pc(两阶段提交协议)实现,基本上性能太差,根本不适合高并发的系统。而本地消息表、可靠消息最终一致性方案、最大努力通知方案都是不错的解决方案。目录一致性问题解决一致性问题的模式和思路A...原创 2017-08-25 14:45:16 · 14303 阅读 · 0 评论 -
编程技巧-索引标记法
在本周的Code Review中,从Pair学到一个技巧--索引标记法(暂且叫这个名称)题目以任意一个Cell中心,根据8个邻居状态,判断该Cell下一个状态:如果2个活着那么保持状态不变,3个邻居活者也为活,其他情况都是死。普通程序是这样的(0表示死,1表示活): public int nextStatus(int currentStatus, int liveCount) {原创 2017-08-23 17:39:57 · 1100 阅读 · 0 评论 -
做开发8年多了,未来还要做什么
如果您像我一样,依然保持对技术的兴趣与热忱...那你要做什么呢,对,坚持买书,书.....1. 书是学习知识最快的最系统的方法;2. 看名人Blog是学习正统知识第二个非常有效的方法;3. 我热衷于微软.NET平台下的web应用开发,对软件设计,软件工程也有一定兴趣;4. 近一年来以及将来重点关注DDD的理论研究和逐步实践;5. 知识就是金钱;6. 学习知识是一个循序渐原创 2017-08-18 22:36:50 · 464 阅读 · 1 评论 -
微服务架构和SOA区别
微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为新的理念和原来的分布式系统,或者说SOA(面向服务架构)是什么区别呢?软件发展的三个阶段:1.传统单体架构先从JEE架构发展至SSH架构。J2EE架构:以面向对象的Java 编程语言为基础,扩展了Java 平台的标准版,是Java 平台企业版的简称...原创 2017-08-17 16:05:51 · 4273 阅读 · 0 评论 -
产品模板化与系统边界引发的思考
系统划分边界确定一直是一个比较难搞的活,拆分之后的系统真的能做到职责单一???这就涉及到技术上的思考坚持CAP、引入Base思想.....不纠结了吧,今天分享一个阿里的大牛的经验。1、产品的定位需设计的模板化的做法,比如我有一个订单系统,需要整合各个业务系统的订单,而每个业务系统的业务属性差别很大、业务单据状态运转也有差距,那这该如何取舍?坚持模块解耦,随时可替换,引入...原创 2016-07-22 11:30:18 · 742 阅读 · 0 评论 -
PM应知晓的互联网产品研发改进之路
互联网产品研发改进之路(淘宝-liyu)(一)产品开创期 抢夺免费资源、占领新市场;短迭代,快上线,尽快让业务看到结果。关键词:效率策略一:敏捷开发策略二:开放运维,缺陷容忍(二)产品拓展期 获得产品竞争优势。关键词:规模化策略三:动态分配资源策略四:PM细分,大PM/细PM策略五:架构师细分,形成独立的团队策略六:关键分离,自动编译,持续集成(三)稳定...转载 2016-01-28 16:36:21 · 501 阅读 · 0 评论 -
Proxy与Agent的内在联系与区别
我搜索了相关的资料,似乎并未找到二者的实质区别,但这个概念恰恰被N多个高大上软件及架构强调。那究竟有什么区别和内在联系呢?1、含义Proxy:服务器代理Agent:代理服务器2、内在关联与区别二者都是面向不同类别用户并处理请求,Proxy强调服务器的安全性、隐秘性、面向的调用方为非用户,分解Server的压力;Agent强调客户端(面向用户级)、本地化、统一收集信息,处...原创 2016-01-10 15:28:07 · 9630 阅读 · 2 评论 -
概要设计与详细设计如何编写
撰写的设计文档主要分为:总体概要设计文档 + 详细设计文档,后简称为“概设”+“详设”。总设和详设都应该包含的部分:(1) 需求:一般以产品的语言描述,这一块可以拷贝产品需求文档中的story list部分;(2) 名词解释(可选):非相关领域内的同学需要看到文档需要提前了解的一些概念性质的东西;(3) 设计目标:又分为功能目标和性能目标,功能目标一般是对产品需求的技术描述,性能目...翻译 2016-12-21 17:51:41 · 9360 阅读 · 0 评论 -
自我提升感悟
随着时间的积累,慢慢的也从菜鸟变成了老鸟,总是面临一些初入职场的朋友咨询我这方面的经验,其实本来是推荐大家去看看稻盛和夫《活法》《干法》,今天稍微整理下。工作感悟如何才能晋升?技术岗转管理岗的利弊?如何带好新员工?如何做实习生Review?在写作中成长?技术职位模型?提高软能力提高规划能力提高学习能力提高沟通能力提高执行能力原创 2016-12-13 14:43:07 · 765 阅读 · 0 评论 -
免费的编程中文书籍
国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版github 上的一个流行的编程书籍索引 中文版感谢 @siberiawolf 使用 Bootstrap 开发了网页版,地址:http://siberiawolf.com/free_programming/index.html参与交流欢迎大原创 2016-12-13 13:52:03 · 1274 阅读 · 0 评论 -
编程原则:如何减少缩进层次
过多的缩进层次不利于代码阅读,进而不利于代码的维护,给自己一些这方面的原则,如:不能超过三层(我自己的原则)如何消除缩进:提前返回遇到非法路径就提前抛出异常遇到非正常条件就提前返回默认值,如:边界情况、特殊情况。重构为子方法:某些代码片段可以使用重构工具自动生成子方法,某些需要执行一系列小的重构步骤之后才能使用重构为子方法。原创 2014-12-06 22:35:17 · 1680 阅读 · 0 评论 -
什么叫工作到位?
1.汇报工作说结果 不要告诉老板工作过程多艰辛,你多么不容易!老板不傻,否则做不到今天。举重若轻的人老板最喜欢,一定要把结果给老板,结果思维是第一思维。 2.请示工作说方案 不要让老板做问答题,而是要让老板做选择题。请示工作至少保证给老板两个方案,并表达自己的看法。3.总结工作说流程 做工作总结要描述流程,不只是先后顺序逻转载 2014-07-01 15:07:26 · 750 阅读 · 1 评论 -
2014年值得关注的10个开源项目
如果你认为开源软件的优势是免费和拿来主义,那么你就错了,在当今的软件市场中开源项目越来越耀眼,选择开源软件的最大优势无非是风险低、产品透明、行业适应能力强等等,但是在开源项目领域真正有影响力的企业,绝对是那些为这个项目贡献代码最多的企业。目录1. Appium2. Docker3. exercism.io4. InfluxDB5. OpenDaylight6. Open...原创 2014-04-13 20:14:22 · 1122 阅读 · 1 评论 -
Java之智力题【史上最全】
智力题,每个正式的笔试、面试都会出,而且在面大企业的时候必然会问到,笔者曾在很多面试中,都被问到过,不过答得都不是很好,因为时间很短,加上我们有时候过于紧张,所以做出这类问题,还是有一定的难度,从这篇文章中我会总结一些常见的智力题 1、农民分金条问题题目:你让农民为你工作7天,给他的回报是一根金条。金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何...转载 2014-04-10 14:09:10 · 3926 阅读 · 0 评论 -
异步编程与响应式框架
前言异步操作是强大的,它是许多高伸缩性架构的基石。异步操作在许多情况下是必须的,例如在客户端保持用户界面的响应能力,以及在日益兴起的云计算场景中。但是,异步编程又是十分困难的,它让这让许多程序员敬而远之。因此,越来越多的编程语言都对异步编程提供了相当程度的支持,其中的典型代表便是F#中的异步工作流以及Scala的Actor模型。不过目前的一些主流编程语言,如C#或是JavaScript,它翻译 2013-11-13 13:29:23 · 1879 阅读 · 0 评论 -
[转]进程和线程的区别
简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。从逻原创 2013-08-16 17:56:28 · 1095 阅读 · 0 评论