-
邮件传输需要SSL加密是因为数据在互联网上传输时容易被窃听或篡改,而SSL/TLS提供了保密性、完整性和身份验证三重保护。1.数据保密性:通过加密防止第三方读取邮件内容;2.数据完整性:确保邮件在传输中不被篡改;3.身份验证:确认连接的服务器真实可信。SMTPS与STARTTLS是两种主要的SSL配置方式,它们的区别在于加密建立的时间点和端口使用。1.SMTPS(隐式SSL)在TCP连接建立后立即进行SSL握手,使用端口465,通信全程加密;2.STARTTLS(显式SSL)先建立普通连接,随后通过命令升
-
密封类将继承控制从运行时提前至编译期,通过sealed+permits显式限定直接子类,确保穷尽性检查、统一测试与契约保障,且仅对自身可修改的代码生效。
-
首先安装JDK17并配置JAVA_HOME与Path环境变量,再选择IntelliJIDEA或VSCode安装并设置JDK路径,最后通过java-version、javac-version及编译运行HelloWorld程序验证环境是否搭建成功。
-
final修饰基本类型变量时值不可变,修饰引用类型时仅锁住引用本身而非对象内容;final方法不可重写但可重载;final类不可被继承;final字段须在构造器结束前初始化,JVM为其提供内存屏障保障。
-
Java程序默认不使用系统代理,需通过JVM参数(如-Dhttp.proxyHost、-Dhttps.proxyHost)或代码中动态创建Proxy对象来配置HTTP/HTTPS/SOCKS代理,并注意HTTPS需单独设置且依赖CONNECT方法,认证推荐使用Authenticator避免明文密码。
-
Java中byte数组转String必须显式指定编码(如UTF-8)以防乱码,而char数组转String无需编码、是安全的内存复制;反向转换时同样需注意编码一致性与Unicode代理对处理。
-
应优先通过jstat监控OU/MU持续上涨及unloaded为0定位内存泄漏,配合HeapDumpOnOutOfMemoryError生成堆转储,用MAT的DominatorTree分析RetainedHeap,重点排查ThreadLocal、静态集合及动态代理类加载器持有问题。
-
Console类仅在真实终端有效,IDE中System.console()返回null;需判空降级;Scanner无终端限制但缓冲区易出错;Console.readPassword()是唯一安全密码输入方式。
-
Method.invoke()慢主因是JVM保护性降级:访问检查、参数封装、类型擦除转换及无法充分内联;缓存Method、setAccessible(true)、改用MethodHandle或模块opens可优化。
-
Collections工具类提供安全高效的操作封装,所有方法静态调用;仅List支持sort等原地操作,需元素可比较且binarySearch前必须排序;推荐用emptyList()、singletonList()替代newArrayList();synchronizedList不保证复合操作线程安全。
-
Callable与Runnable的核心区别在于:Callable的call()方法可返回泛型结果并抛出受检异常,而Runnable的run()方法返回void且不能抛受检异常;因此Callable配合Future才能实现异步结果获取。
-
该用静态还是非静态取决于访问需求:需访问外部类实例成员则用非静态,仅用静态成员或工具功能则优先static,以避免内存泄漏、支持序列化并提升性能。
-
Arrays.asList()返回固定长度List,不可增删;因其实现类未重写add/remove,调用抛UnsupportedOperationException;基本类型数组会被整体当作单个元素,应改用包装类型或Stream处理。
-
构造方法确保对象创建时初始化完整,通过赋值、参数校验、资源准备等操作使对象处于可用状态,支持重载以适应不同初始化场景,并可通过访问修饰符控制实例化方式,提升封装性与安全性。
-
final修饰引用类型锁住的是引用本身而非对象内容:变量地址不可变,但可通过引用修改对象内部状态;要真正不可变需类自身设计配合。