重构

剑指offer(牛客网)-第四题-重构二叉树

穿精又带淫゛_ 提交于 2019-12-24 08:32:09
剑指offer(牛客网)-第四题-重构二叉树 题目 输入某二叉树的前序遍历和中序遍历的结果,请重构出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如: 输入前序遍历序列 [ 1 , 2 , 4 , 7 , 2 , 5 , 6 , 8 ] 输入中序遍历序列 [ 4 , 7 , 2 , 1 , 5 , 3 , 8 , 6 ] 解析 前序遍历的顺序是,根左右,所以第一个数字总是树的根节点 中序遍历的顺序是,左根右,所以根节点在序列的中间,根节点左边为左子树,右边为右子树 综上所述,我们可以使用递归去完成左右子树的构造。 代码 public class solution { public TreeNode reConstructBinaryTree ( int [ ] pre , int [ ] in ) { TreeNode root = reConstructBinaryTree ( pre , 0 , pre . length - 1 , in , 0 , in . length - 1 ) ; return root ; } private TreeNode reConstructBinaryTree ( int [ ] pre , int startPre , int endPre , int [ ] in , int startIn , int endIn

框架重构:记录创建人、最后修改人、创建时间、最后修改时间

怎甘沉沦 提交于 2019-12-23 03:04:09
Entity(框架代码) public interface IEntity { Guid DBID { get; } DateTime CreateTime { get; set; } DateTime UpdateTime { get; set; } string CreateUser { get; set; } string UpdateUser { get; set; } string Remark { get; set; } } [Serializable] public class Entity<TEntity> : IEntity where TEntity : IEntity { public virtual Guid DBID { get; protected set; } public virtual DateTime CreateTime { get; set; } public virtual DateTime UpdateTime { get; set; } public virtual string CreateUser { get; set; } public virtual string UpdateUser { get; set; } public virtual string Remark { get; set; } } Command(框架代码)

对Java泛型的简单理解,并对Hibernate Dao重构

一个人想着一个人 提交于 2019-12-22 22:13:32
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 引用维基百科的定义: 泛型的定义主要有以下两种: 在程序编码中一些包含 类型参数 的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。(这是当今较常见的定义) 在程序编码中一些包含参数的 类 。其参数可以代表类或对象等等。(现在人们大多把这称作模板) 泛型的好处是在编译的时候检查 类型安全 ,并且所有的 强制转换 都是自动和隐式的,提高代码的重用率。 泛型只不过是java中的类型而已,继承自Type接口。 泛型的意义在于: 在抽象的时候泛化, 在具体的时候细化, 在编译的时候就可以决定泛化的值。通俗得讲,可以将泛型 看做是类或者接口带了一个参数,这个 参数可以在属性、方法的参数、方法的 返回值中使用使用。 ParameterizedType有如下几个方法: Type [] getActualTypeArguments () 返回表示此类型实际类型参数的 Type 对象的数组。 Type getOwnerType () 返回 Type 对象,表示此类型是其成员之一的类型。 Type getRawType () 返回 Type 对象,表示声明此类型的类或接口。 actualTypeArguments指类的参数 rawType指带了参数的类或者接口 了解这些之后

浅谈重构

吃可爱长大的小学妹 提交于 2019-12-21 07:05:11
1.重构概念 在不改变软件的外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更。——《重构 改善既有代码的设计》 说白了重构就是一系列的“等量变换”! 2.重构的风险 当我们遇到公司前人留下的烂代码时(很多时候我们也是留下“烂代码”的人),一般都是先开骂,其次就捉摸着干脆重做算了,一般都不愿意修改和重构,我们通常给出的理由是“代码太烂了,还不如重做”,这也就骗骗产品狗和老大罢了,真实的原因只有一个:里边埋坑太多,业务复杂,文档缺失,改坏了要承担后果。 所以重构有风险,重构需谨慎! 原则上如果你的老大不支持重构的话,你最好不要私自去做这件事,因为弄不好你改坏了就麻烦了,现在国内的互联网公司整天把事故什么的计入KPI,直接关系你的职业前程。 3.如何确保重构的成功 重构风险那么大,是不是说我们就不能做这件事了?如果我只是改了一个变量名,那应该不会有太大问题,还是有点不放心,那就干脆测试一下,事实证明本次重构百分百不会出什么幺蛾子。这就给了我们启示: “小步快跑” + “及时测试” ,因为这样修改的代码量少,所用时间也少,每次只关注一个方面,从而极大地降低了重构的风险。如果你能遵从这个原则,重构就是So Easy的事情! 4.重构方法 初步重构,我们可以:添加注释、调整顺序、重命名变量、进行分段,再进一步我们可以:抽取方法、抽取类、抽取接口等等

[Android Pro] AndroidX重构和映射

徘徊边缘 提交于 2019-12-20 03:52:49
原文地址: https://developer.android.com/topic/libraries/support-library/refactor https://blog.csdn.net/chen_xi_hao/article/details/81741486 AndroidX重构 未与Android操作系统捆绑在一起的API包将被重构到新的 androidx 命名空间中。只有包名和Maven工件名受到影响; 原来的类名,方法名和字段名不会更改。有关AndroidX重构的更多信息, 请参阅博客文章 。 注意: 如果您使用的是Android KTX模块,请务必更新您的依赖项以避免迁移问题。有关每个模块的最新版本,请参阅 Android KTX 。 此页面提供旧类和新类之间的映射,以及旧构建工件和新构建工件之间的映射。您也可以下载CSV格式的这些映射: androidx-artifact-mapping.csv androidx-class-mapping.csv 注意: 映射在alpha期间可能会发生变化。 工件映射 下表列出了从旧工件到新工件的当前映射。 旧构造工件 AndroidX构建工件 android.arch.core:common androidx.arch.core:core-common:2.0.0-alpha1 android.arch.core:core

如何使用AIPump对泵进行逆向工程

倖福魔咒の 提交于 2019-12-18 17:34:29
阅读本文,您将了解如下信息: ● 工业领域中逆向工程的概念 ● 逆向工程在泵行业中的应用场景 ● AIPump的逆向工程模块介绍及操作演示 在文末,还有关于泵逆向工程的一个小调查,您的看法对我们非常重要,感谢您帮助我们做的更好! 1、逆向工程简介 现代制造业的全球化与市场化[1]使得工业产品的竞争愈加激烈,采用CAE相关技术来提高产品的设计、制造效率,缩短研发周期,已经广泛地被各类企业采用,以保持和增加竞争力,逆向工程也因此而生。 逆向工程是指用一定的工具和方法,对模型进行测量[2],根据测量数据重构被测对象,从而为产品的设计、改进提供帮助。逆向工程包括几何反求、工艺反求和材料反求等几个方面,其中几何反求也就是被测对象的三维模型重构是最基础、最重要、应用最广泛的逆向工程。 2、逆向工程在泵行业有哪些作用? (1)改型设计 当设计需求与现有的产品序列相比差异较大,可以通过对参数相近的叶轮进行逆向工程,以进行改型或仿形设计。 (2)产品复制 通过对现有产品的测量和重构,以再现原产品的设计意图。 (3)质量控制 通过对产品建立数字化模型,可以进行各类力学分析,以检测产品设计和制造的合理性、正确性、可靠性[3]。 (4)故障诊断 对于运行出现故障的产品,尤其是新研发产品,通过逆向工程得到实际成品的三维模型,从而进一步分析故障产生的原因和环节,为质量控制提供反馈。 (5)建立产品数据库

系统重构的道与术

北战南征 提交于 2019-12-17 14:52:31
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 最近参与了很多重构项目,有以提高服务器资源利用率为目标的Gateway网关、AMAPS等服务的重构,也有以提升架构合理性和研发效率为目标的共享业务服务化拆分,借此机会把相关内容梳理一下,是分享更是自我总结和学习。准备以重构工作中容易产生误区的地方或容易被忽视的重点来聊聊,既不重复网上千篇一律的各种方案资料,也对重构工作有参考价值。 什么是“道和术”?个人简单的理解,道就是思想,术是方法。可谓有道无术,术尚可求也;有术无道,止于术。分别从重构的基本思路和原则,以及常见重构方案的应用来分别讲讲系统重构的“道与术”。 一、系统重构之道 现在是进行重构的恰当时机吗?重构前需要做什么准备?如何保障重构工作顺利完成并达成预期目标?从这几个大家都关心的问题,来谈谈重构工作遵循的基本思路和原则。 从实际问题出发 “不能解决实际问题的重构就是耍流氓 ”,从实际问题出发,切勿为了重构而重构,看似简单的道理,但现实中确实存在为了重构而发起的重构,或许是想应用诱人的新技术,或许是为了跟上流行趋势,甚至有自己主动YY需求而发起的重构。作为工程师我们需要谨记系统稳定高于一切,任何重构都存在风险,没有业务收益的重构相当于平白让业务承担非必要的风险,这是一种极不负责的表现。 所以,发起重构项目时,先想明白要解决什么实际问题,是为了提升性能

【前端模板之路】一、重构的兄弟说:我才不想看你的代码!把HTML给我交出来!

*爱你&永不变心* 提交于 2019-12-17 02:52:24
写在前面 随着前端领域的发展和社会化分工的需要,继前端攻城湿之后,又一重要岗位横空出世——重构攻城湿!所谓的重构攻城湿,他们的一大特点之一,就是精通CSS配置文件的编写。。。前端攻城湿跟重构攻城湿是一对好基友,你写逻辑来,我写样式。 好吧,本文并不是介绍重构攻城湿这个职业的,而是通过一个简单的场景来说说: 1. 在用前端模板之前,我们是肿么动态创建节点的 2. 为什么要使用前端模板 一个简单的场景 下面这张图片看着应该很眼熟吧?没错,是从mac QQ的好友列表里面截出来的。作为一名前端攻城湿,相信不少童鞋的第一反应是:需要用什么样的html结构来标识它?样式要怎么写? 好吧,就假设我们可以用下面的dom结构来标识这个“好友”,不考虑其合理性,同时,样式部分我们华丽丽地直接忽略 <div> <img src="http://www.example.com/img/bg.png" /> <h3>小卡的测试号</h3> <div>大家好,我是个性签名</div> </div> 大家知道,我们的QQ好友列表是不固定的,于是必须得进行“ 动态创建 ”。我们通常会肿么做呢? 老湿说:createElement神马的是王道 老湿曾经谆谆教诲我们说,不要通过innerHTML来创建节点,因为那会让代码变得混乱不堪。好歹也拿过优秀少先队员的称号,当然得听老湿话了,于是我乖乖地写下如下代码: var

web架构师经验之谈

别说谁变了你拦得住时间么 提交于 2019-12-16 19:53:17
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本人也是coding很多年,虽然很失败,但也总算有点失败的心得,不过我在中国,大多数程序员都是像我一样,在一直走着弯路,如果想成为一个架构师,就必须走正确的路,否则离目标越来越远,正在辛苦工作的程序员们,你们有没有下面几种感觉? 一、我的工作就是按时完成领导交给我的任务,至于代码写的怎样,知道有改进空间,但没时间去改进,关键是领导也不给时间啊。 二、我发现我的水平总是跟不上技术的进步,有太多想学的东西要学,Jquery用的人最近比较多啊,听说最近MVC比较火,还有LINQ,听说微软又有Silverlight了…… 三、我发现虽然我工作几年了,除了不停的coding,Ctrl+c和Ctrl+V更熟练了,但编码水平并没有提高,还是一个普通程序员,但有人已经做到架构师了。 四、工作好几年了,想跳槽换个工作,结果面试的考官都问了一些什么数据结构,什么垃圾回收,什么设计模式之类的东西,虽然看过,但是平时用不着,看了也忘记了,回答不上来,结果考官说我基础太差。。。 有没有,如果没有,接下来就不用看了,你一定是大拿了,或者已经明白其中之道了,呵呵。 如果有,恭喜你,你进入学习误区了,如果想在技术上前进的话,就不能一直的coding,为了完成需求而工作,必须在coding的同时,让我们的思维,水平也在不停的提高。

IDEA快捷键大全

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-16 13:06:35
常用快捷键 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码(如get,set方法,构造函数等) 或者右键(Generate) fori/sout/psvm + Tab Ctrl+Alt+T 生成try catch 或者 Alt+enter CTRL+ALT+T 把选中的代码放在 TRY{} IF{} ELSE{} 里 Ctrl + O 重写方法 Ctrl + I 实现方法 Ctr+shift+U 大小写转化 ALT+回车 导入包,自动修正 ALT+/ 代码提示 CTRL+J 自动代码 Ctrl+Shift+J,整合两行为一行 CTRL+空格 代码提示 CTRL+SHIFT+SPACE 自动补全代码 CTRL+ALT+L 格式化代码 CTRL+ALT+I 自动缩进 CTRL+ALT+O 优化导入的类和包 ALT+INSERT 生成代码(如GET,SET方法,构造函数等) CTRL+E 最近更改的代码 CTRL+ALT+SPACE 类名或接口名提示 CTRL+P 方法参数提示 CTRL+Q,可以看到当前方法的声明 Shift+F6 重构-重命名 (包、类、方法、变量、甚至注释等) Ctrl+Alt+V 提取变量 查询快捷键 Ctrl+Shift+Backspace可以跳转到上次编辑的地 CTRL+ALT+ left/right 前后导航编辑过的地方 ALT+7