自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

东晨雨的博客

码农是一种状态,工匠是一种信仰

  • 博客(60)
  • 资源 (7)
  • 收藏
  • 关注

原创 iTerm2结合expect实现一键登录ssh服务器

作为一名程序员,每天免不了要远程链接服务器,一般情况下公司的服务器都在内网,访问一般先登陆跳板机,然后再通过跳板机登陆到相应的服务器进行操作。这样的话,我们在登陆过程中输入密码较为麻烦,如果有一个自动化工具,那么每次操作就方便多了,接下来介绍具体的操作方法:01自动登陆的实现原理 由于跳板机上无法保存文件,因此无法通过配置秘钥来实现免密登陆的功能。但是我...

2020-03-22 20:15:14 1188

原创 MySQL优化 之 慢查询案例分析与优化

1 慢查询优化基本步骤(1)判断运行时是否真的很慢;(2)定位性能瓶颈(是因为在数据访问消耗了太多的时间,还是在数据的运算(如分组排序等)方面花费了太多资源);(3)采用where条件进行查询,对每个字段分别查询,看哪个字段的区分度最高;(4)explain查看执行计划;(5)了解业务方使用场景;(6)根据需求对索引进行新增或修改,参照建索引规约和索引优化的原则;(7)观察结果,不符...

2020-01-05 14:51:46 221

原创 MySQL优化 之 常见规则小结

数据库在业务开发过程中是一个必不可少的环节,业务场景常常包括数据库变更、数据库表设计、SQL编写等需求。这篇文章对MySQL数据库常见优化规则进行小结。

2020-01-05 14:23:06 217

原创 重构-改善既有代码的设计(十三):重构、复用与现实

1、现实的检验(1)重构的潜在因素:在编写代码时对自己所做的事情没有完整的了解,并且受到生产进度的压力(2)重构被用于开发框架、抽取可复用组件、使软件架构更清晰、使新功能的增加更容易(3)重构可以帮助你充分利用以前的投资,减少重复劳动,使程序更简洁有力(4)重构时,你必须找出待重构的这一部分程序被什么地方引用2、为什么开发者不愿意重构它们的程序(1)不知道如何重构(2)...

2019-05-27 20:43:21 261

原创 重构-改善既有代码的设计(十二):大型重构

1、梳理并分解继承体系(Tease Apart Inheritance)(1)症状:某个继承体系同时承担两项责任(2)解决:建立两个继承体系,并通过委托关系让其中一个可以调用另一个(3)混乱的继承体系是一个严重的问题,会导致重复代码(4)将代码较多的职责留在原地,这样一来需要搬移的代码数量就会比较少(5)如果继承体系中的某一特定层级上的所有类,其子类名称都以相同的形容词开始,那...

2019-05-27 20:42:23 272

原创 重构-改善既有代码的设计(十一):处理概括关系

1、字段上移(Pull Up Field)(1)症状:两个子类拥有相同的字段(2)解决:将该字段移至超类(3)如果各个子类是分别开发的,或是在重构过程中组合起来的,你会发现它们拥有重复特性(4)判断若干字段是否重复的唯一办法就是观察函数如何使用它们(5)优点:去除重复的数据声明,通过将该字段的行为从子类移至超类,从而去除重复的行为2、函数上移(Pull Up Met...

2019-05-27 20:29:39 317

原创 重构-改善既有代码的设计(十):简化函数调用

1、函数改名(Rename Method)(1)症状:函数胡名称未能揭示函数的用途(2)解决:修改函数的名称(3)函数的名称应该准确表达它的用途,可以先考虑给这个函数写上一句注释,然后想办法把注释变成函数名称public String getTelephoneNumber() { return ("(" + _officeAreaCode + ") " + _of...

2019-05-27 20:20:56 365

原创 重构-改善既有代码的设计(九):简化条件表达式

1、分解条件表达式(Decompose Condition)(1)症状:你有一个复杂的条件(if - then - else )语句(2)解决:从if、then、else三个段落中分别提炼出独立函数(3)将任何大块头代码分解成多个独立函数,根据每个小块代码的用途为分解而得的新函数命名(4)将每个分支条件分解成新函数可以突出条件逻辑,更清楚地表明每个分支的作用,突出每个分支的原因...

2019-05-26 17:17:06 469

原创 重构-改善既有代码的设计(八):重新组织数据

1、自封装字段(Self En capsulate Field)(1)症状:直接访问一个字段,但与字段之间耦合关系逐渐变得笨拙(2)解决:为这个字段建立取值/设值函数,并且只以这些函数来访问字段(3)间接访问变量的好处:子类可以通过覆写一个函数而改变取数据的途径(4)直接访问变量的好处:代码比较容易阅读为待封装字段建立取值/设值函数 找出该字段的所有引用点,将它们全部改为调用...

2019-05-26 17:11:39 373

原创 重构-改善既有代码的设计(七):在对象之间搬移特性

1、搬移函数(Move Method)(1)症状:如果一个类有太多行为,或一个类与另一个类有太多合作而形成高度耦和(2)解决:在该函数最常引用的类中建立一个有着类似行为的新函数,将旧函数变成一个单纯的委托函数,或者是将旧函数完全移除(3)检查:调用端、被调用端、继承体系中任何一个重定义函数(4)如果源函数包含异常,需要判断逻辑上应该由哪个类来处理这一异常,如果应该由源类来负责,就把...

2019-05-25 15:32:17 248

原创 重构-改善既有代码的设计(六):重新组织函数

1、提炼函数(Extract Method)(1)若有一段代码可以被组织在一起并独立出来,就把这段代码放进一个独立的函数,并让函数名称解释该函数的用途(2)提炼函数的契机:过长函数、需要注释才能让人理解(3)注意函数名称和函数本体之间的语义距离(4)创造一个新函数,要根据它“做什么”来命名,而不是以它“怎么做”命名(5)仔细检查提炼出来的代码,看看其中是否引用了“作用域局限于原...

2019-05-25 15:20:59 355

原创 重构-改善既有代码的设计(五):重构列表

1、重构的记录格式名称 ----> 简短概要 ----> 动机 -----> 做法 ----> 范例2、寻找引用点(1)查找替换时需要仔细检查每个引用点,以确保替换时不出错,因为在不同类中可能会有相同的函数名称,在同一个类中也可能存在名称相同签名不同的函数(2)编译器无法找到通过反射机制而得到的引用点3、重构手法(1)重构的基本技巧:小步前进、频繁测...

2019-05-25 15:00:05 226

原创 重构-改善既有代码的设计(四):构筑测试体系

1、自测试代码的价值(1)确保所有测试都完全自动化,让它们检查自己的测试结果(2)想要进行重构,首先前提就是拥有一个可靠的测试环境(3)开始编程前编写测试代码有利于先弄清楚添加这个功能需要做些什么(4)改造无法测试的代码,每个类都应该有一个用于测试的main函数(5)编写测试代码,往往一开始先让它们失败,证明测试机制是正常运行的(6)JUnit框架设计用来编写单元测试,功能...

2019-05-23 11:19:50 324

原创 重构-改善既有代码的设计(三):代码的坏味道

1、重复代码(1)设法将相同的程序结构合二为一,程序变得更好(2)对于两个互为兄弟的子类内含有相同表达式,先提取共同的代码组成一个方法,然后放到超类中,使用模版设计模式(3)两个毫不相关的类出现重复代码,考虑将重复代码提炼到一个独立类中,然后在类内使用这个新类2、过长函数(1)让小函数容易理解的关键在于一个容易理解的好名字(2)每当感觉需要以注释说明的时候,就需要把要说明的...

2019-05-23 11:16:52 228

原创 重构-改善既有代码的设计(二):重构原则

1、何为重构(1)对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。(2)添加新功能时不应该修改既有代码,通过测试并正常运行,可以衡量自己的工作进度(3)重构时不能再添加功能,只管改进程序结构2、为何重构(1)代码量的减少并不会使系统运行的更快,但代码量的减少将使未来可能的程序修改更容易(2)重构帮助找到bug(3)良好的设...

2019-05-23 11:14:30 183

原创 重构-改善既有代码的设计(一):第一个案例

1、分解并重组长函数(1)代码块越小,代码功能就越容易管理(2)重构之前先检查是否有一套可靠的测试机制(3)做了修改就要编译并测试,保证自己没有破坏任何东西2、更改变量名称(1)代码应该表现自己的目的3、移动函数(1)一般函数应该放在它所用的数据的所属对象内(2)有时保留旧函数,调用新函数,如果旧函数是public,不必修改其他接口4、尽量去除临时变量(1)...

2019-05-23 11:13:21 253

转载 主流NoSQL数据库系统的对比

预计阅读时间:8分钟SQL数据库是一种非常有用的数据库,但随着数据规模的不断增长以及数据模型的日益复杂,关系型数据库已经出现很多不适应的场景,NoSQL凭借易扩展、大数据量和高性能以及灵活的数据模型成功的在数据库领域站稳了脚跟,对于NoSQL的拥护者,更提倡运用非关系型的数据存储。下面一起来看看主流NoSQL数据库系统的对比:1、NoSQL数据库的种类(1)临时性键值存储数据库:...

2019-05-22 20:33:41 541

原创 设计模式 之 桥接模式解析

预计阅读时间:10分钟1、桥接模式的定义将抽象部分与它的实现部分分离,使它们都可以独立地变化。在桥接模式中的桥接是单向的,也就是只能是抽象部分的对象去使用具体实现部分的对象,而不能反过来,也就是个单向桥。2、案例分析(1)需求:发送提示消息,从业务上看,消息又分成普通消息、加急消息和特急消息多种,不同的消息类型,业务功能处理是不一样的,比如加急消息是在消息上添加加急,而特急消...

2019-05-22 20:30:24 248

原创 MySQL索引失效情况分析

索引常常用于快速找出在某个列中有一特定值的行,可以根据索引指向的页以及记录在页中的位置,获取目标记录。索引是在存储引擎中实现的,每种存储引擎的索引都不一定完全相同,并且每一种存储引擎也不一定支持所有索引类型。下面以MySQL数据库为例,一起看看索引以及失效的场景:预计阅读时间:5分钟1、索引的特点MySQL中索引的存储类型有两种:Btree和Hash,具体和表的存储引擎有关;My...

2019-05-21 23:47:03 204

原创 设计模式 之 单例模式解析

预计阅读时间:8分钟1、单例模式的定义保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式结构图如下所示:Singleton:负责创建Singleton类自己的唯一实例,并提供一个getInstance的方法,让外部来访问这个类的唯一实例在Java中,单例模式的实现又分为两种,一种称为懒汉式,一种称为饿汉式,其实就是在具体创建对象实例的处理上,有不同的实现方式。...

2019-05-21 23:44:11 127

原创 MySQL性能分析方法小结

MySQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,利用一些Linux常用的命令来查看Mysql对服务器的CUP和I/O使用情况,通过慢查询日志找出有待优化的sql,通过show processlist查看正在执行的sql的情况以及及时kill死锁的sql,通过EXPLAIN分析需要优化的sql语句,除此之外,MySQL内部配置参数也做相应的调整和优化。下面具体来看看:预计阅读时间:8 分...

2019-05-20 22:57:14 1574

原创 设计模式 之 工厂方法模式解析

1、工厂方法模式的定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到其子类。2、案例分析Product: 定义工厂方法所创建的对象的接口,也就是实际需要使用的对象的接口。ConcreteProduct:具体的Product接口的实现对象。Creator:创建器,声明工厂方法,工厂方法通常会返回一个Product类型的实例对象,且...

2019-05-20 22:51:39 180

原创 MYSQL中存储引擎

数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,现在许多不同的数据库管理系统都支持多种不同的数据引擎。以MySQL为例,不需要在整个服务器中使用同一种存储引擎,可以针对具体的要求,对每一个表使用不同的存储引擎。预计阅读时间:8 分钟1、查看MySQL存储引擎可以使用命令行...

2019-05-19 23:44:53 226

原创 设计模式 之 简单工厂模式解析

预计阅读时间:10 分钟1、Java中的接口接口里面的所有方法都是抽象方法,只有方法定义而不会有任何方法实现,所有属性都是常量接口通常用来定义实现类的外观,可实现不相关类的相同行为,而不需考虑这些类之间的层次关系接口的好处是将外部调用和内部实现隔离开,客户端不用关心具体实现在开发中,优先选择接口而不是抽象类接口把具体的实现和使用接口的客户程序分离开来,从而使得具体的实现和使用接口...

2019-05-19 23:38:19 101

原创 设计模式简析与汇总

预计阅读时间:10 分钟1、设计模式的种类设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式...

2019-05-16 16:43:55 142

原创 MySQL数据库事务及并发问题的解决

常见的关系型数据库有MySQL、Oracle、SQLServer等,其中MySQL成为目前互联网企业应用的主流数据库,其自身具有性能出色、适应所有平台、价格便宜、开源等优点,当前互联网技术发展有个整体的趋势,就是开源产品成为主流,很多互联网公司逐步实施去O(Oracle)化。接下来小编对数据库事务以及并发问题的解决进行分析和总结:预计阅读时间:5分钟什么是事务事务是一条或多条数据库操作语...

2019-05-16 16:29:35 1601

原创 UML 完全解析和总结

预计阅读时间:8 分钟1、UML的定义(1)UML(Unified Modeling Language),统一建模语言,以可视化的观点来看程序系统,将规格和设计重点直接写下来(2)UML的 “attribute(属性)” 代表Java的 “field(字段)” ,UML的 “operation(操作)” 代表Java的 “method(方法)”2、类图(class Diagram)(...

2019-05-14 16:09:15 679 1

原创 程序员开发常用英语词汇合集

A英语词汇(A)B英语词汇(B)C英语词汇(C)D英语词汇(D)E英语词汇(E)F英语词汇(F)G英语词汇(G)H英语词汇(H)I英语词汇(I)J & K英语词汇(J & K)L英语词汇(L)M英语词汇(M)N英语词汇(N)O英语词汇(O)P英语词汇(P)Q & R英语词汇(Q & R)S英语词汇(S...

2019-05-14 15:33:04 674

原创 Java异常体系(Exception和Error)

事物在发展或者变化过程中常常会出现各种各样的不正常现象,程序的世界中,也不存在永远不会出错的程序,只有正确处理好异常情况,才能保证程序的可靠性,Java语言在设计之初,就提供了相对完善的处理机制,下面一起来看看把:Java异常体系(Exception和Error)https://mp.weixin.qq.com/s/JmoLpYLOUQPq5xDtc51mQA...

2019-05-12 10:16:25 520

原创 算法专题 之 图

图是一种重要的数据结构,属于一种复杂的非线性结构,由顶点的有穷非空集合和顶点之间边的集合组成,前述专题的数据结构大多为线性表和树两类结构,其中线性表中的元素是“一对一”的关系,树中的元素是“一对多”的关系,而图结构中的元素则是“多对多”的关系。下面一起来看看:算法专题 之 图https://mp.weixin.qq.com/s/A4ogzRG5AFMLer5HyNFMFg...

2019-05-12 10:15:34 262

原创 BIO、NIO及AIO的解析与比较

IO一直是软件开发中的核心内容之一,随着海量数据的增长以及分布式系统的发展,IO扩展能力越发重要,现有的IO机制经过不断完善,已经逐步证明了其高扩展性应用的能力,今天将逐步讲解Java提供了哪些IO方式,以及各IO方式之间的比较,下面一起看看吧:BIO、NIO及AIO的解析与比较https://mp.weixin.qq.com/s/ZOTnIh4QfqT8_aFqC3UZNg...

2019-05-10 09:40:00 183

原创 《代码整洁之道》总结与演绎(下)

程序员可以分为三个层次:普通程序员、工程师 、架构师单元测试1、TDD三定律定律一、在编写不能通过的单元测试前,不可编写生产代码。定律二、只可编写刚好无法通过的单元测试,不能编译也算不过。定律三、只可编写刚好足以通过当前失败测试的生产代码。(1)测试与生产代码一起编写2、保持测试整洁(1)测试必须随生产代码的演进而修改,测试越脏就越难修改(2)失去了测试,每...

2019-05-09 15:05:51 533

原创 算法专题 之 树

树是一种抽象数据类型,用来模拟具有树状结构性质的数据集合。树与线性表、栈、队列等线性结构不同,树是一种非线性结构。一棵树只有一个根结点,树(tree)是被称为结点(node)的实体的集合,是由n(n>=1)个有限节点组成的一种具有层次关系的集合。下面一起来看看吧:算法专题 之 树https://mp.weixin.qq.com/s/5HNohRY3sO5Yzr3JJvNnlA...

2019-05-08 10:01:07 257

原创 Java对象的序列化和反序列化

Java是面向对象的语言,常需要保存对象,并且下次使用的时候可以恢复还原该对象,Java 对象序列化是 JDK 1.1 中引入的一组开创性特性之一,序列化机制在Java中有着广泛的应用,EJB、RMI、Hessian等技术都以此为基础,Java也为对象序列化及反序列化提供了一套方便的API来支持,下面一起来看看:Java对象的序列化和反序列化https://mp.weixin.qq.com/s/...

2019-05-07 13:36:33 244

原创 《代码整洁之道》总结与演绎(中)

程序员可以分为三个层次:普通程序员、工程师 、架构师格式1、格式的目的(1)代码格式关乎沟通,而沟通是专业开发者的头等大事;(2)选用一套管理代码格式的简单规则,然后坚持贯彻执行(3)团队应该采用一致的格式规则2、垂直格式(1)名称应该简单且一目了然,最顶部应该给出高层次概念和算法,细节应该往下渐次展开(2)在封包声明、导入声明和每个函数之间,都要有空白行隔开...

2019-05-06 11:07:33 130

原创 算法专题 之 正则表达式

正则表达式定义了字符串的模式,可以用来搜索、编辑或处理文本,正则表达式并不仅限于Java语言,其他语言中也存在,不过存在细微差别,Java正则表达式和Perl的最为相似,下面一起来看看吧:算法专题 之 正则表达式https://mp.weixin.qq.com/s/p14iXJ77mLG2BYe8gcqhfA...

2019-05-05 14:43:51 620 1

原创 《代码整洁之道》总结与演绎(上)

程序员可以分为三个层次:普通程序员、工程师 、架构师有意义的命名1、名副其实(1)变量、函数或者类的名称应该已经答复了所有问题,应当说明了做什么事,应该怎么用(2)如果名称需要注释来补充,就不算名副其实。(3)以日期为例:应当指明计量对象和计量单位int d ------> int daysSinceCreation / int daysSinceModifica...

2019-05-04 22:56:15 219

原创 AtomicInteger底层实现原理及应用

多线程不可避免带来了更多的元素同步处理,要在多线程中实现同步,经常使用到java.util.concurrent.atomic(JUC)包下的同步组件,AtomicInteger是JUC包下的重要组件,是对int基本类型的封装,其提供了原子性的访问和更新操作,其底层原理的理解程度对程序员也比较重要,下面一起来看看吧:AtomicInteger底层实现原理及应用https://mp.weixin.q...

2019-04-30 11:06:41 1229

原创 算法专题 之 堆

堆(Heap)是一种重要的数据结构,是实现优先队列(Priority Queues)首选的数据结构,作为一种常见的抽象数据类型,在工作、面试、以及算法中常常使用,下面一起来看看吧:算法专题 之 堆https://mp.weixin.qq.com/s/IjY6BZvcElt7shSv_PjOMQ...

2019-04-30 09:51:50 277

原创 String,StringBuffer和StringBuilder的区别与使用

字符串几乎在所有的编程语言里都是一个特殊的存在,在Java编程过程中,对字符串的使用场景也非常多,具体使用时,常常有String,StringBuffer和StringBuilder三种可选,今天具体来分析三者间的区别和使用。深度解析请点击:String,StringBuffer和StringBuilder的区别与使用https://mp.weixin.qq.com/s/tOh3Lb0jMNhs...

2019-04-29 14:38:16 134

23种设计模式详解.ppt

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。这个PPT详细解说了设计模式

2019-05-14

JAVA编程思想第4版完整中文版

从Java的基本语法到它最高级的特性(网络编程、高级面向对象能力、多线程),JAVA编程思想都详细介绍

2019-04-23

最新中文版 《JAVA解惑》

这本书全面的解答了JAVA开发中的常见问题,对每个问题进行了详细分析,适合仔细阅读学习

2019-04-22

Java基础教程(强烈推荐)

是一本全面详细的JAVA教程,全面覆盖了JAVA语言特性、JAVA常用库、JAVA软件开发技术以及常见的应用,欢迎下载学习

2019-04-22

高斯过程回归GPR MATLAB

很好用的高斯过程回归Matlab代码,可直接使用,欢迎大家下载

2018-11-27

TC++PL忠告

这里是一组学习C++过程中应该考虑的“规则”,有利于编程能力的提升

2017-12-15

数据挖掘_R语言实战

本书侧重使用R进行数据挖掘,重点讲述了R 的数据挖掘流程、算法包的使用及相关工具的应用,同时结合大量精选的数据挖掘实例对R软件进行深入浅出和全面的介绍,有利于读者快速高效的掌握i数据挖掘的技巧

2017-11-18

空空如也

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

TA关注的人

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