Languages

Mar 7, 2024

Subsections of Languages

♨️JAVA

    Mar 7, 2024

    Subsections of ♨️JAVA

    Subsections of JVM Related

    AOT or JIT

    JDK 9 引入了一种新的编译模式 AOT(Ahead of Time Compilation) 。和 JIT 不同的是,这种编译模式会在程序被执行前就将其编译成机器码,属于静态编译(C、 C++,Rust,Go 等语言就是静态编译)。AOT 避免了 JIT 预热等各方面的开销,可以提高 Java 程序的启动速度,避免预热时间长。并且,AOT 还能减少内存占用和增强 Java 程序的安全性(AOT 编译后的代码不容易被反编译和修改),特别适合云原生场景。

    可以看出,AOT 的主要优势在于启动时间、内存占用和打包体积。JIT 的主要优势在于具备更高的极限处理能力,可以降低请求的最大延迟。

    https://cn.dubbo.apache.org/zh-cn/blog/2023/06/28/%e8%b5%b0%e5%90%91-native-%e5%8c%96springdubbo-aot-%e6%8a%80%e6%9c%af%e7%a4%ba%e4%be%8b%e4%b8%8e%e5%8e%9f%e7%90%86%e8%ae%b2%e8%a7%a3/

    https://mp.weixin.qq.com/s/4haTyXUmh8m-dBQaEzwDJw

    既然 AOT 这么多优点,那为什么不全部使用这种编译方式呢?

    我们前面也对比过 JIT 与 AOT,两者各有优点,只能说 AOT 更适合当下的云原生场景,对微服务架构的支持也比较友好。除此之外,AOT 编译无法支持 Java 的一些动态特性,如反射、动态代理、动态加载、JNI(Java Native Interface)等。然而,很多框架和库(如 Spring、CGLIB)都用到了这些特性。如果只使用 AOT 编译,那就没办法使用这些框架和库了,或者说需要针对性地去做适配和优化。举个例子,CGLIB 动态代理使用的是 ASM 技术,而这种技术大致原理是运行时直接在内存中生成并加载修改后的字节码文件也就是

    Mar 7, 2024

    Volatie

    Volatile是Java虚拟机提供的轻量级的同步机制(三大特性)

    保证可见性

    不保证原子性

    禁止指令重排

    Mar 7, 2024

    ♨️JAVA

      Mar 7, 2024

      Subsections of Design Pattern

      Observers

      Mar 7, 2024

      Subsections of Web Pattern

      HTTP Code

      1xx - 信息性状态码(临时响应)

      表示请求已收到,正在继续处理。平时在浏览器中很少见到。

      • 100 Continue:客户端应继续发送请求的剩余部分。通常用于 POST 或 PUT 大量数据前,先询问服务器是否愿意接收。
      • 101 Switching Protocols:客户端要求切换协议(如切换到 WebSocket),服务器已同意。

      2xx - 成功状态码(请求成功)

      表示请求已被服务器成功接收、理解并处理。

      • 200 OK最常用的成功状态码。表示请求成功,返回的响应体包含了所请求的数据(如 HTML 页面、JSON 数据等)。
      • 201 Created创建成功。通常在 POST 或 PUT 请求后,表示成功在服务器上创建了一个新资源。响应头 Location 字段通常会包含新资源的 URL。
      • 202 Accepted:请求已接受,但尚未处理完成。适用于异步任务,比如“请求已进入队列,正在处理中”。
      • 204 No Content请求成功,但响应报文中没有实体的主体部分。常用于 DELETE 请求成功,或前端只需知道操作成功而无需返回数据的 AJAX 请求。

      3xx - 重定向状态码(需要进一步操作)

      表示客户端需要执行额外的操作来完成请求,通常是重定向。

      • 301 Moved Permanently永久重定向。请求的资源已被永久移动到新的 URL。搜索引擎会更新其链接到新的地址。浏览器会缓存这个重定向
      • 302 Found临时重定向。请求的资源临时从另一个 URL 响应。搜索引擎不会更新链接。这是最常见的重定向类型,但规范要求方法不变(实际上浏览器常会改为 GET)。
      • 304 Not Modified资源未修改。用于缓存控制。当客户端拥有缓存的版本,并通过请求头(如 If-Modified-Since)询问资源是否更新时,如果资源未变,服务器会返回此状态码,告诉客户端直接使用缓存。这节省了带宽
      • 307 Temporary Redirect临时重定向(严格)。与 302 类似,但严格要求客户端不能改变原始的请求方法(例如,POST 必须仍是 POST)。比 302 更规范。

      4xx - 客户端错误状态码(请求有误)

      表示客户端可能出错,服务器无法处理请求。

      • 400 Bad Request错误的请求。服务器因为请求的语法无效而无法理解。就像一个语法错误的句子,服务器看不懂。
      • 401 Unauthorized未认证。表示请求需要用户认证。通常需要登录或提供 Token。注意,这个名字容易误解,它实际是“未认证”,而不是“未授权”。
      • 403 Forbidden禁止访问。服务器理解请求,但拒绝执行。与 401 不同,身份验证也无济于事(比如普通用户尝试访问管理员页面)。
      • 404 Not Found最著名的错误码。服务器找不到请求的资源。可能是 URL 错误,或资源已被删除。
      • 405 Method Not Allowed方法不被允许。请求行中指定的方法(GET, POST 等)不能用于请求此资源。例如,对只接受 GET 的 URL 发送了 POST 请求。
      • 408 Request Timeout请求超时。服务器等待客户端发送请求的时间过长。
      • 409 Conflict冲突。请求与服务器的当前状态冲突。常见于 PUT 请求(例如,修改文件时版本冲突)。
      • 429 Too Many Requests请求过多。客户端在给定的时间内发送了太多请求(限流)。

      5xx - 服务器错误状态码(服务器处理请求出错)

      表示服务器在处理请求时发生错误或内部故障。

      • 500 Internal Server Error最通用的服务器错误码。服务器遇到了一个未曾预料的状况,导致它无法完成对请求的处理。通常是后端代码抛出了未捕获的异常。
      • 502 Bad Gateway错误的网关。服务器作为网关或代理,从上游服务器收到了一个无效的响应。常见于 Nginx 后面的应用服务器(如 PHP-FPM)挂掉或未启动。
      • 503 Service Unavailable服务不可用。服务器当前无法处理请求(由于超载或进行停机维护)。通常,这是一个临时状态。响应头中可能包含 Retry-After 字段,告知客户端何时可以重试。
      • 504 Gateway Timeout网关超时。服务器作为网关或代理,未能及时从上游服务器收到响应。常见于网络延迟或上游服务器处理过慢。

      快速记忆表格

      状态码类别含义常见场景
      200成功请求成功正常获取网页或数据
      201成功创建成功创建新用户、新文章成功
      204成功无内容删除成功,或前端AJAX请求无需返回数据
      301重定向永久移动网站改版,旧链接永久跳转到新链接
      302重定向临时移动登录后跳回首页
      304重定向未修改使用浏览器缓存,节省流量
      400客户端错误错误请求请求参数格式错误
      401客户端错误未认证需要登录
      403客户端错误禁止访问权限不足
      404客户端错误未找到请求的URL不存在
      429客户端错误请求过多API调用频率超限
      500服务器错误内部服务器错误后端代码Bug,数据库连接失败
      502服务器错误错误网关Nginx 无法连接到后端服务
      503服务器错误服务不可用服务器维护或过载
      504服务器错误网关超时后端服务响应太慢

      希望这个列表对您有帮助!