16 条 yyds 的代码规范,使编写的代码更高效、优雅!,2024年最新2024年大厂Java面经

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

}

正例:

LinkedList collection = new LinkedList<>();

if (collection.isEmpty()){

System.out.println(“collection is empty.”);

}

//检测是否为null 可以使用CollectionUtils.isEmpty()

if (CollectionUtils.isEmpty(collection)){

System.out.println(“collection is null.”);

}

四、初始化集合时尽量指定其大小

尽量在初始化时指定集合的大小,能有效减少集合的扩容次数,因为集合每次扩容的时间复杂度很可能时O(n),耗费时间和性能。为什么不建议Java程序员用阿里巴巴规范,而使用Google Guava编程:https://blog.yoodb.com/yoodb/article/detail/1621

反例:

//初始化list,往list 中添加元素反例:

int[] arr = new int[]{1,2,3,4};

List list = new ArrayList<>();

for (int i : arr){

list.add(i);

}

正例:

//初始化list,往list 中添加元素正例:

int[] arr = new int[]{1,2,3,4};

//指定集合list 的容量大小

List list = new ArrayList<>(arr.length);

for (int i : arr){

list.add(i);

}

五、使用StringBuilder 拼接字符串

一般的字符串拼接在编译期Java 会对其进行优化,但是在循环中字符串的拼接Java 编译期无法执行优化,所以需要使用StringBuilder 进行替换。推荐公众号Java精选,回复Java面试,在线刷面试题。

反例:

//在循环中拼接字符串反例

String str = “”;

for (int i = 0; i < 10; i++){

//在循环中字符串拼接Java 不会对其进行优化

str += i;

}

正例:

//在循环中拼接字符串正例

String str1 = “Love”;

String str2 = “Courage”;

String strConcat = str1 + str2;  //Java 编译器会对该普通模式的字符串拼接进行优化

StringBuilder sb = new StringBuilder();

for (int i = 0; i < 10; i++){

//在循环中,Java 编译器无法进行优化,所以要手动使用StringBuilder

sb.append(i);

}

六、若需频繁调用Collection.contains 方法则使用Set

在Java 集合类库中,List的contains 方法普遍时间复杂度为O(n),若代码中需要频繁调用contains 方法查找数据则先将集合list 转换成HashSet 实现,将O(n) 的时间复杂度将为O(1)。推荐公众号Java精选,回复Java面试,在线刷面试题。

反例:

//频繁调用Collection.contains() 反例

List list = new ArrayList<>();

for (int i = 0; i <= Integer.MAX_VALUE; i++){

//时间复杂度为O(n)

if (list.contains(i))

System.out.println("list contains "+ i);

}

正例:

//频繁调用Collection.contains() 正例

List list = new ArrayList<>();

Set set = new HashSet<>();

for (int i = 0; i <= Integer.MAX_VALUE; i++){

//时间复杂度为O(1)

if (set.contains(i)){

System.out.println("list contains "+ i);

}

}

七、使用静态代码块实现赋值静态成员变量

对于集合类型的静态成员变量,应该使用静态代码块赋值,而不是使用集合实现来赋值。

反例:

//赋值静态成员变量反例

private static Map<String, Integer> map = new HashMap<String, Integer>(){

{

map.put(“Leo”,1);

map.put(“Family-loving”,2);

map.put(“Cold on the out side passionate on the inside”,3);

}

};

private static List list = new ArrayList<>(){

{

list.add(“Sagittarius”);

list.add(“Charming”);

list.add(“Perfectionist”);

}

};

正例:

//赋值静态成员变量正例

private static Map<String, Integer> map = new HashMap<String, Integer>();

static {

map.put(“Leo”,1);

map.put(“Family-loving”,2);

map.put(“Cold on the out side passionate on the inside”,3);

}

private static List list = new ArrayList<>();

static {

list.add(“Sagittarius”);

list.add(“Charming”);

list.add(“Perfectionist”);

}

八、删除未使用的局部变量、方法参数、私有方法、字段和多余的括号。

九、工具类中屏蔽构造函数

工具类是一堆静态字段和函数的集合,其不应该被实例化;但是,Java 为每个没有明确定义构造函数的类添加了一个隐式公有构造函数,为了避免不必要的实例化,应该显式定义私有构造函数来屏蔽这个隐式公有构造函数。推荐后台管理系统,源码全部开放:https://gitee.com/yoodb/jing-xuan

反例:

public class PasswordUtils {

//工具类构造函数反例

private static final Logger LOG = LoggerFactory.getLogger(PasswordUtils.class);

public static final String DEFAULT_CRYPT_ALGO = “PBEWithMD5AndDES”;

public static String encryptPassword(String aPassword) throws IOException {

return new PasswordUtils(aPassword).encrypt();

}

正例:

public class PasswordUtils {

//工具类构造函数正例

private static final Logger LOG = LoggerFactory.getLogger(PasswordUtils.class);

//定义私有构造函数来屏蔽这个隐式公有构造函数

private PasswordUtils(){}

public static final String DEFAULT_CRYPT_ALGO = “PBEWithMD5AndDES”;

public static String encryptPassword(String aPassword) throws IOException {

return new PasswordUtils(aPassword).encrypt();

}

十、删除多余的异常捕获并抛出

用catch 语句捕获异常后,若什么也不进行处理,就只是让异常重新抛出,这跟不捕获异常的效果一样,可以删除这块代码或添加别的处理。推荐公众号Java精选,回复Java面试,在线刷面试题。

反例:

//多余异常反例

private static String fileReader(String fileName)throws IOException{

try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {

String line;

StringBuilder builder = new StringBuilder();

while ((line = reader.readLine()) != null) {

builder.append(line);

}

return builder.toString();

} catch (Exception e) {

//仅仅是重复抛异常 未作任何处理

throw e;

}

}

正例:

//多余异常正例

private static String fileReader(String fileName)throws IOException{

try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {

String line;

StringBuilder builder = new StringBuilder();

while ((line = reader.readLine()) != null) {

builder.append(line);

}

return builder.toString();

//删除多余的抛异常,或增加其他处理:

/*catch (Exception e) {

return “fileReader exception”;

}*/

}

}

十一、字符串转化使用String.valueOf(value) 代替 " " + value

把其它对象或类型转化为字符串时,使用String.valueOf(value) 比 “”+value 的效率更高。推荐后台管理系统,源码全部开放:https://gitee.com/yoodb/jing-xuan

反例:

//把其它对象或类型转化为字符串反例:

int num = 520;

// “” + value

String strLove = “” + num;

正例:

//把其它对象或类型转化为字符串正例:

int num = 520;

// String.valueOf() 效率更高

String strLove = String.valueOf(num);

十二、避免使用BigDecimal(double)

BigDecimal(double) 存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常。

反例:

// BigDecimal 反例

BigDecimal bigDecimal = new BigDecimal(0.11D);

正例:

// BigDecimal 正例

BigDecimal bigDecimal1 = bigDecimal.valueOf(0.11D);

十三、返回空数组和集合而非 null

若程序运行返回null,需要调用方强制检测null,否则就会抛出空指针异常;返回空数组或空集合,有效地避免了调用方因为未检测null 而抛出空指针异常的情况,还可以删除调用方检测null 的语句使代码更简洁。

反例:

//返回null 反例

public static Result[] getResults() {

return null;

}

public static List getResultList() {

return null;

}

public static Map<String, Result> getResultMap() {

return null;

}

正例:

//返回空数组和空集正例

public static Result[] getResults() {

return new Result[0];

}

public static List getResultList() {

return Collections.emptyList();

}

public static Map<String, Result> getResultMap() {

return Collections.emptyMap();

}

十四、优先使用常量或确定值调用equals 方法

对象的equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals 方法。推荐后台管理系统,源码全部开放:https://gitee.com/yoodb/jing-xuan

反例:

最后

即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!

我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!
一共有20个知识点专题,分别是:

Dubbo面试专题

JVM面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Java并发面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Kafka面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MongDB面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MyBatis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MySQL面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Netty面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

RabbitMQ面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Redis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Spring Cloud面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

SpringBoot面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

zookeeper面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

常见面试算法题汇总专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

计算机网络基础专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

设计模式专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

)]

RabbitMQ面试专题

[外链图片转存中…(img-jw5NWDAZ-1713585157473)]

Redis面试专题

[外链图片转存中…(img-ymuzKY8R-1713585157473)]

Spring Cloud面试专题

[外链图片转存中…(img-XU9m5iX0-1713585157474)]

SpringBoot面试专题

[外链图片转存中…(img-hv9Qge87-1713585157474)]

zookeeper面试专题

[外链图片转存中…(img-IOehbdzM-1713585157474)]

常见面试算法题汇总专题

[外链图片转存中…(img-YBV575sm-1713585157474)]

计算机网络基础专题

[外链图片转存中…(img-1UEyCiDH-1713585157475)]

设计模式专题

[外链图片转存中…(img-uuOBBzfw-1713585157475)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-NRncxra9-1713585157475)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 27
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值