baby sword‘s blog baby sword‘s blog
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)

zhengjian

不敢承担失去的风险,是不可能抓住梦想的
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)
  • 个人项目

  • 个人面试面经

  • 八股记忆

  • 工作积累

    • 小红书

      • 小红书实习
      • 七牛云

      • 美团

    • 工作
    • 工作积累
    • 小红书
    xugaoyi
    2023-07-16
    目录

    小红书实习

    # 目前简历

    1. 设计搭建了基于SAML协议的公司内部业务系统SSO单点登录,结合Open SAML工具实现安全的登录和注销,提升系统安全和用户体验。
    2. 负责开发和实现 OIDC 协议,并将公司员工钉钉登录用OIDC的方式接入公司内部 SSO 认证系统,提高了系统安全性和用户体验。
    3. 负责公司账户业务系统重构,双写迁移MongoDB至MySQL,提升响应速度、稳定性,无停机迁移。
    4. 对风控累积量平台 Flash 存储结构进行优化。重新设计 Flash 的存储结构和上层实现,解决原来老系统读放大的问题,使缓存 redkv 流量下降 80% 。
    5. 分析风控中哪些实体会对已经上线的策略产生影响,并设计上报至公司内部的xray平台,达到在风控中因修改出现问题时能够快速定位操作人、操作类型等。
    
    1
    2
    3
    4
    5
    1. 什么是SSO。公司内部为什么会有 sso。什么是SAML SSO,怎么设计的?
    • 什么是SSO (opens new window)

    • 当时讨论的SAML迁移方案:[SAML迁移](http://other-file-manager.oss-cn-hangzhou.aliyuncs.com/xiaohongshu/20230716200259_SAML SSO实现现状与迁移方案.pdf)

    • 其他网站对SAML的解释: authing (opens new window)

    • 开发当中有没有遇到什么问题:

    ①创建新的表sp_metadata 。创建新的rpc接口,通过thrift

    ②协议对比,构造samlResponse,对sp方无感,我们只需要修改idp方。通过预期标签和构造标签进行对比,找出相应的缺失部分(最艰难)

    ③证书错误login2和login3证书不同

    SAML中比较重要的标签

    Issuer: idp方唯一标识

    Attribute:相关属性

    ID: 与request对应的唯一标识

    Signature:验签

    1. OIDC协议是什么?和SAML有什么区别?为什么来做的OIDC。证书是怎么获得的?单点登录还有哪些协议
    • OIDC简介 (opens new window)
    • OIDC与SAML区别 (opens new window)
    • 钉钉接入OIDC
    • 所有协议 (opens new window)
    • 怎么获取证书 (opens new window)
    1. 数据库迁移

    drawio图 (opens new window)

    调研:sso重构数据层实现现状调研 (opens new window)

    方案:迁移方案、开发方案.pdf (opens new window)

    复盘:SSO重构项目复盘 (opens new window)

    ①mysql相关表

    表调研 (opens new window)

    表结构 (opens new window)

    表结构制定中遇到了哪些问题?

    • oid问题

    • mongo中为null的字段,迁移到mysql后应该是什么

    • 由于mongo表无schema限制,mysql表有schema限制,因此部分字段迁到mysql后数据会发生改变:

    ​ a. 字符类型字段,若mongo数据为null,迁移到mysql后变为 空字符串

    ​ b. 日期类型字段,若mongo数据为null,迁移到mysql后变为 CURRENT_TIMESTAMP(mysql datetime类型字段的默认值)

    • 联合索引问题,oid字段需要单独加唯一索引

    ②更改java层代码

    • 如何设计?

    最小接口(接口隔离):

    ​ ● 接口应该尽量正交

    单一职责:

    ​ ● 在设计时,接口应该(几乎)完全不与具体的数据库相关。

    db 层的重要设计目标之一是屏蔽数据在存储层的差异。

    ​ ● 在设计以及实现时,单一接口内不允许同时包含读写两种数据库操作。

    ​ ● 接口的实现应该类似 fp 的纯函数。

    写接口的调用不应引起任何除向数据库网络 IO 外的其他副作用,例如 uuid 生成,password 带 salt hash 等。

    写接口对同样的入参执行无限次应该永远发出相同的数据库写请求。

    ​ ● 尽量少或不对入参做修改。

    仅包含必要的到存储层数据类型的转换,这一转换也应是抽象的,对上层应该做到不被感知。

    ​ ● 不应与业务相关,不包含任何业务逻辑。

    ​ ● 入参的合法性,由调用方保证。

    ​ ● 异常封装为通用的业务异常。

    ​ ● 返回的复杂类型使用通用的 DTO。

    工程:

    ​ ● 保持单一写入口,对外不暴露数据库接口,保证数据写入完全可控。

    ​ ● 更新数据时尽量不要使用 upsert,存在并发同步问题。

    实际上是对比Mongo rep层新增mysql repo层

    ③dts同步

    ④增量数据同步

    1. Flash平台研发

    flash存储优化 (opens new window)

    方案设计 (opens new window)

    结果 (opens new window)

    1. 本质是日志的处理

    开发同一的xray调度接口,供业务方使用

    • 项目中有什么收获(技术、非技术)
    • 为什么想要接触更大的挑战(责任==挑战),b与c的区别
    编辑 (opens new window)
    上次更新: 2024/02/22, 14:03:19
    计算机网络
    数字人

    ← 计算机网络 数字人→

    最近更新
    01
    spark基础
    02-22
    02
    mysql读写分离和分库分表
    02-22
    03
    数据库迁移
    02-22
    更多文章>
    Theme by Vdoing | Copyright © 2019-2024 Evan Xu | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式