03 2020 档案
摘要:java提供的自动垃圾收集机制大大提高了程序员的开发效率。 但是自动垃圾收集不是万能的,明确jvm的内存结构,工作机制是设计高扩展应用的基础。 也是诊断jvm运行时问题的必备技能。 我是李福春,我在准备面试,今天的题目是: jvm的内存结构是怎样的?哪些区域容易发生OOM? 答:分3部分回答,具体如
阅读全文
摘要:jvm赋能java跨平台的能力,而类加载机制是深入理解java的必要条件。 我是李福春,我在准备面试,今天的问题是: java的类加载机制是怎样的?什么是双亲委派原则? 答:java的类加载过程分为 加载,链接,初始化。加载:即从数据源(jar,class,网络)加载class文件到jvm,映射为c
阅读全文
摘要:java并发包提供的同步工具和线程池,底层是基于什么原理来设计和实现的呢?这个非常重要。 我是李福春,我在准备面试,今天的题目是: CAS和AQS是什么? 答:CAS是一系列的操作集合,获取当前值进行计算,如果当前值没有改变,表示线程没有被占用,直接更新成功,否则,进行重试或者返回成功或者失败。 他
阅读全文
摘要:java的线程池的工作队列用到了并发队列。队列一般用在生产者消费者的场景中,处理需要排队的需求。 你好,我是李福春,今天的问题是: ConcurrentLinkedQueue和LinkedBlockingQueue有什么区别? 答:都是java提供的并发安全队列,都提供了等待性的操作,take,pu
阅读全文
摘要:java提供的线程池可以简化线程管理,提高线程资源的利用率。 大家好,我是李福春,今天的题目是: Java提供了哪些线程池?如何设置合适的线程池大小? 答:java.util.concurrent包中提供了5种线程池,从简单到复杂列举如下: 一,newSingleThreadExecutor() ,
阅读全文
摘要:java.util.concurrent包提供了大量的并发工具。 大家好,我是李福春,今天的题目是: java提供的并发工具有哪些? 答:java.util.concurrent工具包中提供的工具分4大类。 一, 同步工具,CountDownLatch, CyclicBarrier , Semaph
阅读全文
摘要:死锁是并发编程的难点问题。 大家好,我是李福春,我在准备面试,今天的问题是: 死锁是如何产生的?如何定位?如何修复和避免? 答:死锁是一种特定的程序状态,一般是多线程场景下两个以上的线程互相持有对方需要的锁而处于的永久阻塞状态。 定位方法:jstack分析线程的栈信息可以定位出来; 或者使用Thre
阅读全文
摘要:线程是并发编程的基础元素,是系统调度的最小单元,现代的jvm直接对应了内核线程。为了降低并发编程的门槛,go语言引入了协程。 你好,我是李福春,我在准备面试,今天的题目是? 一个线程两次调用start()方法会发生什么? 答:线程两次调用start()方法会抛出IllegalThreadStateE
阅读全文
摘要:java并发编程是程序员基本技能。 我是李福春,我在准备面试,今天的题目是: synchronized和ReentrantLock的区别? 这两货都是java提供的同步机制,提供了互斥语义和可见性,当一个线程获得资源之后,其它竞争资源的线程必须等待或者堵塞。 区别如下: 线程安全 线程安全说的是多线
阅读全文
摘要:所有的同步场景都是基于锁。锁在并发编程中发挥重要作用。 我是李福春,我在准备面试,今天的题目是: synchronized底层是如何实现的? 答: synchronized是在底层的jvm中实现的,即c++写的,synchronized的实现是基于一对monitorenter, monitorexi
阅读全文
摘要:工欲善其事必先利其器,今天简单分享一下我的武器库。 主要包括两个方面,idea的插件;还有mac的常用软件推荐。 希望可以在编码之余,提高自己的工作效率。 idea插件 翻看了宇宙条上各种推荐的插件,实际我用下来感觉最好的插件如下。 按照优先级列举一下,好处谁用谁知道: 1, lombok, 少写了
阅读全文
摘要:那些被时间沉淀下来的最贱时间,就是设计模式,它有利于提高沟通和设计的效率和质量。 我是李福春,我在准备面试,今天的问题是: 工作中你用到了哪些设计模式? 分析: 这个问题比较open, 可以结合以往项目经历中用到的设计模式,挑选2个左右的例子出来讲解,讲讲为什么要使用设计模式,带来了哪些优点和不便。
阅读全文
摘要:掌握面向对象的原则可以提高开发,沟通的效率和质量。 我是李福春,我在准备面试,今天的问题是: 接口和抽象类有什么区别? 接口和抽象类是面向对象语言的重要设计元素。 区别如下: 下面扩展一下,面试官可能延伸的问题。 面向对象的特性 封装: 一切皆对象,对象具备成员和方法,封装了内部细节,使得具备边界,
阅读全文
摘要:文件copy是java的io部分不可忽视的内容。 我是李福春,我在准备面试,今天的问题是: zero copy是怎么回事? 操作系统的空间划分为内核态空间, 用户态空间; 内核态空间相对操作系统具备更高的权限和优先级; 用户态空间即普通用户所处空间。 zero copy指的使用类似java.nio的
阅读全文
摘要:随着分布式技术的普及和海量数据的增长,io的能力越来越重要,java提供的io模块提供了足够的扩展性来适应。 我是李福春,我在准备面试,今天的问题是: java中的io有哪几种? java中的io分3类: 1,BIO ,即同步阻塞IO,对应java.io包提供的工具;基于流模型,虽然直观,代码实现也
阅读全文
摘要:集合框架中的HashTable,Stack,以及同步包装集合在高并发场景下都非常低效,java提供了并发包应对高并发场景。 我是李福春,我在准备面试,今天的问题是? java提供了哪些并发的容器?ConcurrentHashMap如何保证线程安全? java体系中的并发容器 java体系中有如下同步
阅读全文
摘要:map是广义集合的一部分。 我是李福春,我在准备面试,今天我们来回答: HashTable,HashMap,TreeMap的区别? 共同点:都是Map的子类或者间接子类,以键值对的形式存储和操作数据。 区别如下表: | 项目 | 线程安全 | 是否支持null键值 | 使用场景 | | | | |
阅读全文
摘要:高效的管理和操作数据(数据结构)是非常重要的,java提供了对应的集合框架。 我是李福春,我在准备面试,今天的问题是: Vector,ArrayList,LinkedList有什么区别? 这3个货都是List的直接子类或者间接子类,实现的是顺序集合,都提供了add,delete,index,遍历等操
阅读全文
摘要:原始数据类型是java系统的重要组成元素。java号称一切都是对象,原始数据类型除外。 我是李福春,我在准备面试,今天我们来回答一个问题: int和Integer有什么区别? int是原始数据类型,并非对象;Integer是int的包装类型,是对象。区别是在自动装箱和自动拆箱上。 下面分开详细来讲。
阅读全文
摘要:反射和动态代理是什么? 反射是java提供的一种自省能力,可以在运行时创建类的实例,访问成员变量,方法。 动态代理是程序在运行时构建代理对象动态动用方法。 反射和动态代理是第三方框架进行封装的基础。 反射 程序提供的一种自省能力,可以在运行时操作类和对象。 提供的核心类如下: Class: 获取类的
阅读全文
摘要:字符串是应用中最广泛的存在,不容忽视。 我是李福春,我在准备面试,今天我们一起来回答问题。 String,StringBuffer,StringBuilder的区别是什么? 非常常见的面试题,一起来发散一下。 String Java中最重要的类,提供了各种构造和管理字符串的操作;它是Immutabl
阅读全文
摘要:java中的类型除了原生类型,剩下的就是引用类型。研究引用类型对垃圾回收机制,对象的生命周期很有帮助。 我是李福春,我在准备面试,今天我们来解决一个常见的面试题。 强弱软幻象引用的区别是什么? 这4种引用的区别在可达性状态的区别。 下面展开来回答。 分类说明 强引用:当对象刚刚new出来的时候,这种
阅读全文
摘要:我是李福春,我在准备面试。今天我们来回答下面的面试常见问题。 final finally finalize区别? 这三个货只是单词的写法类似,实际的使用场景相差很大。 下面一一展开分析: final final修饰类,标识类不可被继承,一定程度保证了提供出去的类的平台安全性; final修饰方法,标
阅读全文
摘要:世界上不存在永远不出错的程序。可靠的程序必须处理好意外情况。java的异常处理机制降低了编写可靠程序的门槛。当系统运行变慢,排查发生最频繁的Excetion可以作为一种调优手段。那么: Exception和Error有什么区别? 我是李福春,我在准备面试。通过本篇,你可以学到下图的知识点。 Java
阅读全文
摘要:我是李福春,我为面试做准备。今天回答第一个问题。 java平台简要介绍?java是解释执行的吗? java平台 java平台基于jvm具备write once,run everywhere的跨平台能力;具备自动垃圾回收;具有无所不能的生态圈,比如spring,大数据,搜索,maven等; java语
阅读全文
摘要:中台如何交付呢? 首先得立项,然后是建立组织,确定研发流程,然后是规划长期的运营机制和中台的治理和演进机制。 我是李福春,今天我们来研究一下如何进行中台的交付。你可以学到如下图的知识点。 立项 项目要交付,前提是立项,立项的基础是输出设计。 中台的设计前面已经详细梳理过了:即通过业务梳理识别出了中台
阅读全文
摘要:我们为什么要使用数据库的事务呢?使用事务有什么缺点呢? 使用原因:保持数据的匹配和一致性。缺点: 并发操作中过度使用事务影响性能,因为事务用到了锁技术。 我是李福春,今天我们来复习一下事务的特性。你可以收获下图中的知识点。 下面我们发散一下。 事务特性 原子性: 要么全部成功要么全部失败一致性: 保
阅读全文
摘要:承接上文 通过discovery和define完成了第一轮企业级别的发散和收敛。 即:站在企业的高度,基于企业愿景和内外部环境,通过战略分解和现状调研,应用企业架构的方法确定了最终的平台型企业架构,并确定了需要哪些中台,以及建设先后的问题。 中台的设计阶段:进行第二轮的发散和收敛,站在一个中台产品的
阅读全文
摘要:并发是一个难题,但是可以通过使用强力简单的抽象来显著的简化,为了简化问题,guava扩展了Future接口,即 ListenableFuture (可以监听的Future)。我强烈建议你在你的所有代码里使用ListenableFuture去替代Future,原因如下: 很多的Futures 类的方法
阅读全文
摘要:背景 java程序员一般写的是后端服务是JavaWeb类型的项目,主要包括Http接口和dubbo接口,Http接口一般采用的rest风格,那么如何快速的对rest接口在第三方的测试框架上进行测试呢? rest assured框架是一个不错的工具。好比军人的三棱军刺,如上图。 使用之前,需要熟悉一下
阅读全文
摘要:程序开发技术学习方法论 软件研发行业,新技术的出现日新月异,如何高效的学习,保持技术先进性?基于第一性原理:即 抓住事物的本质特征,按照事物本身的规律去推导,演绎事物在各种场景下的变化规律,东西技术在业务场景中的表现。物理学,几何学,马斯克等推崇第一性原理。软件研发学习方法:建立自己的技术思维体系,
阅读全文
摘要:故事开始。 小李是一个一线的java程序员,做软件开发多年,有一天,被邀请去参加一个大厂的面试,面试前他做了各种准备,有软件原理方面的,软件设计方面的,还有软件架构方面的知识。并不断总结提炼成了一张知识图谱。想着即使不成功,也是一次不错的技术交流,至少可以知道目前大厂需要的程序员具备的技能深度和广度
阅读全文
摘要:我的潘多拉 从一个故事说起。从前,有个Java程序员非常喜欢写程序,喜欢研究源码,读英文文档。但是它在一家小公司里工作,公司的技术栈很陈旧。 单个系统代码中含有很多的xml配置,配置各种中间件的入口适配器,而不同的业务系统中都是类似的配置。启动单个系统很慢。启动依赖web组件,无法快速部署。公共组件
阅读全文