Java 线程中包含编译错误进程会退出吗?

背景

开发的尽头是啥呢?超超级熟练工!

总结最近遇到的一些简单问题:

  1. Java 应用的某个线程,如果运行时依赖的 jar 不满足,线程是否会退出?进程是否会退出?
  2. Netty 实现 TCP 功能时,换行符到底用的是什么呢?
  3. 表结构设计时,预留扩展字段的好处。
  4. Kafka 兼容矩阵汇总。

运行时编译错误

开发过程中,本地测试时用环境会严格要求依赖的满足,如果缺少依赖的 class 时,可能编译都通不过。

但是,发布到服务器上的时候,外部依赖方式引用通过 -cp 类路径,如果对应依赖的包没有设置到类路径下时,应用会怎么样呢?

总结几种情况如下:

1)启动类依赖的 Jar 包缺失时,Java 应用启动时会报错,应用不会启动。

2)程序中 Jar 包缺失时,如果是多线程环境,且依赖该包的类只在某个线程中被引用的,那么它不会影响程序,进程不会退出的。

3)如果通过线程池提交任务,而任务依赖的包没被满足的话,这个任务会结束,但是线程池还在,进程还在。

4)程序运行过程中,行首的 import 语句的类找不到时,不会导致程序异常,甚至不会抛出异常来。尤其是用线程池的时候,它的 run 方法即使用 try-catch 也不会捕获到类不存在异常。

Netty 包解析换行符的作用

利用 Netty 自定义 TCP 请求解析时使用 channel.pipeline().addLast(new LineBasedFrameDecoder(65535)); 时,那么客户端发送数据必须使用换行符 \n 结尾才能被解析到。

确切地说,应该是用服务端操作系统的换行符,以下是客户端发送时的 demo ,必须以接收端的换行符结尾。

java 复制代码
String line = System.getProperty("line.separator");
ByteBuffer buf = ByteBuffer.allocate(2048);

// TODO. 待发送的数据
byte [] data = "".getBytes();
buf.put(data, 0, data.length);
buf.put(line.getBytes());            

DOM 元素 ID 命名及影响

使用 jQuery 操作 html 节点时,节点的 ID 中不能有 . ,否则会无法识别目标节点、操作无效。

建表预留扩展字段

两年前参与实现的一个模块,支持 N 种服务类型,N 最初只有 3 种,实现的时候说可能不确定。

两年过去了,支持的服务扩展到了6种,还好当初建表的时候额外创建了6个 ext1.....6 的扩展字段,需求变一点,用一个扩展字段,今年4月竟然用完了6个扩展字段,一直没动过表结构。

建表时预留扩展字段的意识来自从业的第一家企业,那时项目中几乎每个表都有至少三个 ext 字段。刚入行时比较单纯,感觉这种设计思路很好,就一直记着。这么多年,靠着面向百度开发和之前的技术积累,还能混到职场天花板的年纪,自己都有点不好意思了!

Kafka 兼容矩阵

Kafka Server 的版本不确定,那么编写 Kafka 客户端应用时,如何选择 Kafka-client 版本呢?

在 Kafka 0.10.2.0 之前,Kafka 服务器端和客户端版本之间的兼容性是"单向"的,即高版本的 broker 可以处理低版本 client 的请求。

反过来,低版本的 broker 不能处理高版本 client 的请求。由于升级client要远比升级broker简单得多,因此这个限制给很多用户带来了麻烦,甚至有很多人都不愿意去升级broker版本------毕竟无downtime的情况下正确升级Kafka服务器是个不小的挑战。

自 0.10.2.0 版本开始,社区对这个问题进行了优化,0.10.2.0 之后用户可以简单地升级client端代码到这个版本就可以很容易地实现与低版本Kafka服务器的交互了。

《客户端兼容矩阵》 项目实践发现,Java 的 Kafka 客户端,client 3.4.0 几乎可以兼容 2.x 的 Server 端。

相关推荐
wclass-zhengge29 分钟前
数据结构篇(绪论)
java·数据结构·算法
何事驚慌30 分钟前
2024/10/5 数据结构打卡
java·数据结构·算法
结衣结衣.30 分钟前
C++ 类和对象的初步介绍
java·开发语言·数据结构·c++·笔记·学习·算法
TJKFYY32 分钟前
Java.数据结构.HashSet
java·开发语言·数据结构
kylinxjd33 分钟前
spring boot发送邮件
java·spring boot·后端·发送email邮件
OLDERHARD42 分钟前
Java - MyBatis(上)
java·oracle·mybatis
杨荧43 分钟前
【JAVA开源】基于Vue和SpringBoot的旅游管理系统
java·vue.js·spring boot·spring cloud·开源·旅游
zaim13 小时前
计算机的错误计算(一百一十四)
java·c++·python·rust·go·c·多项式
hong_zc4 小时前
算法【Java】—— 二叉树的深搜
java·算法
进击的女IT5 小时前
SpringBoot上传图片实现本地存储以及实现直接上传阿里云OSS
java·spring boot·后端