<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[shine_wang的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/shine_wang</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; shine_wang]]></copyright><item><title><![CDATA[T31训练营 DAY14]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/121205310</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/121205310</guid><author>shine_wang</author><pubDate>Mon, 08 Nov 2021 12:24:27 +0800</pubDate><description><![CDATA[Spring Cloud Gateway的路由配置的功能是以Spring WebFlux中的Handler Mapping为基础实现的。Spring Cloud Gateway也是由许多的路由谓词工厂组成的。当Http Request请求进行谓词匹配。匹配成功则进行下一步处理，否则谓词失败直接返回错误信息。

Spring Cloud Gateway内置了一系列的路由谓词工厂，以便我们可以在开发中灵活的使用Gateway进行请求转发。

路由谓词工厂的作用是：符合Predicate的条件，就使用该路由的配置]]></description><category></category></item><item><title><![CDATA[T31训练营 DAY13]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/121205223</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/121205223</guid><author>shine_wang</author><pubDate>Mon, 08 Nov 2021 12:11:13 +0800</pubDate><description><![CDATA[网关提供API全托管服务，丰富的API和路由规则动态管理功能，辅助管理大规模的API，以降低管理成本和安全风险，包括路由转发、协议适配、安全认证、访问控制、熔断限流等功能。一般来说，网关对外暴露URL或者接口等路由信息。网关的核心是谓词、路由和Filter过滤器链。

Spring Cloud Gateway启动时基于Netty Server监听一个指定的端口（该端口可以通过server.port属性自定义）。当客户端发送一个请求到网关时，网关会根据一系列Predicate的匹配结果来决定访问哪个Route]]></description><category></category></item><item><title><![CDATA[T31训练营 DAY12]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/121205193</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/121205193</guid><author>shine_wang</author><pubDate>Mon, 08 Nov 2021 12:08:49 +0800</pubDate><description><![CDATA[Q：对于枚举类型，接口定义中使用int还是String，比如表示移动端系统类型：
1.使用int，0代表Android，1代表iOS，优点是不会拼写错误，缺点是不直观
2.使用String，约定使用“Android”、“iOS”，优点是直观，不容易传错，缺点是容易拼写错误、大小写不一致
A：数据库存储字段类型同样有这个问题，对于比较固定、长度较短的，建议直接使用字符串。

Q：服务端的字段为int类型，初始时客户端没有这个数据需要传空，下列方式哪种好：
1.定义一个整型值（如-1）表示空
2.传null
3]]></description><category></category></item><item><title><![CDATA[T31训练营 DAY11]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/121173720</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/121173720</guid><author>shine_wang</author><pubDate>Sat, 06 Nov 2021 10:00:00 +0800</pubDate><description><![CDATA[移动API网关在移动开发平台中的作用是统一接收前端HTTP请求，并按设置的策略转发给具体的后端服务进行处理。服务在网关中以API的形式对外提供服务，网关既是开放入口又是访问屏障，这样服务就被网关保护起来，对所有的调用者透明。主要包括以下功能：

安全信道：进行身份鉴别、标识，保证用户数据完整性和保密性，抗抵赖和防报文重放。
	访问控制：令牌和会话检查、防重复提交、防报文重放、防SQL注入和防恶意访问，能够对非法IP/UID封禁。
	限流熔断：核心业务失效快速响应，避免请求堆积，非核心业务降级处理，保证核心业]]></description><category></category></item><item><title><![CDATA[T31训练营 DAY10]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/121173662</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/121173662</guid><author>shine_wang</author><pubDate>Sat, 06 Nov 2021 01:22:54 +0800</pubDate><description><![CDATA[随着分布式微服务架构逐步落地，原本单一的系统拆分成众多独立的微服务，服务的粒度更加精细。当外部的请求访问微服务时，都会遇到以下问题：

需要对每个请求进行鉴权校验和访问控制
	如果传输协议不一致，需要转换协议
	如果调用水平扩展的微服务，需要进行负载均衡
	一旦请求流量超过系统承受的范围，需要进行限流
	接入业务流量后，如何更合理地将流量路由到合适的服务中


所以，微服务化之后系统需要统一的出入口。移动API网关作为微服务体系中的核心基础设施，是连通前后端的门户和纽带，能够很好的解决路由、协议适配及统一接]]></description><category></category></item><item><title><![CDATA[T31训练营 DAY9]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/121133323</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/121133323</guid><author>shine_wang</author><pubDate>Thu, 04 Nov 2021 01:44:28 +0800</pubDate><description><![CDATA[补充几点最近学习架构图设计的心得：

以沟通范围来确定作图边界

架构五视图
逻辑架构图：用于面向产品、运营等所有非技术人员以及管理者的沟通
约定方向系：
北 - 用户侧，请求进入方向，如客户端
南 - 基础设施，如数据库
西 - 追踪、监控
东 - 外部依赖，第三方接口

方向 - 层级 - 模块

颜色

字体

线条、线框、实线、虚线、箭头指向

开发架构：组件图、包图、类图

运行架构：协作图（时序图、状态图、活动图），可以没有严格的作图规范，反映上下游数据和逻辑流向，关注局部而不是整体

物理架构]]></description><category></category></item><item><title><![CDATA[T31训练营 DAY8]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/121083840</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/121083840</guid><author>shine_wang</author><pubDate>Tue, 02 Nov 2021 09:00:00 +0800</pubDate><description><![CDATA[JDK7引入了try-with-resources的语法，可以自动关闭在try括号内打开的实现Closeable或者AutoCloseable接口的资源。其实try-with-resource机制是一种语法糖，其底层实现原理仍然是try{}catch(){}finally{}写法，最先关闭最后打开的资源，逐个资源关闭，最先打开的资源最后关闭，先关闭的资源抛出的异常，会被后关闭的资源抛出的异常抑制（Suppressed），最后只抛出最后一个异常，可以通过getSuppressed()方法获得全部关闭连接的异常]]></description><category></category></item><item><title><![CDATA[T31训练营 DAY7]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/121073169</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/121073169</guid><author>shine_wang</author><pubDate>Mon, 01 Nov 2021 18:15:00 +0800</pubDate><description><![CDATA[Java开发手册（嵩山版） &gt; 二、异常日志 &gt; (二) 异常处理 （第30页）

不足1：

4. 【强制】捕获异常是为了处理它，不要捕获了却什么都不处理而抛弃之，如果不想处理它，请将该异常抛给它的调用者。最外层的业务使用者，必须处理异常，将其转化为用户可以理解的内容。

本条规约表述不够清晰。

什么是处理？
常见的处理方式有哪些？
什么是不想处理？

常见的异常处理方式有：
1.记录日志
2.尝试恢复
3.降级使用默认值
4.转换成上层异常类型
5.不处理、忽略
6.以上几种的组合

有些]]></description><category></category></item><item><title><![CDATA[T31训练营 DAY6]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/121072860</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/121072860</guid><author>shine_wang</author><pubDate>Mon, 01 Nov 2021 00:42:00 +0800</pubDate><description><![CDATA[【强制】不要在 finally 块中使用 return。
说明：try 块中的 return 语句执行成功后，并不马上返回，而是继续执行 finally 块中的语句，如果此处存在 return 语句，则在此直接返回，无情丢弃掉 try 块中的返回点。



进一步解释：

return语句会把返回值放到一个临时变量中，在finally中修改原变量的值并不能改变已经放入方法返回值中的变量值，而当在finally中使用return，将改变try中的return语句已经放入方法返回值中的变量值。catch同理。.]]></description><category></category></item><item><title><![CDATA[T31训练营 DAY5]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/121045971</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/121045971</guid><author>shine_wang</author><pubDate>Sat, 30 Oct 2021 18:30:00 +0800</pubDate><description><![CDATA[谈谈数据访问层框架(2)

本文延续上一篇文章，继续谈谈常见的Java数据访问层框架的优缺点。



tkMybatis

优点：对MyBatis Generator插件生成单表模板的进一步封装，解决了每次改动数据表结构后的手工同步工作，单表操作几乎无需写额外代码或配置文件。

缺点：和MyBatis Generator插件一样，提供了Criteria支持代码层面的查询条件组装，大规模使用容易造成使用不当。

推荐指数：4星，推荐替代简单的单表操作，复杂查询还是用Mapper.xml中管理



Mybat]]></description><category></category></item><item><title><![CDATA[T31训练营 DAY4]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/121045970</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/121045970</guid><author>shine_wang</author><pubDate>Sat, 30 Oct 2021 02:25:54 +0800</pubDate><description><![CDATA[谈谈数据访问层框架(1)

上一节课程中，谈及了ORM的一些规约，有同学提问对于Mybatis Plus这类自动生成SQL的Mybatis扩展如何看，本文进一步展开，谈谈常见的Java数据访问层框架。



Spring JDBCTemplate

优点：对JDBC的简单封装，易学易用

缺点：需要代码层面拼装SQL和做查询结果与对象的映射

推荐指数：3星，小型使用Spring框架开发的项目替代JDBC时推荐使用



MyBatis

优点：简单直观的数据库访问和对象映射工具，基本上看下官方文档就能上手]]></description><category></category></item><item><title><![CDATA[T31训练营 DAY3]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/121006078</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/121006078</guid><author>shine_wang</author><pubDate>Thu, 28 Oct 2021 02:45:35 +0800</pubDate><description><![CDATA[前一节课后思考：

什么是架构图，如何通过架构图清晰地表述系统的组件和决策？

4+1视图
4+1视图由Philippe Kruchten于1995年在《IEEE Software》上发表了题为《The 4+1 View Model of Architecture》的论文提出，随着RUP和UML而普及。4+1视图包括逻辑视图、开发视图、过程视图、物理视图以及把四大视图串联起来的场景。

逻辑视图：使用面向对象的分解方法，逻辑架构主要支持功能需求，也就是系统应该提供怎样的服务给用户。当采用面向对象的设计方法时]]></description><category></category></item><item><title><![CDATA[T31训练营 DAY2]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/121000809</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/121000809</guid><author>shine_wang</author><pubDate>Wed, 27 Oct 2021 20:31:08 +0800</pubDate><description><![CDATA[今天是第一次实践，课程项目的目标是构建一个类似12306的铁路订票系统，12306是公众都有使用经验的系统，2011年上线初期，常常被汹涌而来的访问量压垮，受到了公众的吐槽，但背后的逻辑的复杂性是公众无法获知的。

应该说铁路订票系统是一个业务足够复杂来实践DDD和高并发架构的好案例，如果不熟悉业务，做成简单的增删改查，未免可惜。遗憾的是，课程未提供需求参考文档，所以花了一天简单整理了一些关键的概念供项目组参考，事实上，下面所描述的概念，也仅仅是简化后的一小部分。

票价

票价计算的各种因素在业务实现上分]]></description><category></category></item><item><title><![CDATA[T31训练营 DAY1]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/120977983</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/120977983</guid><author>shine_wang</author><pubDate>Tue, 26 Oct 2021 18:37:39 +0800</pubDate><description><![CDATA[今天是31天孤尽代码规范与效能提升训练营第一课，先谈谈我报名的缘由。项目组今年进来了7名应届生，如何培训让新人能够尽快的成长，我设想开展一个实践型的业务项目来驱动，刚好和开课吧新开的孤尽班不谋而合。记得前几年在云栖大会现场与正在签售新书《码出高效》的孤尽老师有过一面之缘，所以报名取取经。

孤尽老师现任开课吧首席技术官，前阿里P8，在阿里期间任研发工程师、架构师、技术主管等角色，在大数据、高并发、研发效能等领域有着长期深耕经验，同时也是阿里巴巴代码规约主要编写者。

开班前完成了开营，孤尽老师介绍了课程的背]]></description><category></category></item><item><title><![CDATA[Ruby Conf China 2009之东拉西扯]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/83402420</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/83402420</guid><author>shine_wang</author><pubDate>Tue, 02 Jun 2009 14:00:12 +0800</pubDate><description><![CDATA[Ruby Conf China 2009回来一直很累、很忙，今天终于决定把这篇拖欠了近2周的文章写出来。我是20号下午从杭州出发到上海的，晚上住在同学的寝室，这里就从我们的聊天开始。工作再思考几个同学都是明年毕业，马上就要面临求职的问题。求职难，在经济危机下求职更难。这场源于美国的经济危机，使得历来处于IT领域高端的欧美外企收紧了招聘步伐，就连有过Google、微软实习经历的一个同学也显得有些茫然...]]></description><category></category></item><item><title><![CDATA[谁知道Google App Engine大概是怎么实现的？]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/83399447</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/83399447</guid><author>shine_wang</author><pubDate>Fri, 22 May 2009 18:15:54 +0800</pubDate><description><![CDATA[Google App Engine是一个分布式的虚拟机（语言解释器），还是仅仅是一套可伸缩的web架构？也就是说我们写的程序某个时间点最终是在某台装有python/java环境的服务器上跑还是google自己实现了python/java的分布式虚拟机？ 从文档看应该只是一套可伸缩的web架构，这样就没什么希奇了，一般web架构中数据库是最不可伸缩的,现在用bigtable替代了，不允许back-e...]]></description><category></category></item><item><title><![CDATA[重新出发]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/83373530</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/83373530</guid><author>shine_wang</author><pubDate>Mon, 20 Apr 2009 15:58:17 +0800</pubDate><description><![CDATA[经过3天的鏖战，终于在VPS上搭建成功了LLMP（Linux/Lighttpd/MySQL/PHP）环境，顺便用SaBlog-x Plus2.0搭了一个自己的独立博客(blog.eoss.cn)，争取早日能把blogjava上写的文章迁移过来。
 
对于有需要的朋友，这里推荐一下DiaVPS，本博客所在的VPS就用的是他们的服务。DiaVPS用的是美国的服务器，不需要备案，测试下来速度很棒，相...]]></description><category></category></item><item><title><![CDATA[Play with Play! - 案例]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/83330082</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/83330082</guid><author>shine_wang</author><pubDate>Mon, 05 Jan 2009 12:46:00 +0800</pubDate><description><![CDATA[abikenow 
http://www.abikenow.com

分享和搜索自行车的iPhone应用



Shigeta website
http://www.shigeta.fr







zebre
企业内部管理系统，使用了JPA 、AJAX和Google charts API等技术。 







B&amp;amp;B media website
http://www.bandbmed...]]></description><category></category></item><item><title><![CDATA[Play with Play! - 应用实例]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/83330035</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/83330035</guid><author>shine_wang</author><pubDate>Mon, 05 Jan 2009 10:28:00 +0800</pubDate><description><![CDATA[论坛
涉及JPA、页面模板、控制器、Session、Flash、自定义404/403页面、安全、Email等




下载


Blog
涉及JPA、页面模板、控制器、Session、Flash、自定义404/403页面、安全等




下载


多种模板类型
Play!支持通过调用renderXXX方法输出json、html、xml、二进制等多种回复类型，如果只是调用render()方法，Pla...]]></description><category></category></item><item><title><![CDATA[Play with Play! - Validation]]></title><link>https://blog.youkuaiyun.com/shine_wang/article/details/83330015</link><guid>https://blog.youkuaiyun.com/shine_wang/article/details/83330015</guid><author>shine_wang</author><pubDate>Mon, 05 Jan 2009 09:52:00 +0800</pubDate><description><![CDATA[目前Play!没有集成验证功能，暂时可以使用下面两个验证框架作为替代：

Hibernate Validator

OVal


Play!开发团队有实现一个类似Hibernate Validator功能的验证框架的打算。
----------
Play With Play!系列目录
http://www.blogjava.net/shinewang/archive/2008/12/25/2482...]]></description><category></category></item></channel></rss>