
面试
文章平均质量分 87
猎人在吃肉
这个作者很懒,什么都没留下…
展开
-
java 面试题: new String() 会创建几个对象?
文章目录题1: new String("ab") 会创建几个对象?题2:new String("a") + new String("b") 会创建几个对象 ?题1: new String(“ab”) 会创建几个对象?public class StringNewTest { public static void main(String[] args) { String str = new String("ab"); }}javap -v StringNewTest.原创 2020-05-28 14:42:11 · 12134 阅读 · 11 评论 -
java 开发要求
要求1: 出色的文字和口头表达能力,善于沟通,做事有债任感和主动性,面对复杂业务问 题,可以从业务和技术角度推进,最终达成目标;要求2: 精通大中型网站系统系统分析、架构设计、软件实现、性能优化及系统安全,最好有百万用户给别产品技术架构经验;要求3: 熟悉前端开发技术(至少1种主流React,Vue,Angular),并有过实际项目开发经验;要求4: 掌握分布式系统架构,精通高并发、高I...转载 2020-03-04 14:04:04 · 1143 阅读 · 0 评论 -
Executor、ExecutorService 和 Executors 三者的继承关系 和 不同点
Executor,ExecutorService,Executors 最主要的区别是 Executor 是一个抽象层面的 **根接口**。ExecutorService 接口 对 Executor 接口进行了扩展,提供了返回 Future 对象,终止,关闭线程池等方法。当调用 shutDown 方法时,线程池会停止接受新的任务,但会完成正在 pending 中的任务。`Executors` 是一个工具类,类似于 `Collections` 、`Arrays` 等 。提供工厂方法来创建不同类型的线程池,比如转载 2019-02-13 15:09:07 · 2966 阅读 · 0 评论 -
CountDownLatch (倒数计数器)使用例子
CountDownLatch doneSignal = new CountDownLatch(10);public boolean await()当计数(N)大于零,当前线程将一直处于休眠状态;并一直监控N和countDown()方法。当直到countDown()方法将 N 减为0,则当前的线程进入运行状态。public void countDown()每调用一次,计数...转载 2015-03-02 23:23:05 · 2612 阅读 · 0 评论 -
CountDownLatch( 倒数计数器 )
说明CountDownLatch ( 倒数计数器)CountDownLatch doneSignal = new CountDownLatch(10);public boolean await() 当计数大于零,当前线程将一直处于休眠状态;并一直监控N和countDown()方法。 当直到countDown()将N减零为0,则当前的线程进入运行状态。public vo...转载 2015-03-02 23:16:03 · 780 阅读 · 0 评论 -
JVM之运行时数据区(方法区、堆、运行时常量池、栈、本地方法栈、程序计数器)
程序计数器程序计数器是一块较小的内存空间,他的作用可以看做是当前线程所执行的字节码的行号指示器。程序计数器是可以当做java执行(一个线程)的指示器,执行下一条指令,选择那一条路径,是否循环操作等都是依赖这个指示器来执行的java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间来实现的,在任何一个确定的时刻,一个处理器或内核都只会执行一条线程的指令,因此为了线程能够恢复到正...原创 2018-04-09 07:51:30 · 604 阅读 · 1 评论 -
java基本数据类型所占字节数
1、整型类型存储需求bit数取值范围备注byte1字节1*8-128~127-short2字节2*8-32768~32767-int4字节4*8--long8字节8*8--JAVA是采用Unicode编码。每一个字节占8位。你电脑系统应该是 32位系统,这样每个int就是 4个字节 。其中,一个字节由8个二进制位...原创 2019-02-11 17:30:41 · 11239 阅读 · 3 评论 -
Java面试题——try/catch
面试题1public class Main3 { public static void main(String[] args) { System.out.println(test1()); System.out.println("================="); System.out.println(test2()); } public static String ...原创 2019-02-11 15:52:45 · 1157 阅读 · 0 评论 -
微服务的系统架构,面试常问到的
整套开发技术栈以 SpringCloud 为主,单个微服务模块以 SpringMVC+SpringBoot/Spring+MyBatis 组合进行开发1、前端层页面 H5+thymeleaf/样式CSS3+Bootstrap/前端框架JQuery+Node|Vue等2、负载层前端访问通过Http或Https协议到达服务端的LB,可以使用 Nginx 实现反向代理、动静分离、负载均衡, L...转载 2019-01-30 15:18:55 · 981 阅读 · 0 评论 -
队列 LinkedBlockingQueue
1 apijava.util.concurrent包下的新类。LinkedBlockingQueue 就是其中之一,是一个阻塞的线程安全的队列,底层采用 链表 实现。LinkedBlockingQueue 构造的时候若没有指定大小,则默认大小为 Integer.MAX_VALUE ,当然也可以在构造函数的参数中指定大小。LinkedBlockingQueue 不接受null。添加元素的方法...转载 2019-02-15 15:34:46 · 1617 阅读 · 0 评论 -
队列和栈、JUC有界队列、 JUC无界队列的简单介绍
文章目录1、队列和栈2、有限队列2.1、SynchronousQueue:2.2、 ArrayBlockingQueue:3、 无限队列3.1、 LinkedBlockingQueue:3.2、 LinkedBlockingDeque3.3、PriorityBlockingQueue3.4、LinkedTransferQueuepublic ThreadPoolExecutor(int core...转载 2019-02-15 15:07:31 · 7125 阅读 · 0 评论 -
ThreadPoolExecutor 参数详解
1、 ThreadPoolExecutor 数据成员 private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));ctl 主要用于存储线程池的工作状态以及池中正在运行的线程数。显然要在一个整型变量存储两个数据,只能将其一分为二。其中高3bit用于存储线程池的状态,低位的29bit用于存储正在运行的线程数。线程...转载 2019-02-15 14:10:22 · 22162 阅读 · 4 评论 -
ThreadPoolTaskExecutor 使用说明
当我们需要实现并发、异步等操作时,通常都会使用到 ThreadPoolTaskExecutor,现对其使用稍作总结。配置ThreadPoolTaskExecutor 通常通过XML方式配置,或者通过Executors的工厂方法进行配置。XML方式配置代码如下:<bean id="taskExecutor" class="转载 2019-02-15 11:10:57 · 6950 阅读 · 0 评论 -
蚂蚁花呗 三面题目:红黑树+并发容器+CAS+Solr+分布式+大数据
蚂蚁花呗一面(一个小时):Java容器有哪些?哪些是同步容器,哪些是并发容器?ArrayList和LinkedList的插入和访问的时间复杂度?java反射原理, 注解原理?新生代分为几个区?使用什么算法进行垃圾回收?为什么使用这个算法?HashMap在什么情况下会扩容,或者有哪些操作会导致扩容?HashMap push方法的执行过程?HashMap检测到hash冲突后,将元素插入...转载 2018-11-20 08:49:29 · 1051 阅读 · 2 评论 -
从ConcurrentHashMap的演进看Java多线程核心技术
转载:https://blog.csdn.net/Habren/article/details/74371423线程不安全的HashMap众所周知,HashMap是非线程安全的。而HashMap的线程不安全主要体现在resize时的死循环及使用迭代器时的fast-fail上。注:本章的代码均基于JDK 1.7.0_67HashMap工作原理HashMap数据结构常用的底层数据结构主要有...转载 2018-11-15 10:00:09 · 246 阅读 · 0 评论 -
Callable 和 Runnable 的 区别(简单分析)
1、区别不同点 Callable Runnable 方法 V call() throws Exception run() 返回值 V call() 有返回值 void run() 没有返回值 异常 call() 可以抛出受检查的异常 run() 不能抛出异常 启动 1、使Thread 来包装,使用...转载 2014-12-09 10:53:44 · 6916 阅读 · 0 评论 -
CountDownLatch 和 CyclicBarrier 区别
这两天写多线程时,用到了CyclicBarrier,下意识的认为CyclicBarrier和CountDownLatch作用很像,就翻阅资料查了一下,说一下他们的区别吧CyclicBarrier 和 CountDownLatch 都位于 java.util.concurrent 这个包下 CountDownLatch CyclicBarrier 减计数方式 加计...转载 2018-04-09 23:10:23 · 729 阅读 · 2 评论 -
数据结构 —— java 单链表、双端链表、双向链表、无序链表、有序链表
文章目录链表不同链表的特点单链表(单端链表)双端链表双向链表链表上面是一个单链表的存储原理图,head为头节点,它不存放任何的数据,只是充当一个指向链表中真正存放数据的第一个节点的作用,而每个节点中都有一个next引用,指向下一个节点,就这样一节一节往下面记录,直到最后一个节点,其中的next指向null。不同链表的特点普通链表:节点类保留下一节点的引用。链表类只保留头节点的引用,只能...转载 2019-07-09 11:54:46 · 4147 阅读 · 0 评论 -
(转载)工作4年从美团、360、陌陌、百度、阿里、京东面试回来感想
文章目录美团网360陌陌百度阿里转载:https://www.toutiao.com/a6690491469221855756/这是从 今日头条上转载的面试经历 ,不知道真假。不过面试的知识点可以学习。已经凌晨2点多了,看来今天是失眠了,反正睡不着,写篇日记总结一下我最近面试经历吧。2019年5月1日办理了离职手续,离开了万通中心,也算是和我的第二个东家正式说了再见,其实还是很喜欢国贸...转载 2019-05-14 10:00:46 · 576 阅读 · 0 评论 -
支付宝中间件4面:J.U.C并发框架+RocketMQ +MyCat+锁机制+架构
一面:自我介绍擅长哪方面的技术?Java有哪些锁种类?(乐观锁&悲观锁、可重入锁&Synchronize等)比较重要的数据结构,如链表,队列,栈的基本理解及大致实现J.U.C下的常见类的使用。 ThreadPool的深入考察; BlockingQueue的使用Java内存分代模型,GC算法,JVM常见的启动参数; CMS算法的过程。volatile关键字有什么用(包...转载 2019-04-11 11:45:21 · 581 阅读 · 0 评论 -
java实现冒泡、选择、插入、快速和归并的基础排序
文章目录1、Java实现各种基础排序1.1、工具类(用于元素的比较、交换)2、冒泡排序3、选择排序4、插入排序5、快速排序6、归并排序1、Java实现各种基础排序在排序的过程中,元素的比较和交换是避免不了的。在此我们先封装个工具类,封装起来元素的 比较方法、交换方法 及 排序前后的输出。1.1、工具类(用于元素的比较、交换)/** * 封装 元素交换,元素比较 */public f...转载 2019-03-18 15:32:26 · 251 阅读 · 0 评论 -
JVM类加载机制—加载的顺序问题
文章目录1、代码2、运行结果:3、分析:1、代码package com.aop8.classload;public class Demo01 { static { System.out.println("静态代码块Demo01"); } public static void main(String[] args) { System.out.println(&a转载 2019-03-01 16:01:29 · 753 阅读 · 0 评论 -
java中 构造代码块、static代码块和局部代码块的区别
package com.aop8.classload;class StaticCode { int age; // static 代码块 static { System.out.println("111--static "); } // 构造代码块 { System.out.println("22 "); } // 构造函数 StaticCode(int age) ...转载 2019-03-01 15:51:04 · 389 阅读 · 0 评论 -
为什么不推荐通过Executors直接创建线程池
阿里发布的 Java开发手册中强制线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式。这是为什么?Executors 底层其实是使用的 ThreadPoolExecutor 的方式 创建的,但是使用的是 ThreadPoolExecutor 的默认策略,即 AbortPolicy。//默认策略 private static final Re...原创 2019-02-14 13:48:09 · 6592 阅读 · 0 评论 -
ThreadPoolExecutor 、Executors 创建线程池
ThreadPoolExecutor是 java提供的一个线程池工具类一、概述1、ThreadPoolExecutor 作为 java.util.concurrent 包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务; 2、Executors 方法提供的线程服务,都是通过参数设置来实现不同的线程池机制。 3、先来了解其线程池管理的机制,有助于正确使用,转载 2017-11-17 14:55:46 · 438 阅读 · 0 评论 -
3个线程 交替换打印,lock.newCondition()、Condition的使用例子
编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归package com.aop8.lock1;import java.util.Random;import java.util.concurrent.TimeUnit;import java.util....原创 2019-02-13 23:38:19 · 3601 阅读 · 0 评论 -
Semaphore 计数信号量的示例
Semaphore 信号量Semaphore是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号acquire(),完成操作后归还信号release()。超过阈值后,线程申请许可信号将会被阻塞。Semaphore可以用来构建一些对象池,资源池之类的,比如数据库连接池,我们也可以创建计数为1的Semaphore,将其作为一种类似互斥锁的机制,这也叫二元信号量,表示两...转载 2014-12-09 15:55:22 · 790 阅读 · 0 评论 -
Lock、ReentrantLock实现生产者,消费者的面试题
package com.aop8.proAndcum;import java.util.Random;import java.util.Vector;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock...转载 2019-02-13 18:23:36 · 1879 阅读 · 0 评论 -
Runnable、Callable、Future和FutureTask的说明
Runnable、Callable和Future的区别:一个不返回结果、一个产生结果,一个拿到结果。 Runnable Callable Future 无返回值 有返回值 拿到异步返回的结果Runnable Runnable 在java.lang包下,它是一个接口,只声明了一个run()方法:public interface Runnable { public转载 2017-12-03 17:48:10 · 533 阅读 · 0 评论 -
MySQL中 int、char 以及 varchar 的性能对比
网络上有许多似是而非的“谣言”,当然都不是恶意,绝大部分都是开发者不愿意自己主动研究,反而轻信其他人的信口之言。关于数据库的谣言也有不少,比如“int性能比char高很多”。我最近针对int、long、char、varchar进行了一次性能测试,发现它们其实并没有太大的性能差距:备注:c8=char(8), s8=varchar(8), i8=(bigint), c4=char(4), s4...转载 2018-11-02 11:59:50 · 12625 阅读 · 1 评论 -
《深入理解java虚拟机》 精华总结(面试)
文章目录一、运行时数据区域1.1 程序计数器1.2 Java虚拟机栈1.3 本地方法栈1.4 Java堆1.5 方法区1.6 运行时常量池二、hotspot虚拟机对象2.1 对象的创建2.2 对象的内存布局2.3 对象的访问定位三、OutOfMemoryError 异常3.1 Java堆溢出3.2 虚拟机栈和本地方法栈溢出3.3 方法区和运行时常量池溢出四、垃圾收集1.判断对象存活2.引用3.Fi...转载 2018-11-09 18:25:01 · 401 阅读 · 0 评论 -
ArrayList和LinkedList的大致区别
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 如图所示: ...转载 2018-04-06 08:45:31 · 284 阅读 · 0 评论 -
CyclicBarrier ( 循环栅栏 )
CyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await() 方法 进入等待的线程数。当线程数达到了最初设定的数目时,所有进入等待状态的线程被唤醒并继续执行。有限执行初始化的时候填入的构造参数runnable 。然后再唤醒所有等待线程。CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍...转载 2014-12-09 16:34:21 · 787 阅读 · 0 评论 -
mybatis 乐观锁实现,解决并发问题
比如A、B操作员同时读取一余额为1000元的账户,A操作员为该账户增加100元,B操作员同时为该账户扣除50元,A先提交,B后提交。即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。假设操作员A先更新完,操作员B后更新。转载 2018-03-04 20:31:03 · 12654 阅读 · 6 评论 -
AOP的实现原理 —— 静态代理 和 动态代理( Spring AOP)
这里的AOP指的是面向切面编程思想,而不是Spring AOP 。AOP(Aspect Orient Programming),我们一般称为面向方面(切面)编程,作为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、日志、缓存等等。AOP实现主要分为 静态代理 和 动态代理 。 - 静态代理 主要是 `AspectJ` - 动态代理 主要是 `Spring AOP`转载 2018-03-08 17:51:56 · 18958 阅读 · 7 评论 -
单例模式之饿汉和懒汉(java)
面试时,经常会问到单例模式。单例模式的两种方式: 一种是饿汉式,就是在类初始化的时候,创建对象,这种方式是线程安全的,在程序运行期间就这一个对象。另一种是懒汉式,懒汉式是在第一次使用时才创建对象,但是如果在多线程环境中要考虑线程安全问题。比较喜欢的方式:饿汉式,不用考虑线程安全问题。 怎么区分饿汉和懒汉模式? 饿汉:饿了,饥不择食,系统一运行就创建对象,不考虑太多的...原创 2018-03-08 10:06:02 · 5559 阅读 · 0 评论 -
JVM之类加载的过程(类加载子系统)
类从被加载到虚拟机内存中开始,到卸载出内存,它的生命周期包括 `加载(Loading)`、`验证(Verification)`、`准备(Preparation)`、`解析(Resolution)`、`初始化(Initialization)`、`使用(Using)`和 `卸载(Unloading)` 7个阶段。其中, 验证、准备、解析 3部分称为 `连接(Linking)` 。原创 2018-03-08 09:44:35 · 933 阅读 · 3 评论 -
国内一些比较大型的IT软件外包公司名单
这种形式经常需要开发团队各个地方各种公司到处跑,等项目完成后将开发成果交付给项目的开发团队,便可回到所在的公司继续开展项目。**在开发期间把员工不当ren,开发完毕后,没有接到下家项目的,要么被逼走,要么只发当地的最低工资。通俗点来说,就是在工作上你是属于甲方的,但是在薪酬福利方面还是属于外包公司的。找工作的同学都要看看,根据自身的情况,学历低的 、没有经验的,可以先到外包公司试试,或者不想进去的也要了解一下, 避免找工作时被坑了。根据网上的资料,整理出来的一份国内软件外包公司的名单。原创 2018-03-08 09:39:15 · 239991 阅读 · 29 评论 -
java的3种动态代理 —— jdk、 javassist、cglib动态代理
jdk自带动态代理实现javassist实现动态代理cglib实现动态代理最近想总结一下java的动态代理,动态代理有很多种实现方案,下面介绍三种最常用的动态代理方案:1.jdk 自带动态代理2.javassist 实现动态代理3.cglib 实现动态代理接口和实现类代码:package com.java.day1.dynamicproxy.one;...转载 2018-03-08 09:32:57 · 2393 阅读 · 0 评论 -
java动态代理(JDK和cglib)
代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以分为两种。1、静转载 2015-03-10 00:30:04 · 614 阅读 · 0 评论