Online Education Website 2022-02-06 中大型公司项目开发流程 需求评审(产品/设计/前端/后端/测试/运营) ->UI 设计 -> 开发(前端架构-> 开发/ 后端架构-> 开发) -> 前端后端联调 -> 项目提测 ->BugFix -> 回归测试 -> 运维和开发部署上线 -> 灰度发布 -> 全量发布 -> 维护和运营 需求分析和架构设计 功能需求 首页视频列表 视频详情 (自己开发) 微信扫码登录 下单微信支付 我的订单列表 (自己开发) 架构设计 前端后端分离 -> 方案:node 渲染 动静分离 -> 方案:静态资源如 HTML,js 放在 cdn 或者 nginx 服务器上 后端技术选择:IDEA + Springboot2.0 + redis4.0+ HttpClient + MySQL + ActiveMQ 消息队列 前端技术选择:HTML5 + bootstrapt + jQuery 测试要求:首页和视频详情页 qps 单机 qps 要求 2000+ 数据库设计 实体对象:矩形 属性:椭圆 关系:菱形 实体....
分布式环境中如何解决Session的问题 2020-02-11 常见的会话解决方案 粘性会话 : Sticky Session (任意节点故障引发请求重定向到其他节点的无法获取到原有 Session) 会话复制 : Session Replication (复制成本递增) 集中会话 : Centralized Session Spring Session 简化集群中的用户会话管理 无需绑定容器特定解决方案 支持的存储 Redis MongoDB JDBC Hazelcast 实现原理 通过定制的 HttpServletRequest 返回定制的 HttpSession。 SessionRepositoryRequestWrapper SessionRepositoryFilter DelegatingFilterProxy 基于 Redis 的 HttpSession 基本配置 @EnableRedisHttpSession 提供 RedisConnectionFactory 实现 AbstractHttpSessionApplicationInitializer SpringBoot 对 Spring Session 的支持....
RESTful Web Service 2020-01-28 REST REST 提供了一组架构约束(风格),当作为一个整体来应用时,强调组件交互的可伸缩性、接口的通用性、组件的独立部署、以及用来减少交互延迟、增强安全性、封装遗留系统的中间组件。 Richardson 成熟度模型 Richardson 服务成熟度模型是基于一个服务对于 URI,HTTP 和超媒体的支持,划分出服务成熟度的三个级别 + 零级(即:没有任何支持)。他以一种服务实现者容易理解的方式,将通用的架构模式映射到服务的设计。 如何实现 RESTFul Web Service 识别资源 选择合适的资源粒度 设计 URI 选择合适的 HTTP 方法和返回码 设计资源的表述 识别资源 找到领域名词:能用 CRUD 操作的名词 将资源组织为集合(即集合资源) 将资源合并为符合资源 计算或处理函数 资源粒度 站在服务端的角度,要考虑 网络效率 表述的多少 客户端的易用程度 站在客户端的角度,要考虑 可缓存性 修改频率 可变性 构建更好的 URI 使用域及子域对资源进行合理的分组或划分 在 URI 的路径部分使用斜杠分隔符 ( / ) 来表示资源之间的层次关系 在 ....
访问 Web 资源:RestTemplate 、WebClient 2020-01-26 通过 RestTemplate 访问 Web 资源 Spring Boot 中没有自动配置 RestTemplate; Spring Boot 提供了 RestTemplateBuilder:RestTemplateBuilder.build() 常用方法 GET 请求: getForObject() / getForEntity() POST 请求: postForObject() / postForEntity() PUT 请求: put() DELETE 请求: delete() 构造 URI 构造 URI: UriComponentsBuilder 构造相对于当前请求的 URI: ServletUriComponentsBuilder 构造指向 Controller 的 URI: MvcUriComponentsBuilder 示例 Coffee package geektime.spring.springbucks.customer.model; import lombok.AllArgsConstructor; import lombok.Builder; im....
Spring MVC 2020-01-20 认识 Spring MVC DispatcherServlet (核心、也是所有请求的入口) Controller:业务处理逻辑 xxxResolver:解析器 ViewResolver HandlerExceptionResolver MultipartResolver HandlerMapping:Request 与 Controller 的映射。 Spring MVC 中的常用注解 @Controller @RestController :@Controller + @RequestBody。 @RequestMapping:此 Controller 要处理哪些请求。 @GetMapping @PostMapping @PutMapping @DeleteMapping @RequestBody:请求报文体 @ResponseBody:响应报文体 @ResponseStatus:响应状态码 定义一个简单的 Controller CoffeeController package geektime.spring.springbucks.waiter.control....
AOP 打印数据访问层摘要 2020-01-15 APO核心概念 Spring AOP 常用注解 @EnableAspectJAutoProxy:开启AspectJ的支持。 @Aspect:当前类是一个切面。(需要配合@Component) @Pointcut: @Before:Advice在Join Point之前执行。 @After :不管成功或失败,只要结束就会执行。 @AfterReturning :在成功return之后执行。 @AfterThrowing :在失败return之后执行。 @Around:环绕通知。前+后 @Order:用于指定切面的执行顺序。数值越小,优先级越高。 如何打印SQL HikariCP 自身没有输出SQL的能力,需要借助P6Spy。 <dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>3.8.1</version> </dependency> Alibaba Druid 内置 SQL ....
Reactor 2020-01-15 Reactive Programming 响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。 # 传统模式下编程:a 的值在执行后被确定。 a = b + c # 响应式编程 a 的值随着 b、c 值的变化而变化。 Project Reactor Reactor是由 Pivotal 团队开发的,第四代Reactive库,用于根据Reactive Streams规范在JVM上构建非阻塞应用程序。 核心的概念 Operators - Publisher / Subscriber Nothing Happens Util You subscribe() Flux [ 0..N ] - onNext()、onComplete()、onError() Mono [ 0..1 ] - onNext()、onComplete()、onError() Backpressure Subscription onRequest()、onCancel()、onDispose() 线程调度 S....