1.Java程序员必备基础:JDK 5-15都有哪些经典新特性
2.面试经验3-5年java后端工程师技术面面试真题详解之java基础篇(顺丰、源码字节跳动、源码建信金科等)
Java程序员必备基础:JDK 5-15都有哪些经典新特性
JDK 发布啦~ 我们一起回顾JDK 5- 的源码新特性吧,大家一起学习哈~
Java 5 新特性
1. 泛型:本质是源码参数化类型,解决不确定具体对象类型的源码问题。
2. 增强循环(for-each):简化了集合的源码lectv源码遍历。
3. 自动封箱拆箱:包装类型有:Integer,源码Double,Float,Long,Short,Character和Boolean
4. 枚举:关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的源码值可以作为常规的程序组件使用,这就是源码枚举类型。
5. 可变参数:我们在定义方法参数的源码时候不确定定义多少个,就可以定义为「可变参数」,源码它本质上是源码一个「数组」。
6. 注解:可以把注解理解为代码里的源码特殊标记,这些标记可以在编译,源码类加载,源码运行时被读取,并执行相应的处理。
7. 静态导入:通过import static类,就可以使用类里的静态变量或方法。
8. 线程并发库(JUC):JDK5 丰富了线程处理功能,java.util.concurrent包提供了以下的类、接口:
Java 6 新特性
1. Desktop类和SystemTray类:JDK 6在java.awt包下,新增了两个类。华律网站源码
2. 使用JAXB2来实现对象与XML之间的映射:JAXB,即Java Architecture for XML Binding,可以实现对象与XML之间的映射。
3. 轻量级 Http Server API:JDK 6中提供了简单的Http Server API,可以构建嵌入式Http服务器。
4. 插入式注解处理API:JDK 6提供了插入式注解处理API,可以让我们定义的注解在编译期而不是运行期生效。
5. STAX:STAX,是JDK6中一种处理XML文档的API。
6. Common Annotations:Common annotations原本是Java EE 5.0(JSR )规范的一部分。
7. Compiler API:javac编译器可以把.java的源文件编译为.class文件。
8. 对脚本语言的支持(如: ruby, groovy, javascript):JDK6增加了对脚本语言的支持。
Java 7 新特性
1. switch 支持String字符串类型。
2. try-with-resources,资源自动关闭
3. 整数类型如(byte,short,int,long)能够用二进制来表示
4. 数字常量支持下划线
5. 泛型实例化类型自动推断,即”<>”
6. 一个catch中捕获多个异常类型,用(|)分隔开
7. 增强的文件系统
8. Fork/join 框架
Java 8 新特性
1. lambada表达式
2. 函数式接口
3. 方法引用
4. 默认方法
5. Stream API
6. Optional
7. Date Time API
8. 重复注解
9. Base
. JVM的新特性
Java 9 新特性
1. java模块系统
2. 不可变集合工厂方法
3. 接口支持私有方法
4. 钻石操作符升级
5. Optional 类改进
6. 多版本兼容Jar包
7. JShell工具
8. try-with-resources的改进
9. Stream API的改进
Java 新特性
1. 局部变量类型推断
2. 不可变集合的改进
3. 并行全垃圾回收器 G1
4. 线程本地握手
5. Optional新增orElseThrow()方法
6. 其他新特性
Java 新特性
1. 字符串操作
2. 用于 Lambda 参数的局部变量语法
3. 标准化HTTP Client
4. 单个命令编译运行源代码
5. ZGC:可伸缩低延迟垃圾收集器
6. 其他一些特性
Java 新特性
1. Switch 表达式扩展(预览功能)
2. 紧凑的数据格式
3. 字符串支持transform、indent操作
4. Files.mismatch(Path, Path)
5. Teeing Collector
6. 其他特性
Java 新特性
1. Switch 表达式扩展(引入 yield 关键字)
2. 文本块升级
3. SocketAPI 重构
4. FileSystems.newFileSystem新方法
5. 增强 ZGC 释放未使用内存
6. 其他特性
Java 新特性
1. instanceof模式匹配
2. Record 类型(预览功能)
3. Switch 表达式-标准化
4. 改进 NullPointerExceptions提示信息
5. 其他特性
Java 新特性
1. EdDSA 数字签名算法
2. Sealed Classes(封闭类,预览)
3. Hidden Classes(隐藏类)
4. Remove the Nashorn JavaScript Engine
5. Reimplement the Legacy DatagramSocket API(重新实现DatagramSocket API)
6. 其他参考与感谢
面试经验3-5年java后端工程师技术面面试真题详解之java基础篇(顺丰、字节跳动、建信金科等)
这三个月面试了顺丰、字节、房产系统正版源码建信金科等公司,发现很多面试题都有重合,尤其后俩家,故列个清单供各位参考准备。
系列文章:
spring/微服务/mysql/redis篇
java虚拟机/JVM篇
1.面向对象和面向过程的区别?面向对象四大基本特性?
同样是处理问题,面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了,有点像java8的流处理,也可以理解为一个类里很多方法,不会强调要抽象成通用的功能类,如读文件用XXReader类;面向对象是分析问题中涉及哪些对象主体,有哪些属性和行为。
面向过程优点是性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源。缺点是没有面向对象易维护,易复用,易扩展。可维护性差,不易修改。qq邮箱api源码
面向对象优点是易维护,易复用,易扩展。由于面向对象由封装,继承,多态性的特性,可以设计出耦合度低的系统,使系统更加灵活,更加易于维护。缺点是性能比面向过程低。
面向对象4大特性:抽象,封装,继承,多态。
2.设计模式所遵循的原则?了解过哪些设计模式?说说具体的应用场景?
遵循以下6大原则:
了解过策略模式、适配器模式、单例模式、工厂模式、构造者模式,模板模式,观察者模式。
应用场景:
3.线程池原理?线程池的状态? 线程池拒绝策略?阻塞队列?
是一种基于池化思想管理线程的工具,用来控制运行任务的线程数量。工作原理是线程池提交任务时会先检测线程池运行状态是否为RUNNING,然后看当前工作线程数是财富投资源码否小于核心线程数,是则创建线程执行任务并把新建线程放入线程池,否则把任务放到队列中,如果队列已满,则新建线程去执行任务并放入线程池(不超过设置的最大线程数),如果线程数也满了,就根据拒绝策略做相应操作。
新建线程执行完任务会一直从队列里取任务(如果当前运行线程数大于核心线程数,则使用Queue.poll(keepAliveTime,TimeUnit)方法取,此方法会在此时间段内一直取,取不到则说明该线程可以销毁,从线程池移除)来执行
线程池的状态有:
拒绝策略有:
常见的阻塞队列有:
4.Hashmap与Hashtable区别
都是存储k-v型数据,底层都是数组加链表,负载因子也是一样,区别在于
5.ConcurrentHashMap实现原理
1.7之前,在HashMap数组加链表的基础上,引入segment分段锁,即底层是segment数组,segment里包含HashEntry数组,当进行更新操作时,key进行一次hash定位到segment,再进行hash定位到链表头部,对segment使用ReentrantLock加锁,同一时刻只有一个线程对同一个segment进行操作,保证线程安全。
1.8开始和HashMap底层实现一样,都是基于数组+链表+红黑树,更新操作时,对应数组位置上无值则通过UnSafe进行CAS设值,有值则对链表头部Node加synchronized,再进行链表插入和红黑树操作。
底层的HashEntry和Node其实是一个东西,改了个名
6.java是引用传递还是值传递?引用传递为什么是值传递?
值传递,只是对于基本数据类型,传递的是基本类型的量值的拷贝,函数中修改副本不影响原变量。对于引用类型,传递的是该引用所指向的对象在内存中的地址值的拷贝,由于指向的是同一对象地址,函数中修改副本会影响原对象。
因为把实参复制一份再传递到函数中,如果参数占用内存空间大,则拷贝对象占用内存也大,容易吃紧,所以拷贝的引用值。
7.对spring java config的理解
就是spring提供的不通过xml的方式编写spring配置,而是通过java编码的方式,如注解等,有好有坏,java编码更直白,更灵活,而且是spring发展的趋势,springboot内部也是用了很多相关注解,但是让业务代码和技术框架耦合严重,而且作为基础包依赖时,使用xml注解可以让依赖者选择性使用,比如切面类。
8.一次前端请求到后端的所有流程? 网络七层,TCP的理解
以访问一个java后端接口为例,前端根据接口url的域名进行DNS解析后得到IP地址,与服务器TCP三次握手建立连接,数据按应用层协议,如HTTP协议封装后发送,后端收到数据包后,进行拆包粘包获取完整数据包解析,按照java servlet协议会进filter,再到servlet,也就是springMVC,会根据url的路径去匹配拦截器链和@RequestMapping接口方法,走完interceptor后进行业务处理后写入输出流,前端接收后TCP四次挥手断开连接。
网络七层有:
TCP是一种面向连接的,可靠的, 基于字节流传输的通信协议。TCP 具有端口号的概念,用来标识同一个地址上的不同应用,三次握手建立连接,四次挥手断开连接,流量控制,拥塞控制。
9.对socket的理解?
官方解释是两台机器通信的端口,也称作"套接字",用于描述IP地址和端口,在java中通过它来实现网络请求的发送和应答,提供了方法用于获取输入流和输出流。
.工作经历带给你的技术成长?
开放题,每家公司遇到的技术挑战,自己用了哪些技术,有没有一些成就,对以前采用的一些技术方案现在回过头看有哪些优缺点,有没有更好的选择等(淦,顺丰二面全是问这个,让我措手不及)。
列下我的回答,仅供参考!!!
5年3家,第一家一年,其他每家2年,跳动不算太频繁,第一家就像在新手村练级,主要是熟悉开发流程,巩固基础知识,由于只有一个后端,所以干的事情比较宽泛,有一些感兴趣技术也可以在项目中尝试,可以自由发挥。第二家是团队开发,学习如何跨部门协作,业务也更复杂,对数据库设计,代码逻辑设计要求更高,由于和交易相关,月千万级订单数据带来的分表,分润逻辑改造,使用多线程处理业务,自主实现通过注解切换从库/历史库等功能给其他组使用。第三家是做大型toB项目,接触DDD和敏捷开发模式,真正的体会到了微服务的好与坏,做交付也锻炼了沟通协作能力,对项目交付流程的理解更加深刻,带过5-6人小团队,有一定管理经验。
其他方面的面试题正在整理中,都会收集到我的 面试经验专栏里,敬请期待!
说个冷知识,点下关注我的新创作就会第一时间推送给你哦~~