首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

架构师技能3:code review-高效代码50例

虽然包装类型基本类型在使用过程中是可以相互转换,但它们两者所产生的内存区域是完全不同的,基本类型数据产生处理都在栈中处理,包装类型是对象,是在堆中产生实例。...因此装箱拆箱都是需要CPU内存资源的。       所以应尽量避免使用自动装箱拆箱。在集合类对象,有对象方面需要的处理适用包装类型,其他的处理提倡使用基本类型。...userVOList.add(userVO); } 1.7.不可变的静态常量,尽量使用线程安全类 不可变的静态常量,虽然需要支持多线程访问,也可以使用线程安全类。...,尽量使用JDK提供的方法拷贝集合 JDK提供的方法可以一步指定集合的容量,避免多次扩容浪费时间空间。...不管程序执行的结果如何,finally块总是会执行的,以确保资源的正确关闭。 十、线程 ---- 10.1.在单线程中,尽量使用线程安全类 使用线程安全类,避免了不必要的同步开销。

48240

猫眼面经汇总

、java.util.concurrent.Executors java的线程操作系统的线程什么关系 优先级队列,如何处理 hash冲突的解决方式,如何判断各个方式的优劣 开放定址法 链地址法 再哈希法...Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。...产生死锁后如何解决 鸵鸟策略 死锁检测与死锁恢复 死锁预防 死锁避免 线程进程的区别 进程:进程是操作系统资源分配的基本单位。...可避免脏读的发生。 可重复读(REPEATABLE READ):保证在同一个事务中多次读取同样数据的结果是一样的。可避免脏读、不可重复读的发生。...AOP是对OOP的补充完善。AOP利用的是代理,分为CGLIB动态代理JDK动态代理。OOP引入封装、继承多态性等概念来建立一种对象层次结构。OOP编程中,会有大量的重复代码

96330
您找到你想要的搜索结果了吗?
是的
没有找到

APK体积优化有感

,Field在initclinit中赋值,并且之前没有付过默认值,且此次赋值是默认值,那么这个赋值就是可以优化的 实现: 1.遍历init,clinit的字节码找到putFieldputStatic...筛选出只对本类Filed赋值的指令 3.将Classnamefiledname作为一个key,如果付默认值则保存到集合中 4.当碰到赋默认值的指令时检测是否在集合中,如果不在集合中进行标记该指令是可以删除的冗余指令...思路: 分析static,final的常量,过滤用来表示序列化对象版本的 serialVersionUID 字段; 还有反射使用到的字段(一般来说不太会有反射访问 final 类型变量的情况,但这里还是会尝试分析代码中对字段的反射调用...R.class内联 R文件在ApplicationModule的不同处理 application: 常量消除 R文件内部的Field都是使用static,final修饰的。...观察字节码会发现访问R文件的getstatic指令会变成ldc直接引入id常量 module:未使用常量消除 由于R文件中的id不能重复,而原生的aapt是根据类别和顺序生成的资源id,是固定的。

60630

java编码规范

【强制】 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 说明:正确的英文拼写语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用。...说明:大而全的常量类,非得使用查找功能才能定位到修改的常量,不利于理解维护。 ---- 4....3) 类 static 成员变量并且与子类共享,必须是 protected。 4) 类 static 成员变量并且仅在本类使用,必须是 private。...【强制】对大段代码进行 try-catch,这是不负责任的表现。catch 时请分清稳定代码稳定代码,稳定代码指的是无论如何不会出错的代码。...对于稳定代码的 catch 尽可能进行区分异常类型,再做对应的异常处理。 ---- 3. 【强制】捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理它,请将该异常抛给它的调用者。

2.5K20

java编码规范

【强制】 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 说明:正确的英文拼写语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用。...说明:大而全的常量类,非得使用查找功能才能定位到修改的常量,不利于理解维护。 ---- 4....3) 类 static 成员变量并且与子类共享,必须是 protected。 4) 类 static 成员变量并且仅在本类使用,必须是 private。...【强制】对大段代码进行 try-catch,这是不负责任的表现。catch 时请分清稳定代码稳定代码,稳定代码指的是无论如何不会出错的代码。...对于稳定代码的 catch 尽可能进行区分异常类型,再做对应的异常处理。 ---- 3. 【强制】捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理它,请将该异常抛给它的调用者。

2.5K10

GOGO-java开发规范

【强制】 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。说明:正确的英文拼写语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用。不会的单词请谷歌翻译。...说明:大而全的常量类,非得使用查找功能才能定位到修改的常量,不利于理解维护。----4. 【推荐】常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。...3) 类 static 成员变量并且与子类共享,必须是 protected。 4) 类 static 成员变量并且仅在本类使用,必须是 private。...【强制】对大段代码进行 try-catch,这是不负责任的表现。catch 时请分清稳定代码稳定代码,稳定代码指的是无论如何不会出错的代码。...对于稳定代码的 catch 尽可能进行区分异常类型,再做对应的异常处理。----3. 【强制】捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理它,请将该异常抛给它的调用者。

20430

《编写高质量代码》学习笔记(2)

那如果要查找仅次于最大值的元素(也就是老二),该如何处理呢?要注意,数组的元素时可以重复的,最大值可能是多个,所以单单一个排序然后取倒数第二个元素时解决不了问题的。...此时,就需要一个特殊的排序算法了,先要剔除重复数据,然后再排序,当然,自己写算法也可以实现,但是集合类已经提供了非常好的方法,要是再使用自己写算法就显得有点重复造轮子了。...---- 建议83:推荐使用枚举定义常量 常量声明是每一个项目都不可或缺的,在Java1.5之前,我们只有两种方式的声明:类常量接口常量,若在项目中使用的是Java1.5之前的版本,基本上都是如此定义的...那么枚举常量与我们经常使用的类常量和静态常量相比有什么优势?问得好,枚举的优点主要表现在四个方面: 1.枚举常量简单:简不简单,我们来对比一下两者的定义使用情况就知道了。...Java之所以如此处理,有两个原因: 避免JVM的大换血。

1.6K40

C++ 特性使用建议

通常友元应该定义在同一文件内,避免代码读者跑到其它文件查找使用该私有成员的类。...使用异常主要有如下优点: (1)异常允许应用高层决定如何处理在底层嵌套函数中发生的失败,不用管那些含糊且容易出错的错误代码。 (2)很多现代语言都用异常。...在单元测试中可以使用 RTTI,但是在其他代码中请尽量避免。尤其是在新代码中,使用 RTTI 前务必三思。...11.前置自增自减 对简单数值(对象),前置与后置均可,对于迭代器其他构造类型对象使用前前置形式 (++i)。...16.预处理使用宏时要非常谨慎,尽量以内联函数,枚举常量代替之。 宏意味着你编译器看到的代码是不同的。这可能会导致异常行为,尤其因为宏具有全局作用域。

1.6K20

变量常量

,用于检测处理程序中可能出现的错误。...以下是一些关于Go中变量常量在并发编程中使用的技巧: 变量 避免共享状态:在多个goroutine之间共享变量可能会导致数据竞争。...常量 定义常量:在Go中,使用const关键字定义常量常量的值不能被更改,因此它们是并发安全的。 避免重复代码:将常量用于重复的数值或字符串可以帮助减少代码重复。...这有助于确保代码的一致性,并使维护更容易。 使用枚举:当需要使用一组相关的常量时,可以使用枚举。使用枚举可以使代码更加清晰易懂,并提高代码的可读性。...不要过度使用常量:虽然常量是很有用的,但是过度依赖它们可能会使代码变得难以理解。在某些情况下,使用变量可能更加合适。 以上是关于Go中变量常量在并发编程中使用的技巧,希望对您有所帮助。

12110

阿里编程规范 pdf_阿里前端开发规范

说明:大而全的常量类,杂乱无章,使用查找功能才能定位到修改的常量,不利于理解维护。 正例:缓存相关常量放在类 CacheConsts 下;系统配置相关常量放在类 ConfigConsts 下。...在 JDK8 中,针对统计时间等场景,推荐使用Instant 类。 对于“明确停止使用代码配置”,如方法、变量、类、配置文件、动态配置属性等要坚决从程序中清理出去,避免造成过多垃圾。...6、集合处理 关于 hashCode equals 的处理,遵循如下规则: 1)只要重写 equals ,就必须重写 hashCode 。...catch 时请分清稳定代码稳 定代码,稳定代码指的是无论如何不会出错的代码。对于稳定代码的 catch 尽可能进行区分异常类型,再做对应的异常处理。...如果加了栈信息,在频繁调用出错的情况下,数据序列化传输的性能损耗也是问题。 避免出现重复代码(Don’t Repeat Yourself),即DRY原则。

1.2K10

sparksql源码系列 | 最全的logical plan优化规则整理(spark2.3)

Union:现在,Union就意味着Union ALL,它不消除重复行。因此,通过它下推FilterProject是安全的。下推Filter是由另一个规则PushDownPredicates处理的。...为了避免扩展JOIN条件,即使发生谓词下推,JOIN条件也将保持原始形式。...,这意味着输入输出的类型都是非空原始类型;2.没有自定义集合类指定数据项的表示形式。MapObjects将给定表达式应用于集合项的每个元素,并将结果作为ArrayType或ObjectType返回。...这类似于典型的映射操作,但lambda函数是使用catalyst表达式表示的。...LambdaVariables是MapObjects中使用的循环变量的占位符。不应该手动构造,而是将其传递到提供的lambda函数中。

2.4K10

Java 基础高频面试题(2021年最新版)

接口默认方法:Java 8允许我们给接口添加一个抽象的方法实现,只需要使用 default关键字即可 Lambda 表达式函数式接口:Lambda 表达式本质上是一段匿名内部类,也可以是一段可以传递的代码...Stream API:用函数式编程方式在集合类上进行复杂操作的工具,配合Lambda表达式可以方便的对集合进行处理。...Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤映射数据等操作。...如果我们合理的使用线程池,则可以避免把系统搞崩的窘境。总得来说,使用线程池可以带来以下几个好处: 降低资源消耗。通过重复利用已创建的线程,降低线程创建和销毁造成的消耗。 提高响应速度。...Set(注重独一无二的性质):不允许重复集合,不会有多个元素引用相同的对象。 Map(用Key来搜索的专业户): 使用键值对存储。Map 会维护与 Key 有关联的值。

50520

【Kotlin】Lambda 表达式 ( 简介 | 表达式语法 | 表达式类型 | 表达式返回值 | 调用方式 | 完整示例 )

Lambda 表达式 简介 ---- Lambda 表达式 简介 : ① 作用 : Lambda 表达式可以作为函数参数 , 传递到函数中 , 使代码结构更加紧凑 ; ② 应用场景 : 集合中扩展集合操作..., 当做函数参数 , 替代匿名内部类 ; ③ 好处 : Lambda 表达式语法简洁 , 避免了冗长的函数声明调用过程 ; ④ 函数式编程 : 函数作为输入输出 ; 在集合操作中 , 过滤 filter...val ; ② 变量 / 常量 名称 : 符合标识符规则即可 ; ③ Lambda 表达式参数列表 : 在括号中 () 表示 , 如果没有参数 , 括号内空着即可 , 如果有多个参数使用逗号隔开 ;...Lambda 表达式调用 : 使用 invoke 方法 , 或直接当做函数调用 , 即可调用 Lambda 表达式 ; ① 直接调用 : 调用格式为 “Lambda表达式变量 / 常量 ( 实际参数列表...+ b}") a + b } ② Lambda 表达式调用方法 : 使用 lambda4.invoke(1, 2) lambda4(1, 2) 两种形式 , 都可以调用 Lambda 表达式

87820

JVM之字符串常量

字符串拼接操作不一定使用的是StringBuilder! 如果拼接符号左右两边都是字符串常量常量引用,则仍然使用编译期优化,即StringBuilder的方式。 2....//在字符串常量池中生成"11"。如何理解:jdk6:创建了一个新的对象"11",也就有新的地址。...:使用的是上一行代码代码执行时,在常量池中生成的"11"的地址 String s4 = "11"; System.out.println(s3 == s4);//jdk6...七、G1中的字符串去重操作 背景:对许多Java应用(有大的也有小的)做的测试得出以下结果: ➢堆存活数据集合里面String对象占了25% ➢堆存活数据集合里面重复的String对象有13.5% ➢...这个项目将在G1垃圾收集器中实现自动持续对重复的String对象进行去重,这样就能避免浪费内存。 实现 ➢当垃圾收集器工作的时候,会访问堆上存活的对象。

25430

Effective Java(第三版)-学习笔记

避免创建不必要的对象 如对String对象的包装new String("bikini")(应该直接使用"bikini"),计算时包装类型基本类型的来回转换,大对象的重复创建等都是资源的浪费。...4.当编译期可确定常量集合内容时,都可以使用枚举类来实现。...使用EnumSet代替bit字段的定义 EnumSet是对枚举类对象的数组集合包装,提供了一系列处理枚举类数组集合的方法。使用位向量数组实现,性能bit处理相当,同时又拥有枚举类的优点。...Chapter07:Lambda表达式处理 优先使用lambdas而不是匿名类 lambda可以使代码看起来更加简洁,书写方便。...streams用函数对象来处理流数据(想象水流流过管道),循环代码块(循环遍历代码,如for循环,while循环)用代码块不断的重复操作。他们的操作对比: 1.代码块可读写作用域内访问的任何局部变量。

1.1K10

Android兼容Java 8语法特性的原理分析

等高阶函数) 方法引用(使用::关键字将函数转化为对象) 默认方法(抽象接口中允许存在default修饰的抽象方法) 类型注解重复注解 其中Lambda表达、函数式接口、方法引用三个特性为Java带来了函数式编程的风格...区别在于: 后四种指令,在编译期间生成的class文件中,通过常量池(Constant Pool)的MethodRef常量已经固定了目标方法的符号信息(方法所属者及其类型,方法名字、参数顺序类型、返回值...至此,上面7个步骤就是Lambda表达式在Java的底层的实现原理。Android 针对这些实现会怎么处理呢?...J8Sample.classJ8Sample$$Lambda$1.class反编译之后的代码如下: ? ?...如何能够全版本支持Java 8。D8还有很长的一段路要走。 如果我们在低版本需要使用新的API,目前可以采取将这些API打包进去的临时办法。 写到这里,肯定有人要提出,为什么不直接使用Kotlin呢?

82221

【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则

GetHashCode()函数仅会在一个地方用到,即为基于散列(hash)的集合定义键的散列值时,此类集合包括HashSetDictionary容器等。...这样既可以避免代码重复,也可以利用构造函数初始化器来生成更高效的目标代码。 ● C#编译器将把构造函数初始化器看做是一种特殊的语法,并移除掉重复的变量初始化器以及重复的基类构造函数调用。...原则14 保证值类型的常量原子性 常量性的类型使得我们的代码更加易于维护。不要盲目地为类型中的每一个属性都创建getset访问器。...也就是说,使用委托,我们可以一个或多个在运行时联系起来的客户对象进行通信。 3)由于回调和委托在C#中非常常用,以至于C#特地以lambda表达式的形式为其提供了精简语法。...原则20 避免返回对内部类对象的引用 ● 若将引用类型通过公有接口暴露给外界,那么对象的使用者即可绕过我们定义的方法属性来更改对象的内部结构,这会导致常见的错误。

1.7K30

python基础教程:运算对象、运算符、表达式语句

提示:运算操作这两个概念在编程中往往是一样的 比如下面这一行代码: a = 5; b = a + 7; c = a if a > b else b 先来分解一下这一行: 语句: 由表达式组成。...imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 运算对象 运算对象就是由各种对象构成的集合,这些对象里面有些是常量,有些是变量。...字面意义上的常量就是按照它们的字面意义使用它们的值。比如,数字8总是代表它自己,它是一个常量,不能改变它的值。 变量 常量代表具有特定意义的对象,但不足以满足编程的需要。...不过,还是建议大家通过使用圆括号来分组表达式(运算符运算对象),这样可以清楚的指出运算的先后顺序,同时也让程序更加易读。...运算符 描述 lambda Lambda函数表达式 if-else 条件表达式 or 布尔或 and 布尔与 not 布尔 in, not in, is, is not, , >=,

54210

如何编写高质量的代码

compareToequals同步;使用shuffle打乱列表;减少HashMap中元素的数量;多线程使用Vector或HashTable;稳定排序推荐使用List枚举注解推荐使用枚举定义常量使用构造函数协助描述枚举项...;package-info类的作用:1、声明友好类包内访问常量;2、为在包上标注注解提供便利;3、提供包的整体注释说明 数组集合 在明确的场景下,为集合指定初始容量 ArrayList集合底层使用数组存储...稳定排序推荐使用List (稳定的意思是:经常需要改动;TreeSet集合中元素不可重复,且默认按照升序排序,是根据Comparable接口的compareTo方法的返回值确定排序位置的。...枚举注解 推荐使用枚举定义常量; (在项目开发中,推荐使用枚举常量替代接口常量常量)(常量分为:类常量、接口常量、枚举常量;枚举常量优点:1、枚举常量更简单;2、枚举常量属于稳态性(不允许发生越界...受检异常需要try..catch处理;3、受检异常增加了开发工作量。避免以上受检异常缺点办法:将受检异常转化为受检异常)。

97320
领券