Featured image of post 临川羡鱼 II

临川羡鱼 II

–个人实习学习能力提升总结

个人实习除内部框架之外的学习提升总结

# 提升能力点

# 操作系统

MAC 上手了

# 技术栈

几乎没有, 或者说只能靠 doc 文档和借鉴抄才能找得到

项目确实需要的复杂的东西较少, JavaEE 就足够了加个 Stream 流加个 Map, 剩下的交给封装的框架实现

主要是理解需求, 基础范畴内的东西都能作出来. 除非是这两天的这个逻辑校验的东西, 很难搞

# 代码风格

对于我的空指针的控制, 有很大提升; 校验入参, 避免空值这类

# 操作流程

例如需求单, bug 单的处理, 文档的阅读, 找人问事的路线等

# 排查问题

远程调试, 生产环境写 SQL, 前端调试

工作内容, 排查空指针什么的问题, 在这么多数据库表的情况下, 还有这么多生产库与环境的情况下, 进行一个定位和搜索, 绝对是一件难事.

很多情况就是基础 JavaEE 的问题, 但是没搞好还是很难.

# 沟通能力

与同组开发, 不同组开发, 测试, 产品, PM, BOSS 该如何交流的方法

提交任务, Ding 的使用等

# Git 能力

正要提交到控制台时候, 发生重大 git 错误: 我将刚刚提交的 commit 删除了, 这导致我半天的产出灰飞烟灭…但是迅速通过查找 hash 值恢复了工作区

# 上手项目

这是润物无声的, 只有观察过许多有价值的他人代码后才能领悟到

确实没有遇见过这么复杂的业务逻辑, 字段方面就几十个上百. 数据库更别说. 相较于其他组, 这是晶科, 全球第三的光伏供应商, 最赚钱的地方. 并且有最高的 QPS 80 左右

# 编码能力点

整理自"端点实习代码风格评价"总集, 只记录对后续有价值的部分

# 探索点

  • 自定义注解防止表单重复提交

    public @interface RepeatSubmit {
        // 缓存过期时间,默认为10秒
        int expireSeconds() default 10;
    }
    
  • JavaEE 内容 代码路径 SQL(封装) -> QParams(封装) -> Page(封装) -> Arrays(原生) -> haseCode( )

    观察到的 Arrays 的 hashCode 需要将调用的内部所有元素的 hashCode()方法进行合并, 看到的一个参数是 31 这个数字, 之前没有了解过这个点

    科普:String hashCode 方法为什么选择数字 31 作为乘子 - 田小波 ⊰ - 博客园 (cnblogs.com)

    hashCode 为什么乘以 31?深入理解 hashCode 和 hash 算法-CSDN 博客

    Combine hash codes using 31: For each element, the method multiplies the current result by 31 and then adds the hash code of the element. The number 31 is used because it’s an odd prime number, which has certain mathematical properties that help in evenly distributing hash codes for sequences of elements. Specifically, 31 was chosen because it’s a small prime number that still achieves good distribution, and also because it allows for an optimization in the JVM: multiplying by 31 can be efficiently implemented using a bitwise shift and subtraction, which is faster than general multiplication. Return the combined hash code: After processing all elements, the method returns the final result, which is the combined hash code for the array. The choice of 31 as a multiplier is a balance between ensuring a good distribution of hash codes (reducing collisions) and computational efficiency.

    使用 31 组合哈希码: 对于每个元素,该方法将当前结果乘以 31,然后添加元素的哈希码。使用数字 31 是因为它是一个奇数素数,它具有某些数学属性,有助于均匀分布元素序列的散列码。具体来说,选择 31 是因为它是一个小素数,仍然可以实现良好的分布,还因为它允许在 JVM 中进行优化: 乘以 31 可以通过位移和减法有效地实现,这比一般的乘法要快。返回组合哈希代码: 在处理所有元素之后,该方法返回最终结果,即数组的组合哈希代码。选择 31 作为乘数是在确保散列码的良好分布(减少冲突)和计算效率之间的平衡。

# 香代码

  • List 里面的 removeIf + Stream 流遍历查找 List 中的对象删除

    categoryList.removeIf(categoryBO -> Objects.equals(Boolean.TRUE, categoryBO.getScrapOrNot()));
    
  • 内部封装的异常类以及各种的类构造函数有覆写多重的 override, 最后一起汇总到一个方法中

  • 接口当 final static 关键字来用并用包名.出来

  • SneakyThrow 直接 try-catch

  • 直接用 <p|>, <br|> 分割代码注解

  • int totalPages = (int) Math.ceil((double) totalCount / pageSize1);
    

分页时候计算页数

  • 在类 POJO 中直接写强相关的 static 方法 + 字段 Enum 便于封装

还有一些, 但是牵涉到业务不方便说

Licensed under CC BY-NC-SA 4.0
本博客已稳定运行
发表了31篇文章 · 总计298.68k字
Powered by Blood, Sweat, and Tears
使用 Hugo 构建 主题 StackJimmy 设计