月度记录-2024-12月

4 阅读1分钟

1. pv和uv

  • PV(Page View,页面浏览量):

  • PV指的是某个页面被访问的次数。每次用户打开页面或刷新页面都会计为一次PV。

  • 同一用户多次访问同一页面会被多次计入PV。

  • UV(Unique Visitor,独立访客):

  • UV指的是在一定时间内访问网站的独立用户数,通常是基于用户的IP地址或设备ID来统计的。

  • 一个用户在统计周期内访问网站多次,只会被计为一个UV。

2. Spark

Apache Spark 是一个开源的分布式计算框架,主要用于大规模数据处理和分析。它是基于内存的计算,能够高效地进行批处理和流处理任务,广泛应用于数据分析、机器学习、图计算、SQL查询等领域。

Spark 提供了 MLlib,它是一个内置的机器学习库,包含了多种算法和工具,可以帮助你进行数据挖掘、机器学习、统计分析等任务。MLlib 提供了很多常见的机器学习算法和功能,涵盖了回归、分类、聚类、推荐、降维等任务。

以后要学学。

3. 单调栈

单调栈(Monotonic Stack) 是一种栈的应用技巧,常用于解决一些需要处理序列中元素的相对顺序问题,特别是那些涉及到范围、窗口、比较等操作的问题。单调栈的核心思想是,通过在栈中保持一个单调的元素序列(单调递增或单调递减),从而在遍历数组时能够快速地找到与当前元素相关的最小值或最大值,进而减少不必要的计算。

栈的数据结构,其中元素在栈内始终保持单调性(可以是单调递增或单调递减)。

单调栈的作用是帮助我们快速找到某个元素的前一个较大值(对于单调递增栈)或前一个较小值(对于单调递减栈)。

做leetcode的接水题目看到的,甚6。

4. hotseconds步骤

1. 替换jar

2. 将hot-seconds-remote.xml复制到项目

3. 配置启动参数,替换两个配置,(注意配置不能换行)

-javaagent:D:/hotseconds/HotSecondsServer.jar=hotconf=D:/workHome/flexible-employment-platform/web/src/main/resources/hot-seconds-remote.xml

4. 安装插件

5. 配置插件参数

6. 配置mapping .class rootPathrootPath/src/main/java -> /BOOT-INF/classes

7. 启动项目,connect

8. 更新之后的jar文件,点击hot reloading,大功告成

5. rocketmq topic group tag

topic:消费的主题或类别,用来组织和分类消息。一个topic可以包含多个消息;不同的消费者可以订阅同一个topic。

group:消息消费者组,用于标识一组消费者,它决定了消息的消费方式。一个消费者组中的多个消费者可以并行消费消息,但每条消息只会被其中一个消费者消费。消费者组可以让多个消费者协同工作,形成一个负载均衡机制来处理消息。

tag:Tag 是用来对Topic 下的消息进行更细粒度分类的标签。它不是必须的,但在某些场景中非常有用,特别是当你需要将一个Topic 里的消息进一步分类时。

6. ES Nested

嵌套对象是指一个对象中的字段本身是另一个对象或数组对象,如果不使用 nested 类型,Elasticsearch 会将嵌套对象的字段展开为多条记录,导致不准确的查询结果。使用 nested 类型可以确保嵌套对象的查询能够返回正确的匹配结果。

nested 类型的字段在 Elasticsearch 中被存储为一个独立的内部文档。每个 nested 文档都会被与主文档关联,并且具有独立的文档 ID。通过这种方式,nested 类型能够保持嵌套对象之间的关系,而不会像普通字段那样展开成多条记录。

创建:"type":"nested",

查询: nested query 和 nested aggregation 可以精确地查询和聚合嵌套数据。

7. ES 扁平化存储嵌套对象

扁平化存储通过将嵌套对象展开为普通字段,从而避免 nested 类型的复杂性和性能开销。虽然会丢失一些嵌套关系的优势,但在某些场景下可以提高查询性能和灵活性。

{ "product_name": "Laptop", "reviews": [ { "user": "Alice", "rating": 5, "comment": "Great product!" }, { "user": "Bob", "rating": 3, "comment": "Average experience." } ] } 扁平化转换为 { "product_name": "Laptop", "reviews.user": ["Alice", "Bob"], "reviews.rating": [5, 3], "reviews.comment": ["Great product!", "Average experience."] }

特性

扁平化存储

nested

类型

性能

查询和索引性能更高

查询性能较低,索引开销大

查询复杂度

查询简单,语法直接

需要使用

nested query

嵌套关系

不支持

完全支持

更新成本

更新简单

更新成本较高

适用场景

数据量大、关系简单

数据量中等、关系复杂

8. idea build project automatically

idea一开启,不启动项目,电脑也嗖嗖叫,明显有进程在偷跑,进去一看是idea,再一看是自动build,由于我们的项目build方式不太一般,于是就一直失败一直重试。。。

关闭idea这个选项就好了。

9. 代码有哪些考核指标?

一切的前提是功能正确,功能做错了等于0

1. 代码质量指标:

千行代码的 Bug 数量(Defects per KLOC) 目标:0.5以下

单元测试覆盖率

静态代码分析得分

2.性能指标

代码执行效率

3.可维护性

bug修复所需时间

注释覆盖率

4.安全性指标

安全漏洞数量

数据完整性

10. 正则表达式灾难性回溯

特定字符串引爆

正则表达式灾难性回溯(Catastrophic Backtracking)是指在正则表达式匹配过程中,由于表达式设计不当,导致匹配算法执行了大量无效回溯操作,从而显著增加了运行时间,甚至导致程序卡死或崩溃。

灾难性回溯通常发生在正则表达式包含 重叠的重复模式 时,例如多个嵌套的量词 *, +, {n,m} 等组合,导致正则引擎在匹配失败时尝试回溯大量的可能路径。

TODO有待学习,想不到一个小小的正则表达式,水这么深。以后写正则,小心点。

11. ORM框架中N + 1问题

假设我们有两个实体:User 和 Order,它们之间是一对多的关系(一个用户可以有多个订单)。当我们使用 ORM 查询所有用户及其对应的订单时,如果不正确处理关联查询,就可能出现 N + 1 问题。

比如查询用户,而ORM会将用户相关的订单也查出来。用户是1,订单就是N。使用Hibernate的时候我就想过这个问题,他会自动映射,当时就想着效率岂不是会很低?用到用不到的数据都查出来了,原来叫N+1问题。

那时候都要设置Lazy属性,也就是访问的时候再加载数据。

12. @TransactionalEventListener和@EventListener,如果事件内发生了异常,两者会对调用的方法A产生什么影响?

@EventListener:异常会冒泡到方法A,除非事件监听器捕获异常或是异步处理。与事务无关,直接中断方法A。

@TransactionalEventListener:如果 phase = AFTER_COMMIT,异常不会影响方法A。 其他 phase 可能影响事务,间接影响方法A。如果监听器的异常导致事务回滚,方法A可能回滚其事务中的操作。

13.EnumMap

存储配置项很好用,我用这个存策略,然后通过枚举获得对应的策略,感觉还不错。

实现:数组,而不是哈希表

14. id如果有序,尽量多用id排序,不行了再用createtime

因为id有索引

15. 涉及到计算的,统一后端处理

避免出现进位不一致

16. 校验集合

@Validated是不支持校验数组的,得用@Valid。所以分组校验也用不了。慎用分组校验! @Valid List po