文章列表
编程从一个角度来说,象是在推土,或者设定个小目标,完成,再设定一个小目标再完成,每一小步都有成功的喜悦。是在做一个类似一小步,一小步创作的东西,每一步有小成果,有它的趣味性和创造性,有每次一个小胜利的喜悦。编程的过程从一个角度来说更象是扫雷,每次一小步,还要保证扫过的地方一定没有雷,有它的谨慎性。
总的来说程序可以分为衔接部分和功能部分。功能程序要要有单元测试来保证。集成测试来保证衔接部分和单元协作的正确性。
面向过程和面向对象和分合的关系:分合角度,面向过程主合A->B->C,面向对象主分分为ABC三对象;组件角度,面向过程和衔接程序相呼应,面向对象和功能程序相对应。面 ...
整体过程
1) 原代码重构成逻辑块清晰的过程化代码
2) 对不同逻辑块进行抽取成服务类
3) 从领域对象的角度分析服务类,通过单一职责来梳理服务类
(二)原代码重构成逻辑块清晰的过程化代码
减少重复学习,在原来掌握的基础上进行提高。质疑驱动,不断对已经掌握的知识进行质疑。
如果能把已经掌握的东西总结成模式,才是真正掌握了。
制作业引言
如果我们现制造一个汽车,如果我们制造完汽车跑不起来,就得去检查哪里出了问题,这样很麻烦,为了减少麻烦,我们把制造汽车分成一个步骤,1.部件的制造,如发动机,轮胎。2.部件检测3.用经过检测的部件来组装汽车4整车试运行。这样可以大大减少出错的概率。
软件业
对比软件行业,做一个程序,也可以把这个程序分为功能部分和组装功能的部分,我分别称之为功能程序和衔接程序,功能程序要有单元测试来保驾,衔接程序要有集成测试来保驾,整个程序要有验收测试来保驾。
软件自测试程序
如果做完一个程序,可以随时让程序自己告诉我们自己是否是可以正常运行的,无疑是很好的诱惑,这种程序称之为可自测 ...
在京东这一段时间做了很多数据的迁徙,做一些总结。(以sqlserver迁徙至mysql为例)
迁徙的需求:业务数据从sqlserver迁徙至mysql,尽量减少系统停用的时间。
迁徙流程:
中间件接写,开启changelog
原来sqlserver的读取写入统一由中间件接管,保证读写统一。中间件写入时把变更信息记录到changelog表。changelog(主键,变更主键,变更表,变更类型,状态,创建时间,修改时间),状态为0
ultredit
*E^+*^p替换行
*result:true$删除以什么结尾的行
\n(\s*\n)+ ,在“替换为”里输入:\n
(一)需求-开发-测试关系
现公司很多需求在产品提出后,是否完善是个问题,在实际工作中,发现测试测试功能要从开发处问得需求,开发在开发的过程当中要承担很大的需求任务,当然开发确实要思考需求,但这不妨碍产品提出更完善的需求。建议如下:
软件工程中对需求的是否合格的标准是是否可测试
***需求完成后,测试使用需求文档生成测试用例用于测试,需求文档告诉测试测什么,开发告诉测试怎么测。
***测试不仅仅是测试程序是否正确,同时也对对需求的完备性进行测试。
注:敏捷开发中开发兼职需求,但需求依然是完备的。
1)根据要解决的问题来设计线程或者类体系,保证带来的复杂性都是因为问题的复杂性而带来(用多线程可带来好处的地才使用),并且要试图从技术上尽量缩减方案的复杂性(比如用JDK5新线程代替原来wait,notify)。(数据迁徙重构有感)
针对代码:要思考多这几个类解决了什么问题,多几个线程又解决了什么问题,深层次的调用又解决了什么问题,如果没有解决什么问题,只是复杂,还是删除掉吧。
2)重构代码要有自动测试护航,哪怕是只有验收测试。
3)写足够少的代码,保证每小步都可执行,可观测,在每次小正确时考虑是否要重构。
1.有异常信息的技术性调试
如果有异常信息,一定要从异常信息出现的原因入手。
例如:java.lang.NoSuchMethodError: org.springframework.util.ObjectUtils.isArray(Ljava/lang/Object;)
解读:肯定找到类了,类里面没有方法。
分析:自己本地没错,服务器上有错,就是在本地能找到方法,在服务器上找不到。也就是说肯定有一个类有此方法,并且还有一个同包的类无此方法,应该是jar包冲突。然后找到包含此类的jar包确认下就可以。
2.结果不对的逻辑性调试
1) 通用方法
一个方法处理多个业务,比如修改用户传入一个用户对象,方法根据邮箱,手机..是否为空来处理修改手机,邮箱等业务
处理方法:每个业务要分开,单一职责
2) 对象内的平行方法
A(a1,a2,a3),a1,a2,a3方法中有相似功能。
IA(a)ßA(a,abstract b)ß
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.sprin ...
利用存储过程执行一批语句
DELIMITER $$
DROP PROCEDURE IF EXISTS `proc1`$$
CREATE PROCEDURE `proc1`()
BEGIN
declare i integer;
set i=0;
while i<=100 do
begin
set @TABLENAME=CONCAT('update ','sns_userinfo_ext_',i,' set mobile_flag=1,mail_flag=1;');
PREPARE STMT FROM @TABLENAME;
EXECUTE ST ...
Why:一些加密,hash算经常会用到
示例数
Integer.toBinaryString(-5)
正值:0000 0000 0000 0000 0000 0000 0000 0101
反码:1111 1111 1111 1111 1111 1111 1111 1010
+1: 1111 11
mysql数值范围
TINYINT 1字节 -128~127 0~255
INT 4 21亿 -2147483648~21,4748,3647 默认11
SMALLINT 32768到32767 无符号的范围是0到65535
BIGINT 8 922亿亿 -9223372036854775808~922,3372,0368,5477,5807 默认20
int(3) zerofill 010 只控制显示宽度,不控制存储宽度
UNSIGNED 可修饰无符号型
...
原始类型空指针
Integer a=null;
if(a==0)会抛出空指针
Map隐含添加冲突
Iterator是工作在一个独立的线程中,它会建立一个