工作中的小知识点

作用

用来记录工作中一些相对较小无法单独成文但很有用的知识点,记录的知识点不仅包含代码相关知识点还会包含一些业务相关知识点,本文会持续更新

  1. 邮箱名称是不分区大小写的
  2. 发送短信计费规则:每条短信按照 70 个字符以内算一条短信(包含短信签名),超过 70 个字符后,原则上每增加 67 个字符多增加一条短信,按照运营商编解码差分原则,每个标点、数字、字母、中文等均按照一个字符计算(需要注意的时换行是两个字符)
  3. 保存手机号时使用 String 类型,兼容 +86-183xxxxxxx 的情况
  4. 保存身份证时使用 String 类型
  5. 数据库的时间有长度限制(5.6.4以后)

时间类型

时间范围

TIMESTAMP

1970-01-01 00:00:01.000000 UTC 2038-01-19 03:14:07.999999

DATETIME

1000-01-01 00:00:00.000000 9999-12-31 23:59:59.999999

  1. 保存用户昵称时,需要使用 utf8mb4 编解码,防止用户使用 emoji 表情出现异常,特别是微信的 nickName
  2. 时间使用的标准格式正确的格式化模板参考如下,切记 YYYY 表示当前周所在的年份

时间模板

时间格式

ISO-8601

yyyy-MM-dd HH:mm:ss

UTC

yyyy-MM-dd ‘T’ HH:mm:ss.SSSXXX

  1. 后端返回给前端的错误异常需要做分类。一般分成系统异常和业务异常,业务异常使用自定义异常类型并返回给前端响应错误信息
  2. 建表时,最好加上删除状态字段(is_deleted)。处理删除逻辑时有两种删除方式可选:(1)物理删除,真正执行删除操作;(2)逻辑删除,执行修改操作,即修改is_deleted状态即可
  3. 写任何接口时都需要考虑,该接口是否需要做参数校验和幂等校验
  4. 配置 yaml 文件时,禁止用 tab 键,只能使用空格键,yaml 中的对齐指的是同一个对象 A 下边的 和 A.password 两个需要对齐,假如有另一个对象 B,此时 和 不需要对齐
  5. js 的 number 类型有个最大值(安全值)。即 2 的 53 次方,为 9007199254740992 。如果超过这个值,那么 js 会出现不精确的问题。这个值为 16 位,所以给前端传数据时推荐使用字符串形式
    *
  6. 银行短信平台架构 银行短信管理办法_优先级

  7. 计数器在多线程下使用时,如果线程不是很多并且读多于写的情况下,使用 AtomicLong 作为 count 对象,如果线程非常多的情况下,使用 LongAdder 作为 count 对象
  8. 查询 windows 端口被占用的命令:netstat -ano | findstr “7806” 。可以找出被占用端口的 pid,然后删除即可
  9. Idea 启动项目报错:Command line is too long.XXX。解决:在该项目文件夹 .idea/workspace.xml 中找到
<component name="PropertiesComponent">   
... 
<!-- 添加 -->
<property name="dynamic.classpath" value="true" />
</component>
  1. 如果你想返回 null,请停下来想一想,这个地方是否更应该抛出一个异常
  2. Mysql 的默认全局 row_id 在代码实现上使用的是 bigint unsigned 类型,但实际上只给 row_id 留了 6 字节,这种设计就会存在一个问题:如果全局 row_id 一直涨,一直涨,直到 2 的 48 幂次 -1 时,这个时候再 +1,row_id 的低 48 位都为 0,结果在插入新一行数据时,拿到的 row_id 就为 0,存在主键冲突的可能性
  3. 计算机存在两个软盘插口,分别就是对应着 A 盘和 B 盘,A 盘是给 3.5 英寸软盘预留的,而 B 盘是给 5.3 英寸软盘预留的
  4. 一些常见组件的承压:
  1. 负载均衡层使用的是高性能的 Nginx,则我们可以预估 Nginx 最大的并发度为:10W+
  2. 应用层我们使用的是 Tomcat,而 Tomcat 的最大并发度可以预估为 800 左右
  3. 持久层的缓存使用的是 Redis,Redis 的最大并发度可以预估为 5W 左右。数据库使用的是 MySQL,MySQL 的最大并发度可以预估为1000 左右
  1. linux下查找java进程占用CPU过高原因
  1. 查找进程:top 查看进程占用资源情况
  2. 查找线程:使用 top -H -p 查看线程占用情况
  3. 查找java的堆栈信息:
  1. 将线程id转换成十六进制:#printf %x 15664。然后再使用jstack查询线程的堆栈信息。jstack | grep -a 线程id(十六进制),jstack | grep -a <线程ID十六进制>
  2. 这里也可以直接 jstack -l > stack.log。然后 nid 即为 <线程ID十六进制>
  1. 从我个人的经验来看,技术一号位是负责使用技术能力解决业务问题,提供稳定可靠的技术支撑,确保业务安全合规低风险地健康发展,并通过技术或业务创新来推动业务发展;负责向业务各方提供各种必要的技术支撑,通过合理的数据分析为业务决策提供依据;通过对技术领域的积累和发展,通过业务领域的理解和落地影响业务决策;负责构建梯队完整、能力全面、制度完善的技术团队来支撑业务发展
  2. springboot配置文件优先级:命令行 > bootstrap > properties > yaml > yml。优先级高的会覆盖优先级的值,故优先级低的先加载