Spring IOC 容器的依赖注入工作可以分为两个阶段。第一个阶段可以认为是构建和收集 Bean 定义的阶段,在这个阶段中,我们可以通过 xml 或者 Java 代码的方式定义一些 Bean,然后通过手动组装或者让容器基于某种规则自动扫描的形式,将这些 Bean 定义收集到 IOC 容器中。下面是以XML配置的形式来注册一些 Bean
深入分析 Session & Cookie
因为Http协议是无状态的,服务端不知道用户上一次做了什么操作或者请求了什么接口。简单来说就是浏览器发送了两次请求,服务端是无法识别这两次请求是否来自同一个用户。这也是为什么会有 Session
和 Cookie
的原因,它们的作用就是用来维持客户端与服务端的会话。更简单的说,就是让服务端知道每一个请求都是来自于哪个用户。
Spring Boot 中使用 Spring Security + JWT 构建身份认证系统
权限控制是非常常见的功能,在各种后台管理里权限控制更是重中之重。在 Spring Boot 中使用 Spring Security 构建权限系统是非常轻松和简单的。Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在 Spring 应用上下文中配置的 Bean,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
Rails 中使用安全密码
但愿你没有在数据库里直接存储明文密码!为了防治密码被窃取,数据库中存储的始终应该是某种形式的哈希值,而非明文密码。但是,Rails 3.1
之后可以利用 has_secure_password
来实现。这个 Rails
内部的机制充分考虑了密码验证和加密。它需要 model
中有一个 password_digest
字段,用来存储加密后的密码。
本地线程变量 ThreadLocal
ThreadLocal
为每个线程的中并发访问的数据提供一个副本,通过访问副本来运行业务,这样的结果是耗费了内存,单大大减少了线程同步所带来性能消耗,也减少了线程并发控制的复杂度。ThreadLocal
不能使用原子类型,只能使用 Object
类型。ThreadLocal
的使用比 synchronized
要简单得多。ThreadLocal
和 Synchonized
都用于解决多线程并发访问。但是 ThreadLocal
与 synchronized
有本质的区别。synchronized
是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问。而 ThreadLocal
为每一个线程都提供了变量的副本,使得每个线程在某一时间访问到的并不是同一个对象,这样就隔离了多个线程对数据的数据共享。而 synchronized
却正好相反,它用于在多个线程间通信时能够获得数据共享。synchronized
用于线程间的数据共享,而 ThreadLocal
则用于线程间的数据隔离。当然 ThreadLocal
并不能替代 synchronized
,它们处理不同的问题域。synchronized
用于实现同步机制,比 ThreadLocal
更加复杂。
MySQL UNION 合并结果集
UNION 用于将多个 SELECT 语句的结果合并到结果集中。第一个 SELECT 语句的列名被用作返回结果的列列名。在每个 SELECT 语句的相应位置列出的选定列应该有相同的数据类型。
Rails 中 ActiveSupport::Concern 的使用
先观察一下下面两个类
1 | # app/models/accout.rb |
MySQL 分组查询取前N条
MySQL 常用的一些函数
RAND() 函数
MySQL RAND() 函数可以被调用,产生一个在 0 和 1 之间的浮点数
1 | mysql> SELECT RAND(), RAND(), RAND(); |