自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(523)
  • 资源 (3)
  • 收藏
  • 关注

原创 我有一个小小愿望,让所有程序员编程之路再延长一点点

本应该在2019年年底写的一篇文章,推到了2020年。在2019年这一年当中,it行业出现了寒冬期,在2019年年中的时候也看到了很多在今日头条,知乎上一些30多岁的程序员发表着失业、面试被公司特殊对待,以及默默转身离开一线城市回到老家,确又不知道做些什么的it老鸟们对职场的种种困惑、无力的忠告,面对现实的残酷,让我不由的联想到了自己。 诚然,那些可以用技术换来车子...

2020-01-14 13:46:03 935 2

原创 秒杀场景checklist

在面试中经常碰到的问题,列下来备忘。

2023-05-20 09:06:54 275

原创 数据持久化层场景实战-《从程序员到架构师:大数据量、缓存、高并发、微服务、多团队协同等核心场景实战》

首先想到是的数据库分区,将表的数据均衡分配到不同的硬盘、系统或不同的服务器储存介质中,但是分区有个弊端,必须在where语句里面加上一个包含分区字段的条件,根据实际在用的sql,并不包含相同的字段。相比较《大数据时代的IT架构设计》而言,这本书更具有项目搭建的指导性意见,全篇采用从实际项目中遇到的场景进行一步步的讲述,其中一有个观点特别认同,那就是如果想要学好软件架构,基于场景的学习才是最最有效的。也就是作者提倡的,先不用管什么是架构,而是去思考它能解决什么样的问题,要处理什么样的场景。

2023-02-28 10:51:13 414

原创 网日志处理中的应用架构-《大数据时代的IT架构设计》

剩下的URL地址送入爬虫的地址库中,爬虫会根据一定的规则产生要抓取的URL地址,然后通过MapReduce的方式并发抓取产生的URL地址,最终把抓取到的URL地址的内容存储到HDFS文件系统中。功能层实现了数据处理流程模块的模块化处理,提供集群的访问控制,并负责Hadoop集群的运行管理和系统报警日志管理。由于分布式架构带来的硬件部署的复杂度,需要对物理资源层和系统平台层提供进一步的抽象,以提供自动化部署和弹性的运维能力,因此资源层实现了对物理资源的自动部署和动态扩展,对分布式集群中不同角色进行灵活部署。

2023-02-19 11:49:08 632

原创 分布式锁超时情况和业务重试并发

在一个成功的红包发放操作中,对于预算端来说,进行了一次预算的扣减,一次事件写入,可能会进行一次事件读取,一次事件状态更新;在系统并发幂等控制设计中,单纯的分布式锁并不具备严格控制并发幂等作用,建议在系统设计时,将第三方唯一性的幂等控制作为幂等控制的兜底方案,控制好这道幂等防线,这样不论业务如何设计,就万变不离其宗了。在阿里巴巴红包系统中,红包的发放操作会涉及两个数据库的事务操作,一个数据库进行预算的扣减,另一个进行用户红包数据的写入,那么如何保证这两个事务操作的一致性呢?管理事件的基本信息,订阅关系等。

2023-02-11 08:00:00 424

原创 逆流而上阿里巴巴技术成长之路

分析出现错误的原因是由于分库分表,共N个库(N大于4),数据库表变更的时候,是分库分批执行的。本案例是因为不了解tddl中间层对select*的解析逻辑,导致数据库变更时出现不兼容问题,但使用select*的弊端不限于此,比如select*查询非必需字段,会造成资源浪费甚至影响服务器性能;本节场景举例,某项目发布阶段,因为业务需要新增表字段,从sql的代码逻辑来看,使用了select*,新增字段应该是兼容的,但在做线上数据库ddl操作之后,立即出现了日志错误数飙升报警,说明数据库新增字段并不兼容。

2023-02-10 18:30:00 1211

原创 区块链的通用应用模式和相对应的特征

这种应用模式借助区块链中区块有顺序的特征,可以用来追踪事件发生的顺序而非具体的时间。区块链的时间戳特征,就可以用于追踪事件发生的顺序,如生活中快递追踪、支付追踪、竞拍开始和结束流程的追踪和预测管理等场景。这种功能的实现需要依赖之前提到的所有模式(如存在证明、顺序证明、身份证明、作者证明)和3个基本的安全要素:识别、验证和授权。我们无法概述所有的区块链应用,在这一讲提到的应用都是现在已经存在的,或者很快就会出现的一些应用。根据区块链的特征和它能够存储各种数据的特点,我们可以总结出以下通用的应用场景。

2023-02-10 08:00:00 336

原创 区块链的技术缺陷

区块链平衡这两个目标的方式是:采用不可更改、且只允许添加新数据的数据结构,在新区块添加时要求给出哈希难题的解答(解答哈希难题是非常耗时的)。不幸的是,采用这一安全措施的代价就是交易处理速度的下降,因此也就限制了区块链的延展性。一旦你把钥匙给了别人,无论背后的原因是什么,你的资产安全性就无法继续得到保障,只有真正拿着钥匙或知道PIN码的人才能开走你的车或者取走你的钱。区块链账户的私钥也不例外。区块链防操纵的特点,以及共同维护历史交易记录的可信性都基于这样一个假设,即系统中的大多数算力都是由诚实节点控制的。

2023-02-09 18:30:00 2840

原创 历史交易记录不可变的主要原理

大致说的是如果在自己的通讯联系人随意添加一个从来不存在的人物,比方说添加一个哥哥。需要添加一系列的记录,要添加哥哥的出生证明、入学时间、身边的同学以及发生的故事,再然后就是毕业后上班,一些入职证明、时间、空间、地点人物等一系列事件,过于复杂且各类记录的真实性让这个修改这件事情变得不可行。工作原理:大蓝图区块链保证历史交易记录不可变的主要原理,就在于让改变历史交易记录的成本变得极高。1.以一种对的方式存储历史交易记录,并让对任何历史交易记录的更改都变得十分醒目且引人注意。让历史交易记录不可变需要3个要素。

2023-02-09 08:00:00 100

原创 确认并保护用户账号的安全

想要改变区块链上一个区块内的交易数据,就要从需要改动的地方向后依次改动哈希引用,一直到修改完整条区块链上最新区块中的哈希引用为止。你可以将有序的区块头构成的链想象为一张张老式的图书馆借阅卡,并且这些借阅卡是按照添加到图书馆中的先后顺序进行排序的。区块链数据结构由两个主要的组成部分:一个有序的区块头组成的链和默克尔树形式保存的交易数据。对特定交易数据的哈希引用,通常是通过对保存特定交易数据的默克尔树的根进行引用实现的。创建一个包含上个区块头的哈希引用与新交易数据的默克尔树的根的新区块头。

2023-02-08 18:00:00 440

原创 区块链如何工作

通过将交易数据添加到交易数据的历史记录中,并允许其影响汇总的交易数据来执行交易。必须保留交易数据添加到历史交易记录中的顺序,以便在汇总这些数据时产生相同的结果。交易数据的完整历史记录是一个审计线索,可以让人们获得与证明所有权相关的证据。无论输入数据多大,哈希算法都可以将任意类型的输入数据转变为固定长度的哈希值。加密哈希算法是一类重要的可用来创建任意类型数据块的数字指纹的工具。多种不同的哈希算法对同一段输入数据可以产生不同长度的哈希值。描述一笔所有权转让的交易时,需要交易数据提供以下信息。

2023-02-07 08:30:00 319

原创 为什么这个世界需要区块链

发现核心问题消除术语的歧义理解所有权的本质双花问题。

2023-02-06 18:00:00 108

原创 去中心化的概念

只是通过中间人将账户资产进行转移而已。而令人惊奇的是有多少中间人参与了这一看似简单的交易(例如,从一个银行账户转账到另一个国家的另一个银行账户会涉及多达5个中间人,这些中间人都会收取手续费,并且都需要各自处理交易的时间)。很久以前你拥有的钱已经变成了无形的数字记录和字节数据,只有少量的货币以实物纸币和硬币的形式存在。世界上绝大多数的钱都以无形的电子数据的方式存在于金融行业的中心化信息技术系统中。银行和金融业的许多其他“玩家”只是生产者和消费者之间的中间人,它们使用无形的电子数据记录构建了我们的资产和财富。

2023-02-06 08:30:00 111

原创 理解分层的概念-《区块链基础知识25讲》

比如手机:应用层关注的功能性特征拍照、打电话、发邮件、上网、玩游戏;非功能性特征:拥有漂亮的用户界面、操作简单、拍出的照片效果很好。实现层:永久保存本地数据、自动连接最近的基站、使用硬件加速优化屏幕的动画效果。完备性是任何软件系统中都是重要的非功能性特征,它往往包含以下3个方面的内容。行为完备性:软件系统要可顺利运行,并且保证不存在逻辑错误。安全性:软件系统只对认证用户授权有限的数据访问与使用功能。数据完备性:软件系统中的数据要完整、正确且无冲突。软件系统的分层、应用层与实现层、功能性与非功能性。

2023-02-05 18:00:00 103

原创 敏捷的协作

好的架构师通常是需要参加项目里的业务开发的,可以针对性的给其中一小部分进行开发。在项目进展时需要每个人自觉的将自己的进展、遇到的问题汇报给顶头上司,这样不管做为管理者和被管理者都会有很大的好处。面对面的会议仍然是最有效的沟通方式,现在大多公司也都采用站立会的方式进行敏捷沟通。在沟通中项目成员了解到每个人的进展,遇到的困难,是否需要协调、协助,更好的展示了敏捷的精髓。因为不了解内部的实现,不清楚碰到的困难,就好像拿了一张地图就可以统一天下争乱一样,不太现实。全体成员的行动必须要与项目相关,反过来每个人的行。

2023-02-05 08:30:00 437

原创 敏捷的调试

就是在日常编码中将需要编写功能分为主和次,也就是在自己是大哥身份状态时专心的写自己的逻辑,一旦发现自己需要调用其他方法其他小功能时,就要切换到小弟的身份。当然了,显示通用的信息,告诉用户发生了问题,要好过由于系统崩溃造成应用执行错误的动作,或者直接关闭(用户会因此感到困惑,并希望知道问题所在)。针对这个问题,常用的解决方案是记录日志:当发生问题时,让应用详细记录错误的相关数据。在日常的开发中,调试问题也占了开发的很大一部分时间,面对问题,如何进行解决问题。用很通用的错误消息,是无法提供足够的数据的。

2023-02-04 18:00:00 78

原创 敏捷的编码

要编写清晰地而不是讨巧的代码,向代码阅读者明确表明你的意图,可读性差的代码一点都不聪明(让自己或者团队任何人,可以读懂自己一年前写的代码,而且只读一遍就知道它的运行机制)在很短的编辑/构建/测试循环中编写代码,这要比花费长时间仅仅做编写代码的工作好得多,可以创建更加清晰、简单、易于维护的代码。开发可以工作的、最简单的解决方案,除非有不可辩驳的原因,否则不要使用模式、原则和高难度技术之类的东西。注释不能替代优秀的代码。让类的功能尽量集中,让组件尽量小,要避免创建很大的类或组件,也不要创建无所不包的大杂烩类。

2023-02-04 08:30:00 499

原创 敏捷的反馈

使用代办事项,使得下一步工作是可见的,有助于进度度量,而不是按照百分比安排。使用自动化的单元测试,好的单元测试能够为你的代码问题提供及时的警报。时间单元不要太细或者太粗,6分钟或者一周都不合适(所以番茄工作法的半个小时,一个小时是OK的)不是测试越多质量就越高,测试必须要有效,如果测试无法发现任何问题,也许他们就是没有测试对路。使用持续集成工具,在每个支持的平台和环境中运行单元测试,要积极寻找问题,而不是等问题来找你。为核心业务逻辑创建测试,让你的客户单独验证这些测试,要让它们像一般测试一样可以自动运行。

2023-02-03 18:00:00 555

原创 交付用户想要的软件

如果业务负责人回答“我不知道”,这也是一个称心如意的答案,也许是他们还没想那么远,也许是他们只有看到运行的实物才能评估结果,尽可能给他们提供建议,实现代码的时候也要考虑可能出现的变化。二是,花费太多时间,如果项目变动,或者规划有问题,就浪费了大量时间。根据需要选择技术,首先决定什么是你需要的,接着为这些具体的问题评估使用技术,对任何要使用的技术,多问一些挑剔的问题,并真实地回答。基于真实工作的评估,让团队和客户一起,真正地在当前项目中工作,做的具体实际的评估,由客户控制他们要的功能和预算。

2023-02-03 08:30:00 202

原创 学无止境啊

时常在一些论坛上碰到好多初学者问,如何才能进入软件开发行业,我的见意是先生存再生活,因为持续的热情如果在一遍遍的被浇冷水,四处碰壁,还找进不到开发的大门时,也许此时正是需要退一步采取由线救国的方式,延续自己的热情,不断的积蓄力量,当机会来临时便可以抓住机会,实现自己的开发这路。编辑,运行测试,代码复审,一致的迭代,然后发布。提供个人和团队学习的更好平台,例如通过午餐会议增进每个人的知识和技能,并且帮助大家聚集在一起进行沟通交流。你能嗅到将要流行的新技术,知道它们已经发布或者投入使用。

2023-02-02 18:30:00 344

原创 态度决定一切-《高效程序员45个习惯》

引入一下本人的故事,在之前的某个项目开发中,碰到了一些使用多个事务嵌套报异常失败的情况, 当时有一小伙伴暴力的将某写数据直接按成功处理,当时简单的测试没有问题就上线了,后来在大量并发和加之对数据库其的操作的情况下,又一次次出问题。一次又一次的快速修复,每一次都不探究问题的根源,久而久之就形成了一个危险的沼泽地,最终会吞噬整个项目的生命。也就是说所有的工作、成果并不是努力就能实现的,需要团队中的每一个人在努力的前面再加上“用心”两字,方能。做的决策,那么,也许就意味着团队的其他成员也有相同的误解。

2023-02-02 08:30:00 238

原创 博弈论123

事实是,就是那个人,这对你来说是有价值的,所以你并不需要这份合同,因为你需要的是一种让你不想分开的感觉,即使在客观的情况下,可能还会有一个更好的选项供你选择。7、那么,作为玩家,当我们发现自己处于这样的情况下——要么是两者间的囚徒的困境,要么是多者间的公地悲剧,我们能做什么呢?通往地狱的道路是由棘手的递归、糟糕的平衡和信息瀑布铺成的。13、首先,要警惕那些公众信息似乎超过私人信息的情况,在这些情况下,你更了解人们在做什么,而不是他们为什么这么做,你更关心的是你的判断是否符合共识,而不是符合事实。

2023-02-01 20:00:00 317

原创 简述-彼得原理

员工的晋升和岗位的安排是综合性的命题,不能简单地根据某一方面的贡献而决定员工的晋升,不能因某个人在某一个岗位级别上干得很出色,就推断此人一定能够胜任更高一级的职务。一个员工从底层开始工作,当表现优异时就会得到提拔,如果在新的岗位上依然优异,会再次得到提拔,一直提拔到一个他完全不能胜任的岗位上,并固定下来。这个道理可以简单的描述为,计算机会先尝试传递一个数据包,当传递成功会就会增加一个,一直增加到不能成功传递,那就将传输速度将为之前的一半,并循环这个过程。

2023-02-01 08:30:00 420

原创 指数退避算法:宽恕的算法

面对此情此景,指数退避算法就派上用场了,例如,可以在一个很清醒的时候,抑制再次违反家庭内的规则 ,又或者对其进行递阶的奖励。指数退避算法是网络安全中最重要的组成部分之一,举例来说,当一个电商在大流量高并发下处理有可能马上瘫痪的情况下,使用指数退避算法,让购买者一秒后再试一次,几秒后再试一次,直到成功。当然用在一些账户登录方面也起到了重要的作用,比如登录一个网站,有账户密码登录,多次登录失败后,可以采取指数倍增长的锁定周期惩罚。在人类社会中,我们倾向于采取一种政策,给人们一些有限的机会,然后完全放弃。

2023-01-31 20:00:00 111

原创 拉格朗日松弛技术

在脱贫的案例中,是官方公布的统计学数字,还是政府单方面精心挑选的案例,都不是。比如书籍,酒,蔬菜的选择等。首先,约束 松弛,简单地消除一些约束,在回到现实之前,先在更宽松的问题上取得进展。在计算问题展现给我们的各种方式中,优化问题(一部分是目标,一部分是规则)仍可 以说是最常见的。而离散优化问题,我们的选择是二选一,没有中间地带,这是最典型的选择。也就是说面对问题或困境时不要一开始就对自己有太高的要求(约束条件过多),先做吧,得到一个还算ok的结论的时候再加约束条件,然后再进行改进优化,最后得到最终结果。

2023-01-31 09:34:55 644

原创 过度拟合-不要想太多

当我们对预期不确定,而且得到的数 据杂乱无章时,最好的办法就是用一支粗的画笔来画画,用宽大的笔触来思考。正如企业家杰森·弗里德和戴维·H.汉森解释的那样,在他们需要头脑风暴的时候,他们就会用越粗的笔(这是一种用来表达简单化的聪明的方式): 当我们开始设计某样东西时,我们会用一个大而粗的记号笔勾勒出一些想法,而不是圆 珠笔。如果你了解到全部的事实和数据,那么当然是考虑得越多越好,但如果你了解到的信息越不全面,不确定性越大,那么过多的思考将会带来的是内心的纠结,而且也不一定能得到你想要的结果。

2023-01-26 07:00:00 105

原创 贝叶斯法则-预测未来

这个时候,我们就需要提供一个猜测(hypothesis,更为严格的说法是“假设”,这里用“猜测”更通俗易懂一点),所谓猜测,当然就是不确定的(很可能有好多种乃至无数种猜测都能满足目前的观测),但也绝对不是两眼一抹黑瞎蒙——具体地说,我们需要做两件事情:1. 算出各种不同猜测的可能性大小。而一个自然而然的问题是反过来:“如果我们事先并不知道袋子里面黑白球的比例,而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色之后,那么我们可以就此对袋子里面的黑白球的比例作出什么样的推测”。

2023-01-25 09:00:00 474

原创 时间调度理论-要事先行

事情小而多,杂乱无章的时候,不如先解决最短时间就能处理好的事,或者完成很快就能做好出成绩的事。从一般人的角度来说,你肯定会先吃掉明天就要烂掉的桃子,这样做的结果就是可以让你感觉到没有浪费食物。尽可能长时间停留在一件事情上,不要跳跃思维,导致不必要损耗,而不是将你自己的反应降低到最低可接受的限度之下。思考虽然很必要,你也很清楚它的重要性,但是必要步骤却变得很费时间,害怕得不偿失,所以就不知所措了。对人类来说,就是你忙到想停下来手头上的事,梳理一下应该做的事,但是没有多余的时间。我们的人生,要怎么节省时间呢?

2023-01-25 07:00:00 1017

原创 话说缓存一二三

当你决定物品该扔还是该留时,缓存算法中的最近最少使用原则可能是一个有效的指导原则,最近最少使用法告诉我们,我们需要的下一个程序可能就是之前我们需要的最后一个程序,接下来我们可能还需要之前需要的倒数第二个程序。拥有缓存可以取得一定的效果,但是建立多个缓存级别,包括从体积最小、速度最快的到体积最大、速度最慢的各种缓存,可能会有更好的效果。延迟的长度可以表明你的阅历是否丰富,信息检索耗费的精力则可以检验你的知识是否渊博,从延迟发生的频率则可以看出你的组织管理是否合理,有没有将最重要的东西储存在最近的位置。

2023-01-24 22:00:00 104

原创 几种觉排序优劣

插入算法的核心思想就是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间中的元素一直有序。第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。1)将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行快速排序。

2023-01-24 07:00:00 1245

原创 探索与利用-要最新的还是最好的?

再举一个例子,比如说现如今飞速发展的互联网社交,好多老年人并没有像年轻人那么热衷总是探索新的朋友,而是选择固定的一些老友经常聚会玩耍,他们并不是说没有了太多的激情,而是说他们更明智的选择了已经建立深厚友宜的伙伴,选择新的朋友对他们来说大部分是在浪费生命有限的时光。同样,对于儿童来说,他们是一个探索的时期,不断的尝试各种新的玩具,各种看似可以用来吃的东西放进嘴里,他们其实是更多的去发现新的好玩的,对自己有好处的事物,以致在将来一段时间内享受它们再带的快乐。如果有可以写到留言上,一起分享知识的力量。

2023-01-23 22:00:00 67

原创 最优停止理论

比如,面试时,如果只有一位申请者,那面只能接受他,如果有两名申请者,你成功选到优秀人选的概率都是50%,如果有第三名申请人,情况就一下子变得有意思了。【贝叶斯推理也是基于部分信息作出尽可能最优的选择,本章的最优停止理论强调的是时间、精力消耗上的适可而止,贝叶斯推理强调的是建立在不完整信息上的分析】比如找对象,假如希望在25-35之间找到最好的对象,按照37%原则,应该在29岁之前保持观望,之后如果看到截至目前最优的候选者,就果断求婚~【也可以把时间段改成谈恋爱次数,当然我可是现在才看到这个理论的。

2023-01-23 07:00:00 912

原创 注重实效的项目

最勤勉的开发者如果被派到不在乎质量的团队里,会发现自己很难保持修正琐碎问题所需的热情。团队必须为产品的质量负责,支持那些了解我们在“软件的熵”中描述的“不要留破窗户”哲学的开发者,并鼓励那些还不了解这种哲学的人。对外界而言,看上去沉闷寡言的项目团队是最糟糕的团队。大多数团队都应是分工明确的,举例来说,团队中有负责管理对接其他部门业务的,有管理数据的,有管理文档的,如若在需要的时候有针对性的联系某人,效率一定会提升不少。注重实效的团队:一旦参与项目的人员超过一个,你就需要建立一些基本原则,并相应的派任务。

2023-01-22 22:00:00 1407

原创 当你编码时

我们中是想“减速并右转”,但是,可千的好司机会不断查看周围 的情况,检查潜在的问题,并且让自己在万一发生意外时处在有利的位置上。高效的编程决不是某些工具可以被取代的,每一分钟程序员都要做出决策,如果要让程序可以长久的、富有生命力、生产力的存留下来,并需要加入编程者对于决策的衡量与把控。3、按照计划行事,不管计划是在你的头脑中,在鸡尾酒餐巾的背面,还是在某个CASE工具生成的墙那么大的输出结果上。5、不要只是测试你的代码,还要测试你的假定。7、不要做历史的奴隶,不要让已有的代码支配将来的代码。

2023-01-22 07:00:00 1448

原创 弯曲或折断

得墨忒耳定律(Law of Demeter,缩写LoD)亦称为“最少知识原则(Principle of Least Knowledge)”,是一种软件开发的设计指导原则,特别是面向对象的程序设计。但并发迫使你更仔细地对事情进行思考,这不再是一个人的舞会,因为事情现在可能会在“同一时间”发生,你可能会突然看到某些基于时间的依赖关系。在分层体系结构中,每个层中的代码只能调用层中的代码和下一层内的代码。在面对日后项目不确定的变更,需求的迭代,如何尽量保持代码的可撤销性,今天分享一下。只和自己直接的朋友交谈。

2023-01-21 22:00:00 1670

原创 注重实效的偏执

正常的情况下应该是在调用者处进行校验,通过早发现早诊断要比运行计算时再发现要好的多,另外,被调用者不确定所有传给他的参数是什么,如果过多的参数判断就将使功能代码更加的职业不再单一。举例说明一下,比如说在方法a中调用有一个方法是计算平均数的方法b,考虑一个情况,计算平均数不应该为0, 那么参数校验应该是在调用者a方法进行校验,还是应该在被调用者b方法校验?但现实往往是比较公正的,就像在《程序开发心理学》里提到的一样的观点,“你不可能写出完美的软件,因为完善的软件不存在”。记录两次重复的记录。

2023-01-21 07:00:00 74

原创 工具的使用与理解

木匠可能需要尺、计量器、几把锯子、几把好刨子、精良的凿子、钻孔器和夹子、锤子还有钳子。这些工具将经过认真挑选、打造得坚固耐用、并用于完成很少与其他工具重合的特定工作,而且,也许最重要的是,刚刚出道的木匠把它们拿在手里会觉得很顺手。随着时间的流逝经验的增长,在不同阶段会需要不同的工具,精心挑选适合解决问题的工具,适合的工具,并应用其中,工具的使用最终将是自己双手的延伸。但如果花些时间学习使用更多的工具,包括可以编写自身可编写的代码,这样的工具,将在职业、事业生涯上更加的如鱼得水。必需的键击将成为本能反应。

2023-01-20 13:30:00 219

原创 可撤销性与曳光弹

说的是编写代码、功能模块、组件时考虑将来会出现变化的情况,如果将来变化了,所写的代码是否可以随时撤销。打个比方项目早期用a数据库,发展一阶段可能要用b数据库、c数据库,要考虑可撤销性,不必做出许多关键的,不可逆转的决策,可以让我们应对一些突如其来的变化。在击不中目标的情况下,曳光代码也可以帮助我们在反馈中调整方向,最终接近目标。曳光弹指的是一种装有能发光的化学药剂的炮弹或枪弹,发射后在黑夜中能显示子弹的轨迹。简单来讲,曳光代码的关键就是反馈结果,可让程序员看到目前做出来的东西距离目标还差多少。

2023-01-20 08:30:00 1346

原创 重复的危害与正交性

重复的危害指的是不要在系统各处对知识进行重复,而正交性指的是不要把任何一项知识分散在多个系统组件中。

2023-01-19 13:30:00 1550

原创 可测量性和可放大性

要致富,你需要两样东西:可测量性和可放大性。你的职位产生的业绩,应该是可测量的,否则你做得再多,也不会得到更多的报酬。此外,你还必须有可放大性,也就是说你做出的决定能够产生巨大的效应。

2023-01-19 08:30:00 90

城市三级联动 纯js

亲测可用, 灵活 。 可以拿来一用, 1、引js 2、写select 标签

2015-08-11

php实例代码

原书带的实例代码 php开发实战权威指南

2014-05-08

搜索引擎优化(seo)

搜索引擎优化(seo),值得一看。最基础的

2013-06-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除