Zhangxu's Blog.

第4周ARTS-Spring Boot的一些注解

Word count: 1,738 / Reading time: 7 min
2018/08/10 Share

A: 制定数字数组索引范围求和
R: The Golden Rule of API Design
T: Spring Boot的一些注解
S: 如何避免被洗脑

Algorithm

给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。

示例:

给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()

sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
说明:

你可以假设数组不可变。
会多次调用 sumRange 方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class NumArray {

private int[] nums = {};

public NumArray(int[] nums) {
this.nums = nums;
}

public int sumRange(int i, int j) {
int sum = 0;
for (int k=i;k<=j;k++){
sum = sum+this.nums[k];
}
return sum;
}
}

/**
* Your NumArray object will be instantiated and called as such:
* NumArray obj = new NumArray(nums);
* int param_1 = obj.sumRange(i,j);
*/

Review

分享文章:The Golden Rule of API Design

在设计API时应该考虑到使用它时的情况,并站在使用者角度编写API代码的单元测试。

Tip

总结下SpringBoot的一些注解

mybatis

依赖

1
2
3
4
5
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>

项目启动 Application 上的注解,配置 mybatis 的扫描路径

1
@MapperScan(basePackages = "com.xxx.dataobject.mapper")

@Select等中写sql语句,传入 参数/对象属性/Map的键,通过 #{categoryType}格式化至sql,@Results将查询到的字段和方法返回对象的属性映射起来。

1
2
3
4
5
6
7
8
@Select("select * from product_category where category_type=#{categoryType}")
@Results({
@Result(column = "category_name", property = "categoryName"),
@Result(column = "category_id", property = "categoryId"),
@Result(column = "category_type", property = "categoryType"),

})
ProductCategory findByCategoryType(Integer categoryType);

传入多个参数时需要使用@Param将传入参数和sql中的格式化变量对应起来。

1
2
@Update("update product_category set category_name = #{categoryName} where category_type = #{categoryType}")
int updateCategoryType(@Param("categoryName") String categoryName, @Param("categoryType") Integer categoryType);

自动配置 get/set方法

引入依赖

1
2
3
4
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

之后可以在类上面加上 @Getter@Setter注解自动配置所有成员变量对应方法,@Data是二者都配置。

加上 @Slf4j注解后可以直接以如下形式输出日志,非常方便:

1
log.warn("【登陆校验】会话过期");

SpringBoot相关

加上这两个注解的配置类,可以从 application.yml等配置文件中加载配置

1
2
@Component
@ConfigurationProperties(prefix = "some-config")

@Component@Bean配合使用,实现对某类的自动化配置,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Component
public class WechatMpConfig {

@Autowired
private WechatAccountConfig accountConfig;

@Bean
public WxMpService wxMpService(){
WxMpService wxMpService = new WxMpServiceImpl();
wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
return wxMpService;
}

@Bean
public WxMpConfigStorage wxMpConfigStorage(){
WxMpInMemoryConfigStorage wxMpConfigStorage = new WxMpInMemoryConfigStorage();
wxMpConfigStorage.setAppId(accountConfig.getMpAppId());
wxMpConfigStorage.setSecret(accountConfig.getMpAppSecret());
return wxMpConfigStorage;
}
}

@Autowired是将某个依赖注入进来的注解。

配置在执行某些类方法前后需要所执行的操作。

1
2
3
4
5
6
7
8
9
10
11
@Aspect  //类注解
@Component
@Pointcut("execution(public * com.imook.sell.controller.Seller*.*(..))"+
"&&!execution(public * com.imook.sell.controller.SellerUserController.*(..))")
public void verify(){}

@Before("verify()") //方法注解
public void doVerify(){...}

@After("verify()")
...

1
2
3
4
5
6
@RestController //RestController 返回json对象
@Controller // 返回模版文件或重定向等

@RequestMapping("/wechat") //配置整个Controller的路径
@GetMapping("/authorize") // Controller的方法注解 Get请求
@PostMapping("/create") // Controller的方法注解 Post

参数注解@Valid多用于Post请求提交表单的验证,即该参数对象的属性要通过验证,比如该参数对象的某属性加了@NotEmpty注解,那么他就不能为空。

参数注解@RequestParam是声明某参数是来自于请求的,也可对该参数设置默认值,如:

1
@RequestParam(value = "page", defaultValue = "0") Integer page

1
2
3
4
5
6
7

@Entity //映射表实体的类
@DynamicUpdate //某些字段 自动更新

@Id //字段注解 表的 ID
@GeneratedValue //字段注解 自增长
@JsonIgnore //接口返回时不返回该字段
1
2
3
4
@ControllerAdvice // 拦截异常,自定义返回内容
@ExceptionHandler(value = SellerAuthorizeException.class) //需要拦截的异常
@ExceptionHandler(value = SellException.class)
@ResponseBody //以JSON形式返回
1
@Service //服务层类注解

Share

如何避免被洗脑

最近忽然觉得自己挺容易就相信某个观点,作出不符合自己原来设想的某种行为。我认为自己是很容易被洗脑的那一类人,因此专门找了相关资料研究一下,以期之后遇事多加理性思考和分析,作出正确思考以及决策。

维基百科对洗脑的定义:透过系统性方法,有意图地向别人灌输思想,来匹配操纵者的意愿,一连串的手法与过程,称为洗脑。

查找了以下洗脑的一般手段

信息控制

  • 只提供单一信息来源,限制对信息的接触以及获取的渠道
  • 先讲一些据对正确的观点获取信任,而后再让你相信错误的观点
  • 制造稀缺资源,形成竞争,并通过掌握这种稀缺资源及其评价标准来让别人服从
  • 利用对某一突发状况的惊魂未定,这时更有可能产生服从、盲信和对权威的喜好

对于上述手段的免疫技巧:辩证的思考问题,这个观点真的是对的吗?反对的人会怎么反驳?怀疑权威–讲真话的人不一定是对的。不盲从,思考是否有何别人竞争的必要。遇事不慌,冷静思考,身正不怕影子斜。

行为干预

  • 去个体化,强调集体角色,导致个体行为被集体角色化:统一制服、齐喊口号、朗读誓言,让人处于高昂的情绪中被情绪左右。
  • 先让某人违背自己的意愿去做一些事,然后通过其做的这些事最终改变他的意愿:仪式化–强迫你做无意义的行为
  • 周围的人说一样的话,做一样的事情,而你为了融入群体不得不表现得一样,最终被洗脑。

免疫技巧:思考自己做的事是自己人格的体现,还是集体的体现?要知道,做任何非你本来意愿的事情都会最终使你改变态度。遇到只允许有一个正确的、不允许怀疑的答案,把“观点的对立”上升为“人的对立”时要小心。

人格摧毁

  • 有“先喝茶再喝酒的饭局”,请谨慎,它们是具备“硫喷妥钠效果”的神奇组合。
  • 摧毁自尊体系,摧毁诚实体系,通过一定的服从来赢得“恩惠”,最终进入“习得性无助”的状态–面对现实完全无望而且无可奈何
  • 制造极端恐惧事件来迅速改变性格。

到这一阶,基本属于丧失人身自由,任人摆布的状态,我很担心经历过这些是否还能真的不被洗脑。只能说在这个过程中,你要尽量理解对方的意图,要明白他们这样做的目的,只是为了控制你。

原文作者: 张旭

原文链接: http://jshpy.cn/ARTS/ARTS04.html

发表日期: August 10th 2018, 2:01:04 pm

版权声明: 本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

CATALOG
  1. 1. Algorithm
  2. 2. Review
  3. 3. Tip
    1. 3.1. mybatis
    2. 3.2. 自动配置 get/set方法
    3. 3.3. SpringBoot相关
  4. 4. Share
    1. 4.1. 如何避免被洗脑
      1. 4.1.1. 信息控制
      2. 4.1.2. 行为干预
      3. 4.1.3. 人格摧毁