作者小头像 Lv.3
383 成长值

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

微服务架构、DevOps、自动化运维、云计算、大数据
个人勋章
  • 考证狂人
成长雷达
0
18
200
165
0

个人资料

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

微服务架构、DevOps、自动化运维、云计算、大数据

达成规则

他的回复:
程序员修炼之道 Day4 敏捷项目管理与团队华为云账号:a15006127610微信昵称: 无名项目启动之前    1. 项目需求        无人确切知道自己想要什么,他们或许知道大概的方向,但不会了解过程的曲折        程序员帮助人们理解他们想要什么         需求是从反馈循环中学到的        和用户一起工作以便从用户角度思考        策略即元数据        使用项目术语表        需求文档是给我们自己准备的    2. 处理无法解决的难题        不要跳出框框思考找到框框    3. 携手共建        不要一个人埋头钻进代码里,找个朋友和你一起干        敏捷不是一个名词,敏捷有关你如何做事    4. 敏捷的本质        个体和互动高于流程和工具        工作的软件高于详见的文档务实的项目    1. 务实的团队        维持小而稳定的团队        排上日程以待其成        组织全功能的团队    2. 椰子派不上用场        做能起作用的事,别赶时        在用户需要时交付    3. 务实的入门套件        使用版本控制来驱动构建、测试和发布        尽早测试,经常测试,自动测试        直到所有的测试都运行,编码才算完成        使用自动化测试,不要使用手动程序    4. 取悦用户        为用户开发能够带来商业的价值的解决方案,并让他们每天都感到愉快    5. 在作品上签名        为自己的作品感到自豪
他的回复:
程序员修炼之道 Day3 软件编程的并发华为云账号:a15006127610微信昵称: 无名编程中的并发    1. 打破时域的耦合        通过利用用户工作流中的并发性    2. 共享状态是不正确的状态        共享状态会带来无穷的麻烦        随机通常是并发问题    3. 角色和进程        用角色实现并发性时不必共享状态        用角色来管理并发状态,可以避免显式的同步    4. 黑板        使用黑板来办调工作流当你编码是,怎么做?    1. 听从蜥蜴脑        听从你内心的蜥蜴        当编程举步维艰时,其实是潜意识在告诉你    2. 巧合式编程        不要依赖巧合编程        只能依赖可靠的事物    3. 算法的速度        评估算法的级别        对估算做测试    4. 重构        尽早重构, 经常重构    5. 为编码测试        测试与找bug无关        测试是代码的第一个用户        即非自上而下,也不自下而上,基于端对端构建        要对软件做测试,否则留给用户去做    6.  基于特性测试        使用基于特性的测试来检验假设     7. 出门在外注意安全        保持代码简洁        尽早打上安全补丁    8. 事物命名        好好命名,需要是更名        用名字向读者表达你的意图
他的回复:
程序员修炼之道 Day2 软件编程认知华为云账号:a15006127610微信昵称: 无名软件编程基础工具纯文本的威力 纯文本不会过时,它会让你的工作事半功倍shell游戏        当图形化界面无法胜任,影响性能等,使用shell 提高工作效率    3. 加强编辑能力        游刃有余的使用编辑器    4. 版本控制工具        永远使用版本控制工具    5. 调试        有问题解决问题,不要去责备谁        修改代码前,先进行测试        在真实环境进行测试务实的偏执    1. 文本处理        学会文本处理语言    2. 工程日记        要把工程中出现的问题记录下来    3. 契约式设计        使用契约进行校验和文档化    4. 死掉的程序不会说谎        死掉的程序比有缺陷的程序造成的危害要小    5. 断言式编程        使用断言去预防不可能的事情    6. 保持资源的平衡        对资源进行分配就有责任去释放改资源    7. 不要冲出前灯范围        有始有终        每天进步,最终完成一大步    8. 解耦        解耦代码让改变更容易    9. 变换式编程        编程讲的是代码,而程序谈的数据    10. 继承税        不要付继承税        尽量用接口来表达多态        用委托提供服务        利用mixin恭喜功能    11. 利用配置参数化应用程序
他的回复:
程序员修炼之道day1读书笔记华为云账号:a15006127610微信昵称:无名1. 人生是你的人生是自己的,自己选择,自己对自己负责。2. 我的源码被猫吃了提供可供解决问题的选择,而不是去寻找借口。3. 软件的熵不要放任破窗(技术债包括不好的设计,错误的决策,糟糕的代码),遇到问题马上解决,不要放任问题变大,产生更多关联的问题。4. 石头做的汤和煮熟的青蛙把握全局,察觉变化和趋势,不要沉浸于细枝末节。5. 够好即可的软件需求是变化的,不要过度设计和过度开发。以用户的真实需求为开发目标。6. 知识组合不要局限于某一种语言,某一种技术,某一种架构,要开放持续的学习,吸收各种可以解决问题的技术。7. 交流有效的沟通交流可以务实的理解需求和开发目标。8.优秀设计的精髓设计要是弹性的设计,可以随时适应业务变化而变更。开发是为业务服务的。9. DRY错误的重复需求和描述都要清晰无歧义。不会造成理解偏差。10. 正交性正交性有点类似微服务,模块化。就是尽可能的弱耦合,减少依赖。11. 可逆性所有的决定要适应变化,不是一成不变不能更改的。类似第8条。12. 曳光弹通往目标的过程中,不断设置路标,避免设计跑偏。13. 原型与便签原型用来学习经验,把握全局,不要纠结于技术的细枝末节。14. 领域语用领域内的专业的语言术语来做设计和编程。15. 估算通过估算,提前发现潜在的问题。然后迭代的过程中不断的修正估算
发布时间 2020/03/31 10:20:45 最后回复 wei 2020/04/29 16:02:00 版块 社区活动
23786 78 0
他的回复:
华为云账号: a15006127610微信号:wuming860411读书笔记: day02 优化多表连接一.  嵌套循环   算法: 驱动表返回一行数据,通过连接列传值给被驱动表,驱动表返回多少行,被驱动表就要被扫描多少次。在执行计划中,离NESTED LOOPS关键字最近的表就是驱动表。使用场景: 嵌套循环被驱动表走索引只能走INDEXUNIQUE SCAN或者INDEX RANGE SCAN。二. HASH连接 算法:两表等值关联,返回大量数据,将较小的表选为驱动表,将驱动表的“select列和join列”读入PGA中的work area,然后对驱动表的连接列进行hash运算生成hash table,当驱动表的所有数据完全读入PGA中的work area之后,再读取被驱动表(被驱动表不需要读入PGA中的workarea),对被驱动表的连接列也进行hash运算,然后到PGA中的work area去探测hash table,找到数据就关联上,没找到数据就没关联上。使用场景:哈希连接只支持等值连接。哈希连接的适用场景就是嵌套循环的不适用场景,即两表连接条件关联的结果集比较大。三. 排序合并连接(SORT MERGEJOIN)算法:两表关联,先对两个表根据连接列进行排序,将较小的表作为驱动表,然后从驱动表中取出连接列的值,到已经排好序的被驱动表中匹配数据,如果匹配上数据,就关联成功。驱动表返回多少行,被驱动表就要被匹配多少次,这个匹配的过程类似嵌套循环,但是嵌套循环是从被驱动表的索引中匹配数据,而排序合并连接是在内存中(PGA中的workarea)匹配数据。使用场景:主要用于处理两表非等值关联,比如>,>=,,=,,但是不能用于instr、substr、like、regexp_like关联,instr、substr、like、regexp_like关联只能走嵌套循环。四. 笛卡儿连接(CARTESIAN JOIN)两个表关联没有连接条件的时候会产生笛卡儿积,这种表连接方式就叫笛卡儿连接。执行计划中MERGE JOIN CARTESIAN就表示笛卡儿连接。在多表关联的时候,两个表没有直接关联条件,但是优化器错误地把某个表返回的Rows算为1行(注意必须是1行),这个时候也可能发生笛卡儿连接。五. 标量子查询(SCALARSUBQUERY)当一个子查询介于select与from之间,这种子查询就叫标量子查询。标量子查询类似一个天然的嵌套循环,而且驱动表固定为主表。标量子查询中子查询的表连接列也必须包含在索引中。优化建议: 尽量避免使用标量子查询,假如主表返回大量数据,主表的连接列基数很高,那么子查询中的表会被多次扫描,从而严重影响SQL性能。当SQL里面有标量子查询,我们可以将标量子查询等价改写为外连接,从而使它们可以进行HASH连接。六. 半连接(SEMI JOIN)两表关联只返回一个表的数据就叫半连接。半连接一般就是指的in和exists。in和exists一般情况下都可以进行等价改写。七. 反连接(ANTI JOIN)两表关联只返回主表的数据,而且只返回主表与子表没关联上的数据,这种连接就叫反连接。反连接一般就是指的not in和not exists。not in和not exists的区别 : not in的话,只要子查询中有一个null,结果就为空,而notexists不会,说明not in认为null是未知的,可以等于任意数。将not exists等价改写为not in的时候,要注意null。一般情况下,如果反连接采用not in写法,我们需要在where条件中剔除null。
发布时间 2020/03/31 10:20:45 最后回复 wei 2020/04/29 16:02:00 版块 社区活动
23786 78 0
他的回复:
华为云账号: a15006127610微信号:wuming860411读书笔记: day01一。sql优化中一些概念Cardinality : 表示一个结果集的数据量大小,可以对应执行计划中某一步返回的数据量。NDV : 某个列唯一键(Distinct_Keys)的数量。主键列的基数等于表的总行数。Selectivity : 指一组谓词(条件)在一个数据集中命中的比例。。一般命中5%以内的数据走索引,超过5%的数据使用全表扫描。Cost : 优化器计算出来的SQL执行代价,优化器通过Cost的大小选择最优的执行计划,Cost的绝对值没有太大的意义。二。直方图:用来帮助CBO在对NDV很低、数据分布不均衡的列进行Rows估算的时候,可以得到更精确的Rows 。    1.  NDV比较小,重复值比较多,查询的值实际不存在    2.  如果支持变量窥视,可以根据实际参数值生成执行计划,否则一般按照1/NDV估计。Oracle对应特性为自适应游标共享。    3.  由于直方图的桶数有限(一般为256个),当NDV很高,数据又不均衡,可能估算的值与实际情况差距较大    4.  当列出现在where条件中,列的选择性小于1%并且该列没有收集过直方图,这样的列就应该收集直方图。三。 回表 :(TABLE ACCESS BY INDEXROWID),当对一个列创建索引之后,索引会包含该列的键值以及键值对应行所在的rowid。通过索引中记录的rowid访问表中的数据就叫回表。如果只访问索引列或者使用组合索引可以避免回表。    1.重要性: 回表一般是单块读,回表次数太多会严重影响SQL性能,如果回表次数太多,就不应该走索引扫描了,应该直接走全表扫描。在进行SQL优化的时候,一定要注意回表次数!特别是要注意回表的物理I/O次数!四  聚集因子: (CLUSTERINGFACTOR),表示一个索引对应数据在表中的顺序性,它的大小介于表的块数和表行数之间。如果聚集因子与块数接近,说明表的数据基本上是有序的,而且其顺序基本与索引顺序一样,回表只需要读取少量的数据块就能完成。如果聚集因子与表记录数接近,说明表的数据和索引顺序差异很大,回表会读取更多的数据块。如果降低聚集因子的影响 :1)重建表,按照某个索引列的顺序2)通过组合索引避免回表3)使用Oracle的clustertable4)增大buffercache将大部分数据缓存到内存或者使用内存表五 统计信息 :统计信息主要分为表的统计信息、列的统计信息、索引的统计信息、系统的统计信息、数据字典的统计信息以及动态性能视图基表的统计信息。包含的内容: 1)  表的统计信息主要包含表的总行数(num_rows)、表的块数(blocks)以及行平均长度(avg_row_len)。 2)  列的统计信息主要包含列的NDV、列中的空值数量以及列的数据分布情况(直方图)。 3)  索引的统计信息主要包含索引blevel(索引高度-1)、叶子块的个数(leaf_blocks)以及聚集因子(clustering_factor)。六 访问路径:指的就是通过哪种扫描方式获取数据1. TABLE ACCESS FULL : 表示全表扫描,一般情况下是多块读2. TABLE ACCESS BY USER ROWID : 表示直接用ROWID获取数据,单块读3. TABLE ACCESS BY ROWID RANGE : 表示ROWID范围扫描,多块读4. TABLE ACCESS BY INDEX ROWID : 表示回表,单块读5. INDEX UNIQUE SCAN : 表示索引唯一扫描,单块读6. INDEX RANGE SCAN : 表示索引范围扫描,单块读7. INDEX RANGE SCAN DECENDING : 表示索引降序范围扫描,从右往左扫描,返回的数据是降序显示8. INDEX FULL SCAN : 表示索引全扫描,单块读9. INDEX FAST FULL SCAN : 表示索引快速全扫描,多块读10. INDEX FULL SCAN(MIN/MAX): 表示索引最小/最大值扫描、单块读11. INDEX SKIP SCAN :  表示索引跳跃扫描,单块读