hashcode

前言

在 Java 的 Object 类中有一个方法:

1
public native int hashCode();

根据这个方法的声明可知,该方法返回一个 int 类型的数值,并且是本地方法,因此在 Object 类中并没有给出具体的实现。

Read more

Sdkman 管理 JDK 版本

前记

JDK 版本越来越多,老是手动下载改环境变量很麻烦。

偶然看到 Sdkman:The Software Development Kit Manager。

它可以管理各种 kit:Ant、Java、Gradle、Maven、Springboot-cli、Groovy、Kotlin、Scala。

Read more

常用数据结构

常用数据结构

名称底层结构线程安全有序值唯一
LinkedList双向链表x不唯一
ArrayList数组x不唯一
Vector数组不唯一
HashTable数组+链表x不为空
HashSet数组+链表xx唯一
TreeSet红黑树x唯一
HashMap数组+链表/红黑树xx不唯一
TreeMap红黑树x不唯一
ConcurrentHashMap数组+链表/红黑树x不唯一

四种引用和使用场景

强引用(StrongReference)

如果一个对象具有强引用,那垃圾回收器(Garbage Collection,GC)绝不会回收它。当内存空间不足,JVM 宁愿抛出 OutOfMemoryError,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。

Read more

获取 request 及其线程安全性分析

原文Spring中获取request的几种方法,及其线程安全性分析

前言

本文将介绍在使用 Spring MVC 开发中,获取 request 对象的几种方法,并讨论其线程安全性。

概述

在使用 Spring MVC 开发 Web 系统时,经常需要在处理请求时使用 request 对象。比如:获取客户端 IP 地址、请求的 URL、header 中的属性(Cookie、授权信息)、body 中的数据等。

由于在 Spring MVC 中,处理请求的 Controller、Service 等对象都是单例的,因此获取 request 对象时最需要注意的问题,便是 request 对象是否线程安全:当有大量并发请求时,能否保证不同请求/线程中使用不同的 request 对象。

Read more

JVM

Java 虚拟机(JVM)

JVM

Java 源码,经过编译器编译后生成 .class 字节码文件:

编译

Java 源码编译由以下三个过程组成:

  • 分析和输入到符号表
  • 注解处理
  • 语义分析和生成class文件

源码编译

JVM 将字节码文件翻译成特定平台下的机器码然后运行:

字节码翻译

注:编译生成的是字节码,字节码不能直接运行,必须通过 JVM 翻译成机器码才能运行。不同平台下编译生成的字节码是一样的,但是由 JVM 翻译成的机器码却不一样。

注:跨平台的是 Java 程序,不是 JVM。JVM 是用 C/C++ 开发的,不能跨平台,不同平台下需要安装不同版本的 JVM。

Read more

DO、DTO、BO、AO、VO、POJO

前记

最近写项目,凡是不属于数据表对应对象的字段的,但又是连表查询出来的,我都加在了 DO 里(贪方便),然后字段越来越多,实在不妥,然后就去了解标题的那些模型。网上大部分都是只讲概念,虽然也能看懂,但是没有例子实在不好,所以这里会写概念 + 栗子。

参考文章:

Read more

Spring OAuth2 SSO

前记

项目需要用到 Spring OAuth2 SSO,但是还没使用过,记录下来。

项目包括:
UI 站点【常规网站】:admin-ui,admin-ui2
网关【Zuul】:gateway
RESTFulAPI 服务 + 认证中心:uac
服务发现:eureka

问题:

  1. UI 站点用到的某些资源是通过 ajax 请求 uac,如果未登录认证,则无法获取,而且因为是 ajax,无法通过后端直接重定向,只能由前端识别到未登录时进行跳转登录。
  2. RESTFulAPI 是由网关 gateway 进行统一管理的,所以路由到认证中心 uac 时需要记录下请求的地址,不然无法在登录后重定向回去。
  3. admin-ui 登录后,再访问 admin-ui2 时应该能自动登录上,因为实现了 SSO 单点登录。

问题解决:

  1. 在请求是 ajax 时,只返回 Json 和未认证的 HttpState,不要返回认证中心的登录页面,之后再由前端自己根据返回的包含认证中心字段的 Json 重定向过去。
  2. 认证中心应该放在网关 gateway,这样可以更好管理用户登录认证问题,并且更易从 savedRequest 中获取请求前的地址。
  3. 注解内部应该直接实现了,具体还得看运行情况。