Skip to content
  • mysql 判断不为null要用is not null

  • PO对象定义为什么要加private static final long serialVersionUID = 1L;

    • po对象里定义serialVersionUID是因为有些框架可能会使用对象流传输对象,比如Dubbo。
    • 服务之间互相调用,传输对象,使用的是openFeign,openFeign使用的是jackson的字符流。
  • java路径下的编译文件,默认是不会放到classpath里的

  • mybatis xml里可以用automapping="true" ,但id映射需要写

  • 对于平台属性值的修改,建议先删掉后修改,这样就不用对比

  • 为什么@ComponentScan

  • mapstruct转换Date类型,java中date类型存储到es中时区

  • es查询慢,故障排查

    bash
    wjm@wjm-virtual-machine:~$ curl localhost:9200/_cat/nodes?v
    ip         heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
    172.17.0.5           56          94   2    0.38    0.40     0.44 dilmrt    *      3f585227e067
    
    你的命令 curl localhost:9200/_cat/nodes?v 是用于与 Elasticsearch 交互的命令。结果显示了 Elasticsearch 集群中的一个节点的信息。以下是结果中每列的解释:
    
    ip: 节点的 IP 地址,这里是 172.17.0.5。
    heap.percent: 节点的堆使用百分比,这里是 56,表示堆的 56% 被使用。
    ram.percent: 节点的内存使用百分比,这里是 94,表示内存的 94% 被使用。
    cpu: 节点的 CPU 使用情况,这里是 2,表示 CPU 使用率为 2%。
    load_1m, load_5m, load_15m: 节点的负载(load average)情况,分别表示过去 1 分钟、5 分钟和 15 分钟的平均负载。
    node.role: 节点的角色,这里是 dilmrt。
    master: 显示是否是主节点(*表示是)。
    name: 节点的名称,这里是 3f585227e067。
    总体而言,这一行的含义是,位于 IP 地址 172.17.0.5 的 Elasticsearch 节点,其堆使用了 56%,内存使用了 94%,CPU 使用率为 2%,负载较低,是集群中的一个数据、索引、搜索等多种角色节点,同时也是主节点。
    
    
    wjm@wjm-virtual-machine:~$ curl -XGET localhost:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason| grep UNASSIGNED
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   487  100   487    0     0  13270      0 --:--:-- --:--:-- --:--:-- 13527
    goods                          0 r UNASSIGNED CLUSTER_RECOVERED

    优化 ​

    • index数据放在内存里

    • 搜索添加拼音分词器,实现拼音搜索,日期排序

    • 购物车按照添加日期倒序显示

    • 购物车Redis高可用集群

    • 订单outTradeNo使用雪花算法,显示id的地方,“我的订单”,“生成订单“的id都用outtradeno显示

    • redis主从复制哨兵

      shell
      sudo mkdir -p /docker/redis_master/conf
      sudo mkdir -p /docker/redis_slave6380/conf
      sudo mkdir -p /docker/redis_slave6383/conf
      sudo mkdir -p /docker/redis_sentinel6381/conf
      sudo mkdir -p /docker/redis_sentinel6382/conf
      
      sudo chmod -R 777 /docker

      主节点的配置文件

    bash
    vim /docker/redis_master/conf/redis.conf
    # 服务端口 默认6379
    port 6379
    # 关闭保护模式,允许远程连接
    protected-mode no

    启动主节点

    bash
    docker run --name=redis-master6379 -d -p 6379:6379  --privileged=true --network host -v /docker/redis_master/conf/redis.conf:/etc/redis/redis.conf redis:6.2 redis-server /etc/redis/redis.conf
    
    --restart=always这个先不写,否则系统瞬时负载太大
从节点的配置文件
vim /docker/redis_slave6380/conf/redis.conf
# 服务端口 默认6379
port 6380
# 关闭保护模式,允许远程连接
protected-mode no
# 配置主从复制 从节点默认只读
## redis5.0后新版本配置
replicaof 172.16.8.186 6379

启动从节点

bash
docker run --name=redis-slave6380 -d -p 6380:6380  --privileged=true --network host -v /docker/redis_slave6380/conf/redis.conf:/etc/redis/redis.conf redis:6.2 redis-server /etc/redis/redis.conf

docker run --name=redis-slave6383 -d -p 6383:6383  --privileged=true --network host -v /docker/redis_slave6383/conf/redis.conf:/etc/redis/redis.conf redis:6.2 redis-server /etc/redis/redis.conf

--restart=always先不用

哨兵sentinel的配置文件

bash
port 6381
sentinel monitor master 192.168.198.128 6379
logfile "sentinel6381.log"

​ 启动哨兵

bash
docker run --name=redis-sentinel6381 -d -p 6381:6381 --privileged=true --network host -v /docker/redis_sentinel6381/conf/redis.conf:/etc/redis/redis.conf:z redis:6.2 redis-server /etc/redis/redis.conf --sentinel

--restart=always

启动哨兵

bash
docker run --name=redis-sentinel6382 -d -p 6382:6382 --privileged=true --network host -v /docker/redis_sentinel6382/conf/redis.conf:/etc/redis/redis.conf:z redis:6.2 redis-server /etc/redis/redis.conf --sentinel

docker报错sentinel directive while not in sentinel mode
改文件映射的权限 
sudo chmod -R 777 /docker/redis_sentinel6382

java客户端redisson报错,容器的网络改成host模式
报错:Command execution timeout for command: (SENTINEL SENTINELS), params: [master], Redis client: [addr=redis://192.168.198.128:6382]
redisson版本<redisson.version>3.17.6</redisson.version>及以上
# Redis Sentinel Configuration

# 指定 Sentinel 运行的端口
port 6382

# 监控的主节点
sentinel monitor mymaster 192.168.198.128 6379 2

# 如果在down-after-milliseconds毫秒内无法从主节点收到回应,将主节点标记为主观下线
sentinel down-after-milliseconds mymaster 5000

# 故障转移的超时时间,即在这个时间内进行故障转移
sentinel failover-timeout mymaster 10000

# 在主观下线之后,如果 min-slaves-to-write 为真,Sentinel 将拒绝执行写命令
sentinel min-slaves-to-write mymaster 1

# 在主观下线之后,如果 min-slaves-max-lag 为真,则将拒绝执行写命令
sentinel min-slaves-max-lag mymaster 10

# 这个选项定义了如果 master 被判断为主观下线的次数达到了给定值,就会将 master 标记为客观下线
sentinel parallel-syncs mymaster 1

# Sentinel 记录所有事件的日志级别,可选值包括 debug、verbose、notice、warning
loglevel notice

# Sentinel 日志文件路径
logfile "sentinel6382.log"

bug &#8203;

  • 雪花Id(snowflake)主键(Long) ,前端丢失精度 image-20240202004616832

image-20240204195017533

面试 &#8203;

  • 自我介绍300字左右
  • 各个微服务由几个节点,一般大于等于2。通过负载均衡算法均匀分布到各个节点
  • 项目团队有几个?一个项目组中的成员:4后2前2测1或2产品.
  • 项目经理就是管理项目进度的
  • 你遇到哪些影响深刻的问题,怎么解决的
  • 最有成就感的事情
  • 对我们公司了解多少,为什么投递?公司业务不错,有前景
  • 问面试官问题:多久发一次版,问技术栈,这次面试有哪些提高的地方,技术趋势
  • 交付给甲方,还没有上线