knowledge generalization

来源:互联网 发布:手机载图软件 编辑:程序博客网 时间:2024/06/13 02:23
一 .技术

1)概要:

架构: http://blog.csdn.net/learner811/article/details/39226331
结构:http://blog.csdn.net/learner811/article/details/48412201

linux                pipe       监控  (free sar top vmstat uptime)
命令:
          http://blog.csdn.net/learner811/article/details/47177219
          http://blog.csdn.net/learner811/article/details/50111983
系统:http://blog.csdn.net/learner811/article/details/51487238
监控:http://blog.csdn.net/learner811/article/details/50111983


mysql              index      主从(show master status  change master to start slave | I/O sql)  | 提交(脏读 幻读 不可重复读 串行化)
索引
              http://blog.csdn.net/learner811/article/details/46289173
              http://blog.csdn.net/learner811/article/details/46397819
新特性:http://blog.csdn.net/learner811/article/details/49401245
运维:   http://blog.csdn.net/learner811/article/details/46355475
知识:   http://blog.csdn.net/learner811/article/details/33749053


php                 array       算法(快排 冒泡 插入 选择)                         
算法:
        (经典算法)http://blog.csdn.net/learner811/article/details/48802051
算法概念          http://blog.csdn.net/learner811/article/details/28971369
算法使用        http://blog.csdn.net/learner811/article/details/32068329
算法游戏          http://blog.csdn.net/learner811/article/details/49706591
哈希算法         http://blog.csdn.net/learner811/article/details/27048289

原理 http://blog.csdn.net/learner811/article/details/46580349
插件 http://blog.csdn.net/learner811/article/details/46447241
配置 http://blog.csdn.net/learner811/article/details/38089299
安全 http://blog.csdn.net/learner811/article/details/46799009
设计模式 http://blog.csdn.net/learner811/article/details/39518651

redis+cache    curd       区别(主从 事务 持久化 内存和失效等等)    
语法http://blog.csdn.net/learner811/article/details/48491501
索引:http://blog.csdn.net/learner811/article/details/51002695
           http://blog.csdn.net/learner811/article/details/46401519
           http://blog.csdn.net/learner811/article/details/46421829


nginx         order       I/O (epoll就绪通知,不用轮询整个事件表) http://blog.csdn.net/learner811/article/details/38166767

git
http://blog.csdn.net/learner811/article/details/51585010
http                               首部(通用 请求 响应 实体)                                http://blog.csdn.net/learner811/article/details/51418026



2)详细:

linux管道:cut join exec redirect    +preg
  
  //redirect : cat + > < >>  2>/dev/null tee
  cat test.shtest1.sh 2>/dev/null | grep -n 'echo'       
  ls test.shtest1.shtestsh.sh 2>err.txt | grep 'test'   
  grep -n 'echo' <test.sh                                 
  cat test.sh>test.txt                                 
  cat termcap* >> termcapback                           
  cat test.sh|tee -a test.txt &>/dev/null     <==> /dev/null 2>&1 正确和错误的信息全部丢弃
  ls -l / | tee -a ~/homefile | more
 
  //execute : cat + sh mail tar rpm iconv xargs
  cat testpipe.txt | sh testpipe.sh                                    
  cat test.sh|mail -s 'test' 8292669@qq.com                            
  tar -cvf -packname filename| tar -xvf -(这个减号是取前面的输出作为输入) 
  rpm -qa|grep licq                                                     
  iconv -f gb18030 -t utf-8 new-aa.txt                                 
  cut -d':' -f1 /etc/passwd | xargs -p -n 5  -e'lp' finger
  find /sbin -perm +7000 | xargs ls -l


  //join: join paste col more expand head  tr 
  last | tr '[a-z]' '[A-Z]'
  cat /etc/passwd | tr -d ':' > /root/passwd.linux
  man col | col -b > /root/col.man
  cat /etc/man.config | col -x | cat -A | more
  paste /etc/passwd /etc/shadow
  cat /etc/group|paste /etc/passwd /etc/shadow -|head -n 3
  join -t ':' -1 4 /etc/passwd -2 3 /etc/group
  grep '^MANPATH' /etc/man.config | head -n 3 | \                 
  >expand -t 6 - | cat -A
 
  //cut:echo +cut split awk sort grep wc touch less
  wc -l lsroot*
  last | grep [a-zA-Z] | grep -v 'wtmp' | wc -l 
  grep --color=auto 'MANPATH' /etc/man.config
 touch `date +%Y%m%d%k%M%S`.txt
  ls -al /etc | less 
  echo $PATH | cut -d ':' -f 3,5                    //3- 3.5  3-5
  export | cut -c 12-
  cat /etc/passwd | sort -t ':' -k 3 -n 
  echo $PATH | cut -d ':' -f1 | sort | uniq -c
  split -b 300k /etc/termcap termcap
  split -l 10 /etc/termcap termcap  
  cat /etc/passwd | awk -F ':' '{print $1"\t"$2}'
  kill -9 `ps -ef | grep smbd | tr -s ' ' | awk -F' ' '{print $2}'`

  //preg
  (sed -n '1,$p'|grep -n 'echo')<test.sh #这个脚本比较有意思了。由于前面是管道,后面需要把test.sh内容重定向到 sed ,然后sed输出通过管道,输入给grep.需要将前面用"()"运算符括起来。在单括号内的命令,可以把它们看作一个象一个命令样。如果不加括号test.sh就是grep 的输入了。
  #上面一个等同于这个
  sed -n '1,$p'<test.sh | grep -n 'echo'
  sed -n '1,10p'<test.sh | grep -n 'echo' <testsh.sh#哈哈,这个grep又接受管道输入,又有testsh.sh输入,那是不是2个都接收呢。刚才说了"<"运算符会优先,管道还没有发送数据前,grep绑定了testsh.sh输入,这样sed命令输出就被抛弃了。这里一定要小心使用
  cat filename |grep -v '^[0-9]*$' | sed 's/|/ /g' |sort -nrk 8 -nrk 9 |tail -n +1 |head -n 10


字符:12
//tr split tee wc wget iconv tar cut join awk xargs sed
tr 删除冒号 cat /etc/passwd |tr -d ':' > /root/passwd.linux
split 分割10行 split -l 10 ./err.txt termcap
tee 输出文件 cat test.sh | tee -a ok.txt
wc 统计行数 last | grep [a-zA-Z] | grep -v ‘zhouyue' | wc -l
wget下载一个文件: wget -P dir url
iconv 转码:iconv -f from -t to new-aa.txt
tar压缩和解压:tar -cvf -packname filename| tar -xvf -(这个减号是取前面的输出作为输入)
cut 截取第一列 cat /etc/passwd |cut -d ':' -f1 | sort | uniq -c
join 连接字符串 join -t ':' -1 4 /etc/passwd -2 3 /etc/group //-1是第一个文件 -2是第二个文件 4是第四个字段 3是第三个字段 匹配的拿前面去,拼接字符,
awk 选取某一列 cat /etc/passwd | awk -F ':' '{print $5}'>>awk.txt 2>&1
xargs php改名字 ls |grep .php |xargs -i mv {} {}.bak
(sed -n '1,$p' )</etc/passwd #第一行至最后一行, 输出来



php 数组

说明:一般的,数组的curd和sort全是操作数组本身,指针也是。


补充一点,就是curd(array,value)而search是(value,array)
//array    元素 集合  kv  array_重组  回调 填充 计算  +排序
array() each()  reset()  end() array_pop() array_push() reset()  count() shuffle()  range() array_shift array_unshift current pos next prev 

array_multisort()   +排序 sort-升序 r-降序 k-键名+ a-保持索引关系 u-自定义算法 |nat-自然

array_intersect()  array_diff() 

array_unique()  array_chunk()  array_reverse()  array_flip() array_slice()  array_combine()  array_merge  array_rand  array_search

in_array()  array_keys() array_values()  array_key_exists()  list()  each() 
  
  array_filter()  array_walk()  array_map()

  array_sum array_product array_count_values   

  array_fill array_pad



http首部

通用:cache-control  connection date pragma trailer  transfer-encoding  upgrade  via  warning

请求:accept accept-charset  accept-encoding   accept-language  authorization  expect from  host  if-match  -f=modified-since  if-none-match
if-range   if-unmodified-since  max-forwards  proxy-authorization  range  referer   user-aget

响应 :accept-ranges age etag location  proxy-authenticate  retry-after  server  vary   www-authenticate

实体:allow  content-encoding  content-language content-length  content-location  content-md5  content-range  content-type  expires  last-modified

+cookie: set-cookie  cookie

+other:x-frame-options   x-xss-protection  dnt  p3p


nginx + git


 
cache(kv ex):

+自建索引

 * key - user:userid:9:email(表名:主键名:主键值:列名)   lisi@163.com  
 * val - 返回:个数|是否修改|存在性|类型|秒数 -1(已过期) -2(不存在);空字符串|旧值|头尾元素或中间元素|返回随机值
 * ex - mem指定 | redis可指定可不指定 ttl

string 静态数据:存取
hash   属性数据:关系
set:去重数据:集合
list:列表数据:头尾
sort set    排序数据:先后

//存取 时效 加减1 键名操作 事务 持久化 
//get set setex setex delete mset mget getMultiple=>multi flushdb flushall     (ex nx m+)
//ttl persist setTimeout=>expire expireAt|                                              (+4)
//incr incrby decr decrby                                                                        (number)
//keys randomKey type dbsize rename renameNx move exists            (key use)

//curd +eists contain len 
//string:getSet get/setRange append strlen                           (get set)       
//hash h m/set m/get del keys vals getall len exists incrby    (field 0=>1 2=>3 4=>5 )                    
//list:l r push/x pop set get | l range/trim/rem/insert lsize |rpoplpush   (in out  range(save del get insert)  lists)
+
//set s add rem move pop sort inter/store union/store diff-前面的差集/store randMember members contains=>sismember size=>scared     (inter union diff | add rem  pop | member(contain size rand))
//zset z add rem |rev/range rem/rangebyscore score rank |count incrby size |union/inter(add and multiple)
(key score meber | score member | score member … ... )

./memcached -m 256 -c 1000 -P -l 127.0.0.1 -p 11211 -u root -d /tmp/memcached.pid
getVersion getStats hit/cmd.. getExtendedStats getStatus


0

mysql 索引


覆盖索引用通俗的话讲就是在select的时候只用去读取索引而取得数据,无需进行二次select相关表。这样的索引的叶子节点上面也包含了他们索引的数据。
select a  from table_name where b ·····;这样的一个查询,都知道索引应该加在b上面,
查询的处理过程:
首先去检索b索引找到与其对应的索引,
然后根据索引区检索正确的数据行。
注意:没选中索引列和where子句中使用了like,是不能覆盖索引的

覆盖索引不用遵循最左的顺序,但是要建在一个索引内,哪怕是单列的索引也可以是 using index
EXPLAIN SELECT  houseRoleType  FROM house WHERE  houseFine=0;
//where 子句内遵循最左前缀
EXPLAIN SELECThouseTagsFROM house WHERE  houseRoleType>0 AND houseType>0 AND houseFine>0

Order 使用索引情况:
Order By Yes: 
 * where column order x,y   支持最左前缀:column,x,y   
 * select y from table order by x  x,y不必是同一个索引,但必须是索引

Order By No:
 * 不同的索引 
 * 非连续的索引 
 * asc+desc  
 * 表达式和多个值

特别提示:mysql一次查询只能使用一个索引。



二.项目(需求 开发 测试 + 编程守则)

1)项目管理
:无形(风险+人员)
软件是无形的,开发过程难以预见
风险:
识别--项目(人员) + 产品(程序) + 业务(销售)
分析--可能性(大中小)+ 后果(灾难 严重 可容忍 可忽略)
规划—规避+最小化+应急措施
监控—识别项中反馈的             
人员:
主管,包容差异性的一致对待,分类包括任务+自我实现+交互(重要,察觉不和谐 )      
组员,规模不要过大,还要有凝聚力,双向沟通是衡量沟通是不是有效的指标      

项目规划:
思想:都需要使用眼力直接估算工作量或者估算项目和产品特点
内容:报价 评审 (进度(任务 工作量(人/日)工期 依赖关系) = 条形图+人员分配图 | 工作量=情景点+任务数) 估算(应用组件 功能点 代码行数 | 系统规模+人员变化


2)需求工程:需求可行性 需求发现 需求描述 需求有效性
用户需求==>系统需求(功能+非功能)
需求文档:术语 需求定义 体系结构 需求描述  系统模型 系统进化 

细化:需求描述 +需求分析 +需求发现  +需求验证
 — 需求描述 : 功能 描述 输入 来源 输出 目的地事件 需求前置条件 后置条件 其他
 — 需求分析:需求发现 需求分类和组织 需求优先权 需求描述 |不切实际需求 不可避免的需求  不了解需求 不同的需求 特别的需求  破坏需求 不完善的需求
 —需求发现:文档整理 人员采访  用户故事 用例 ==>深入实际(需求来源于对别人活动的了解
 —需求验证:有效性 一致性 完备性 真实性 可检验性

需求管理:原因 + 方法
原因:技术变化 用户变化 功能变化
方法:识别 变更(分析 估算 实现)可追溯  ==>保持需求描述和系统实现的同步,

3)编程准则
限制信息可见性,抽象数据类型
检查输入有效性,范围 位数 表现  合理性
异常处理,异常报告给用户  异常通知其他系统  异常处理方法
最小化出错结构,无条件分支 浮点数 并行 递归 中断  继承 别名 无边界数组 默认处理
重启能力,不必重新表单填写 自动保存相关数据不同重新跑数 和向后恢复操作
数组边界
超时处理
常量命名

缺陷分类
数据缺陷:变量初始化 生命但未使用 赋值两次但中间没使用 数组越界 
控制缺陷:不可达代码 无条件的进行循环
输入输出缺陷:变量输出两次,期间没有新赋值
接口缺陷:参数类型 参数数量 函数结果无法使用 未被调用的函数
存储缺陷:未赋值 数据泄露 


软件测试:测试只能够证明存在错误,而不能证明它们不存在
软件审查,审查—>测试—>用例
单纯测试,不能确信输出异常,是由于一个新的错误造成的,还是原来的错误的副作用造成的
软件审查,可以发现,由于程序交互未预料到的情况,时序问题,和系统性能问题而导致的
测试用例,是在对输入和特定情况下的输出,以及锁测试对象的描述

4)分类:开发测试 + 发布测试 + 用户测试
--开发测试:缺陷测试==>(测试驱动开发,减少了回归测试的代价
单元(状态机)-划分区域 +边界考虑  +路径测试
组件(接口)         -接口误用 接口误解 时序错误
系统(时序图)-组件兼容和集成,能正确地进行交互,通过它们的接口在适当的时候传送正确的数据
--发布测试:有效性测试==>需求测试-情景测试-性能测试(压测)
--用户测试 :用户+开发  用户启发  用户验收



项目:
项目开始时,了解需求,看远一些,记住大图景;找好方法,分析业务流程,增加并发性
编程时,不要靠巧合编程常重构,多测试,多用自动化别重复保持正交性,实现可替换
思想,提供选择多学习,学会交流,不断改进

4)编程守则
技能:
信息(字符数字)集合(数组)透过界面(人机交互),对数据(数据库 文本 缓存)进行模块化(面向对象的类和面对变化的参数)的批量(循环重复)处理(赋值转化  条件变化)
想要内化这些小声音,还是要靠实践,如果不实践,即使你把这些小声音写在100块钱的高档笔记本上也没有用。

规范:
函数小 参数少 动名配合效果好,变量 函数(做什么或回答做什么) 明其义,注释自然不用了,调用依赖有先后 展示行为隐藏数据
命名:类 变量和数据库 缩写和魔法数字 | 目录 app clas conf  data doc htdocs  iamges  css js lib template  upload  
注释:作用 参数 返回值 作者 日期
代码风格:缩进 断行 打印

感受:
你可以把它想做是一种心理上的杂耍(边抛边接:通过轮流抛接,使两个或两个以上的物体同时保持在空中)
设计看成是一个险恶的、杂乱的和启发式的过程
开发高质量代码最终并没有要求你付出更多,只是你需要对资源进行重新分配,以低廉的成本来防止缺陷的出现,从而避免代驾高昂的修正工作
在小项目里的一些看起来“理当如此”的活动在大项目中必须仔细地计划
编程工作本质上是项无法监督的工作,因为没人真正清楚你正在做什么。
状况共有=目标共存+信息共享    通用性 = 功能最小化+沟通最大化  | solve:现象+ 问题+方法; 


重构:大布局==>小步快跑 (面向对象  封装 继承 多态 | 单一 替换 倒置 隔离 开闭  多用组合少用继承
1.拆函数和拆分对象  单一职责  SRP
2.代码复用 DRY
3.增加扩展点  开闭
4.降低依赖     DIP
5.分层    数据和业务( 贫血模型 vs 充血模型)
6.领域设计

观念:没有银弹,只能通过职责分配的高内聚和低耦合来实现
泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)



0 0
原创粉丝点击