- 博客(50)
- 收藏
- 关注
原创 《代码阅读方法》--全书总结
一、本书目标:能够阅读和理解重要软件的代码;领会许多重要的软件开发概念;知道如何探索大型的代码体;拥有大多数重要的高级、低级编程语言的阅读能力;认识到现实软件项目的错综复杂性;二、 为什么要阅读代码?修复,检查,改进现有的代码;发现它的的运作机理;提取可以重复利用的资源;(一)低品质代码低品质代码的特征(避免):编程风格不一样;结构不必要的复杂或难以理解;明显的逻辑错误或疏忽;过度使用不可移植的构造;缺乏维护;低品质的代码不需要再阅读浪费时间,因为现在高品质的
2020-05-16 20:55:29
333
原创 《代码阅读方法》---笔记(第十一章)
第十一章:一个完整的例子代码阅读和代码理解技术模仿软件的功能时,要依照相似实体的线路(类、函数、模块)。在相似的现有实体中,为简化对源代码库的文本查找,应选取罕见的名称。自动生成的文件常常会在文件的形状有一段注释,说明这种情况。如果试图精确地分析代码,一般会陷入数量众多的类、文件和模块中,这些内容会很快将我们淹没;因此,我们必须将需要理解的代码限定在绝对必需的范 围之内。采用一种广度优先查找策略,从多言攻克代码阅读中存在的问题,直到找出克服它们的方法为止。这本书到这里就是最终章啦!..
2020-05-16 19:04:49
195
原创 《代码阅读方法》---笔记(第十章)
第十章:代码阅读工具1.心态与环境可以试着向别人介绍您在阅读的代码,这样做一般会增进您对代码的理解。理解复杂的算法或巧妙的数据结构,要选择一个安静的环境,然后聚精会神地考虑,不要借助于任何算机化或自动化的帮助。2.代码阅读工具的运用使用源代码浏览器浏览大型的代码集合以及对象类型。通过分析相应目标文件中的符号,可以清晰地源文件的输入和输出。要抵制信按照您的编码规范对外部代码进行美化的诱惑;不必要的编排更改会创建不同的代码,并妨碍维护工作的组织。优美打印程序和编辑器语法着色可以使得程序的源
2020-05-15 19:02:38
231
原创 《代码阅读方法》---笔记(第九章)
第九章:系统构架1.构架总览要详细分析建立在某种框架之上的应用程序,行动的最佳路线就是从研究框架自身开始。在阅读向导生成的代码时,不要期望太高,否则您会感到失望。多数情况下,参考构架只是为应用程序域指定一种概念性的结构,具体的实现并非必须遵照这种结构。一个系统可以(在重大的系统中也确定如此)同时展示出多种不同的构架类型。以不同的方式检查同一系统、分析系统的不同部分、或使用不同级别的分解 ,都有可能发现不同的构架类型。大型的、分布式的系统经常实现为许多互相协作的进程。识别出重要的构架元素后,
2020-05-12 19:41:26
275
原创 《代码阅读方法》---笔记(第八章)
第八章:文档1.常见的开发源代码文档格式文档两种类型:二进制文件:他们的生成和阅读都要使用专利产品,如:Microsoft Word或Adobe FrameMaker;文本文件:其中包含标记语言(markup language)形式的结构和格式化命令。2.文档种类系统的规格说明文档(system specification document):详细描述系统的目标、系统的功能需求、管理和技术上的限制、以及成本和日程等要素,了解所阅读代码的运行环境.软件需求规格说明(software re
2020-05-11 16:17:06
826
原创 《代码阅读方法》---笔记(第七章)
第七章:编码规范和约定关于代码规范建议去阅读阿里出品的泰山版《Java开发手册》https://developer.aliyun.com/topic/java2020?utm_content=g_10001133211.格式规范阅读代码时,首先要确保您的编辑器或优美打印程序的tab设置,与代码遵循的风格规范一致。可以使用代码块的缩进,快速地掌握代码的总体结构。对于编排不一致的代码,应该立即给予足够的警惕。2.命名规范常量使用大写字母命名,单词用下划线分隔。在遵循Java格式的程序中,
2020-05-10 19:00:46
737
原创 《代码阅读方法》---笔记(第六章)
第6章:应对大型项目1.梳理项目结构层次我们可以通过浏览项目的源代码树--包含项目源代码的层次目录结构,来分析一个项目的组织方式。源码树常常能够反映出项目在构架和软件过程上的结构。应用程序的源代码树经常是该应用程序的部署结构的镜像。不要被庞大的源代码集合吓倒,它们一般比小型的专门项目组织得更出色。当您首次接触一个大型项目时,要花一些时间来了解项目的目录树结构。2.编译与配置项目的源代码远不只是编译后可以获得可执行程序的计算机语言指令;一个项目的源码树一般还包括规格说明、最终用户和开发人员
2020-05-10 17:40:40
869
原创 代码问题的定位与解决思路
如何有效定位问题和解决问题?0. 思考如何开展工作:抓重点,略过无关紧要的东西,不要关心具体的细节的东西,先把握全局,知道每个部分如何协同工作的。像带兵打仗一样,不需要知道每个士兵的能力,只需要知道这个营这个团的能力。追溯源头,先想要做什么,再想实现的路线,然后去实现,最后学会问问题。1. 抓重点当你去学习一个框架时要看一个框架先看整体的结构和思路,然后逐步拆解消化。当然这个拆解消化的过程是你逐步完善一个项目的过程。并不是先学会所有的,再去完善一个项目。也就是说,从实战中去学习体会这个框架的一
2020-05-09 23:58:38
1339
原创 《代码阅读方法》---笔记(第五章)
第五章:高级控制流程1.递归采用递归定义的算法和数据结构经常用递归的函数定义来实现。推理递归函数时,要从基准范例测试开始,并论证每次递归调用如何逐渐接近非递归基准范例代码推理归调用等同于一个回到函数开始处的循环。2.并行管理在多处理器计算机上运行的代码常常围绕进程或线程进行组织。工作群并行模型用于在多个处理器间分配工作,或者创建一个任务池,然后将大量需要处理的标准化的工作进行分配。基于流水线的并行处理中,每个任务都接收到一些输入,对它们进行一些处理,并将生成的输出传递给下一个任务,进行
2020-05-08 23:11:47
210
原创 《代码阅读方法》---笔记(第三、四章)
第三章第四章为C语言部分,贴出原文,不予总结。第三章:高级C数据类型1.了解特定语言构造所有服务的功能之后,应能够更好地理解使用它们的代码。2.识别并归类使用指针的理由。3.在C程序中,指针一般用来构造链式数据结构、动态分配的数据结构、实现引用调用、访问和迭代数据元素、传递数组参数、引用函数、作为其他值的别名 、代表字符串、以及直接访问系统内存。4.以引用传递的参数可以用来返回函数的结果,或者避免参数复制带来的开销。5.指向数组元素地址的指针,可以访问位于特定索引位置的元素。6.指向数组元素
2020-05-08 22:15:59
386
原创 《代码阅读方法》---笔记(第二章)
第2章:基本编程元素基于原文是分点来的,这里我尽量整理一下语言和文字方式便于大家联想记忆。1.开始概要:从main开始,运行程序理解功能,理解命名规定可以帮助猜测对应功能,一个程序从重要核心部分开始。第一次分析一个程序时,main是一个好的起始点。要想了解程序在某一方面的功能,运行它可能比阅读源代码更为恰当。在分析重要的程序时,最好首先识别出重要的组成部分。了解局部的命名约定,利用...
2020-05-07 21:25:04
205
原创 《代码阅读方法》---笔记(第零、一章)
第零章-综述每个程序员都需要提高代码阅读的技能与技巧,进而从现有的优秀代码、算法、架构、设计中汲取营养,提高自身的开发与设计能力。阅读代码相关的概念:编程构造、数据类型、数据结果、控制流程、项目组织、代码规范、文档和构架。第一章-导论1. 为什么要阅读代码?多数情况下,如果您想要了解“别人会如何完成这个功能呢?”,除了阅读代码以外,没有更好的方法。要养成一个习惯,花时间阅读别人编写的高品...
2020-05-06 23:40:50
151
原创 如何快速上手项目
概览:1.安装基本环境、跑通代码2.看配置文件,了解所用技术和框架3.根据项目文档,理解系统层次、模块划分4.弄清系统增删改查、通信、用户交互实现方式。最简单的方法是根据系统的分层,先从前端到数据库把代码疏通一下,搞不清楚的话打开debug模式一步一步走一下。一、熟悉项目1. 先搞清楚新的系统是搞什么的。谁在用这个系统?用这个系统做什么?2. 系统分层、分模块是什么样的。系统...
2020-05-04 00:03:06
743
原创 互联网高并发分布式-消息中间件
一、引出问题分布之后问题来了,以前的单一系统,所有服务都在同一个机器,在同一个内存里面,直接调用即可;但现在分布在不同的jvm中,怎么调用呢?或者说数据怎么传输? –消息中间件应运而生!二、中间件:将具体业务和底层逻辑解耦的软件,解决的就是分布式系统之间消息传递的问题。一个消息需要有一个生产者生产消息,一个消费者接收处理消息,由生产者来指定消费者,保证消息能到达消费者处。消息中间件就是处于...
2020-04-14 12:54:22
325
原创 互联网高并发-redis缓存集群
一、Redis集群(redis-cluster)概念Redis 集群一个提供在多个Redis节点之间共享数据的程序集。Redis 集群并不支持同时处理多个键的 Redis 命令,因为这需要在多个节点间移动数据,这样会降低redis集群的性能,在高负载的情况下可能会导致不可预料的错误。Redis 集群通过分区来提供一定程度的可用性,即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处...
2020-04-14 12:52:33
190
原创 互联网高并发-数据库分库分表
一、分表解决的问题分表后,单表的并发能力提高了,磁盘I/O性能也提高了,写操作效率提高了查询一次的时间短了数据分布在不同的文件,磁盘I/O性能提高读写锁影响的数据量变小插入数据库需要重新建立索引的数据减少二、常见分表、分库常用策略:1.平均进行分配hash(object)%N(适用于简单架构)。2.按照权重进行分配且均匀轮询。3.按照业务进行分配。4.按照一致性hash算法进行...
2020-04-14 12:49:51
287
原创 互联网高并发技术-消息队列
一、消息模型1.点对点消息生产者向消息队列中发送了一个消息之后,只能被一个消费者消费一次。2.发布/订阅消息生产者向频道发送一个消息之后,多个消费者可以从该频道订阅到这条消息并消费发布与订阅模式和观察者模式有以下不同:3.观察者模式观察者和主题都知道对方的存在;而在发布与订阅模式中,生产者与消费者不知道对方的存在,它们之间通过频道进行通信。观察者模式是同步的,当事件触发时,主题会调...
2020-04-14 12:45:28
202
原创 集群下的 Session 管理方式及优缺点对比
一、引出问题一个用户的 Session 信息如果存储在一个服务器上,那么当负载均衡器把用户的下一个请求转发到另一个服务器,由于服务器没有用户的 Session 信息,那么该用户就需要重新进行登录等操作。二、管理方式及优缺点1.Sticky Session需要配置负载均衡器,使得一个用户的所有请求都路由到同一个服务器,这样就可以把用户的 Session 存放在该服务器中。缺点:当服务器宕...
2020-04-14 12:41:00
517
原创 互联网高并发技术-负载均衡
一、概念集群中的应用服务器(节点)通常被设计成无状态,用户可以请求任何一个节点。负载均衡器会根据集群中每个节点的负载情况,将用户请求转发到合适的节点上。负载均衡器可以用来实现高可用以及伸缩性:高可用:当某个节点故障时,负载均衡器会将用户请求转发到另外的节点上,从而保证所有服务持续可用;伸缩性:根据系统整体负载情况,可以很容易地添加或移除节点。负载均衡器运行过程包含两个部分:根据负载均...
2020-04-14 12:37:48
243
转载 互联网高并发解决方案思考(总)
互联网高并发解决方案一、找问题源头首先要分清楚高并发影响用户的源头?是因为带宽不够还是服务内存不足?服务带宽指的是:客户端与服务器传输的宽度的速度,1m 等于 128kb。服务内存指的是:服务器端处理业务能力。那么解决高并发的入口是客户端与服务器端传输带宽速度, 如果带宽速度不足的情况,可能会导致客户端延迟等待。一个网站核心 分为静态资源(css、img、js)和动态资源(jsp、ft...
2020-04-14 12:31:24
397
转载 StringBuffer常用方法
(1)构造函数StringBuffer有四个构造函数:StringBuffer() value内容为空,并设置容量为16个字节;StringBuffer(CharSequece seq) 使用seq初始化,容量在此基础上加16;StringBuffer(int capacity) 设置特定容量;StringBuffer(String str) 使用str初始化,容量str大小的基础上...
2020-02-11 22:45:48
5411
原创 在github上精准搜索开源项目
想要进行精准搜索,增加筛选条件。in:name xxx // 按照项目名搜索in:readme xxx // 按照README搜索in:description xxx // 按照description搜索stars:>xxx // stars数大于xxxforks:>3000 // forks数大于xxxlanguage:xxx // 编程语言是xxxpushed:&g...
2020-02-08 15:09:19
198
原创 Python中 pip install 失败的解决方案
故事背景:在运行一个刚到手的项目时提示没有找到paramiko包,于是按照Pycharm默认的使用这条命令安装所需包pip install paramiko //默认快捷安装报错:无法安装,并且pip并不是最新解决方法:先升级pip到最高级之后利用豆瓣源镜像下载,pip install xxx -i http://pypi.douban.com/simple/...
2020-02-05 22:50:37
1236
原创 Vue组件使用 Component 1.0
组件是 vue 技术中非常重要的部分,组件使得与ui相关的轮子可以方便的制造和共享,进而使得vue使用者的开发效率大幅提升。就像积木一样,单块积木完善后,哪里需要哪里搬。在项目的/component目录下存放组件,在要显示组件的页面中则分为3步:导入、注册和使用。看例子,了解vue组件的使用方式。<template> <view> <...
2020-02-05 22:40:57
366
原创 初识docker-V1.0(基础知识)
一、 应用场景Web 应用的自动化打包和发布。自动化测试和持续集成、发布。在服务型环境中部署和调整数据库或其他的后台应用。从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。二、架构Docker 包括三个基本概念:镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ub...
2020-01-19 14:08:21
242
原创 Leetcode刷题基本功-Set集合
一、基本性质Set继承于Collection接口,是一个不允许出现重复元素,并且无序的集合,主要有HashSet和TreeSet两大实现类。集合注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素。在判断重复元素的时候,Set集合会调用hashCode()和equal()方法来实现。种类(1)HashSet是哈希表结构,主要利用HashMap的key来存储元...
2020-01-04 19:38:10
309
原创 Leetcode刷题基本功-数组
目录数组声明数组初始化多维数组常用属性常用方法Arrays类(自带方法)数组声明声明有两种方式:type arrayName[];type[] arrayName;例如 int[] array;数组初始化方式一://分配长度为 4 个 int 型的内存空间,并分别赋初始值1,2,3,4int[] array = new int[]{1, 2, 3, 4};方...
2019-12-21 15:56:01
243
原创 SUMO traci接口python编程学习
入门运行小例子刚开始学习在python当中引用traci接口的时候,可以先去看sumo工具中给出的例子,路径为$SUMO_HOME/docs/tutorial/。里面有几个文件夹,如下图,以traci_tls为例,是用来修改仿真中信号灯信息的python脚本。运行例子:先进入所在的路径下,之后python traci_tls运行,就完成了一个小例子啦!之前遇到运行不出来的情况,最后知道是没...
2019-12-16 11:00:55
2833
原创 SUMO中车辆需求建模方法(rou.xml)
SUMO需求建模种类生成网络后,可以使用SUMO-GUI对其进行查看 ,但不会有汽车行驶。仍然需要有关车辆的某种描述。这称为交通需求。从现在开始,我们将使用以下术语:行程是由起点(街道),目的地终点和出发时间定义的从一个地方到另一个地方的车辆运动。一个途径是扩大之旅,这意味着,该路由定义不仅包含第一个和最后边缘,但所有边缘的车辆会通过。SUMO和 SUMO-GUI需要路线作为车辆运动的输入。我...
2019-12-16 10:58:53
5323
4
原创 SUMO中仿真输出常用tools(E1,E2,E3)
工具/输出下面描述的所有工具都在tools / output目录中。generateITetrisIntersectionMetrics.py用于生成交集指标的工具,包括(但不限于):一氧化碳排放二氧化碳排放HC排放PMx排放NOx排放燃油消耗使用–help 选项执行generateITetrisIntersectionMetrics.py脚本,以获取有关用法和可用选项的详细信...
2019-12-06 11:00:57
4941
1
转载 改:如何基于开源项目做二次开发
改:如何基于开源项目做二次开发【保持纯洁,加以包装】当我们发现开源项目有的地方不满足我们的需求的时候,自然会有一种去改改的冲动,但是怎么改是个大学问。一种方式是投入几个人从内到外全部改一遍,将其改造成完全符合我们业务需求。但这样做有几个比较严重的问题:1)投入太大,一般来说,redis这种级别的开源方案,真要自己改,至少要投入2个人,搞个1个月以上2)失去了跟随原方案演进的能力:改的太多...
2019-11-05 15:41:24
2854
原创 导入本地jar包进idea项目
一、配置文件完整如果通过命令行来mvn install这个包,需要拿到包之外的版本号等。按照下面的代码执行即可mvn install:install-file -DgroupId=com.hadoop.XXXXX -DartifactId=hadoop-XXXXX -Dversion=0.4XXXXX -Dpackaging=jar -Dfil...
2019-10-29 11:04:08
726
原创 本地新项目首次上传git库中-各种踩坑后得到的经验
1.在项目路径下初始话git仓库git init2.与git远端的repository相关联先在官网上create一个新repository,此时可以设置是否要公开或者私有,之后好像改不了了(反正挺难的),最好不要初始化一个readme!!!(我的项目带有readme文件,一上传就冲突,后来把新建的readme给删掉了才好)git remote add origin git@github...
2019-10-23 17:24:11
129
原创 git开源项目基础上二次开发
fork开源项目到自己的githubclone fork以后的项目到本地用git remote add命令将开源项目添加为远程仓库,例如命名为fork这样就有了两个remote,一个origin(自己fork的)、一个fork(开源项目的)自己的改动直接push到master,要合并开源项目的更新使用 git pull fork master,合并完代码再push到自己的master...
2019-10-22 16:06:20
2247
原创 sumo-制作自己的路网与车流文件!
一、路网文件只需要打开ubuntu终端输入如下代码即可,grid.number代表路口数量,grid.length代表路段长度,default.speed代表路段允许车速,最后便可在当前文件夹输出为一个名为MySUMOFile(名字自己定)的路网文件。一般地图为n*n的四四方方理想地图。代码如下:netgenerate --grid --grid.number=10 --grid.lengt...
2019-10-18 15:52:54
2877
1
原创 sumo通过设置线圈检测器来收集自定义的道路车辆信息
总需求:需要获得特定地点,某一时段的车流量等信息输出是sumo官方traci文档翻译而来,图片不全,建议看官网链接https://sumo.dlr.de/docs/Simulation/Output/Induction_Loops_Detectors_(E1).html模拟/输出/感应回路检测器(E1)在附加文件中以这种方式定义,如下所示:<additional> <...
2019-10-11 20:08:08
4033
1
转载 理解 IntelliJ IDEA 的Web部署
(Web部署-2) Artifacts项目的打包部署设置,这个是项目配置里面比较关键的地方,重点说一下。先理解下它的含义,来看看官方定义的artifacts:An artifact is an assembly of your project assets that you put together to test, deploy or distribute your software so...
2019-09-26 11:36:30
314
原创 anaconda环境中安装orange工具包
简单三步走(安装在anaconda的phm环境中)1.activate phmconda config --add channels conda-forgeconda install orange3OK啦,中间会有y/n的询问,输入y即可
2019-09-25 17:11:38
1763
1
转载 Orange的数据挖掘聚类简单小实验(K-means)
Orange不可能全部介绍,只能去阅读官方资料。这里就做一个聚类的小实验,把实验过程中的问题总结起来,避免后面的人走弯路。记录实验的目的,绝对不仅仅是证明成功,更是提醒后来者实验的问题,去解决重现实验的问题,这才是正确的态度。我选取的小实验主题为聚类分析,专门是层次聚类。3.1 在小实验之前的内容在说到聚小实验类之前,不得不提到Orange可以作为模块导入python,因此不仅可以使用可视化操...
2019-09-25 17:07:23
1887
原创 git使用基本操作---小白版
1、把git上的代码clone到本地$ git clone http:xxxx(地址,可以http也可以ssh)2、clone到本地以后、使用branch -a 查看远程所有分支$ git branch -a3、如若你有分支:master branch1 branch2 ,使用checkout用来切换分支。还可以用第2条指令去创建本地分支目录和远程的保持一致,并且切换远程分支到本地分...
2019-06-30 20:34:36
80
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人