![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java笔试
android攻城师
专注移动开发
展开
-
java多线程两个线程交替打印0-100
思路 :利用线程的争抢锁资源实现交替打印0-100代码/** * 两个线程交替打印0-100 方式一 * 两个线程争抢锁 */public class AlternateNumDemo { private static Object object=new Object(); private static int count=0; public static void main(String[] args) { new Thread(() ->原创 2020-10-27 17:56:36 · 712 阅读 · 0 评论 -
java多线程顺序打印ABC使用newSingleThreadExecutor方式
public class NewSingleThreadExecutorABC { public static void main(String[] args) { Thread threadA = new Thread(() -> System.out.println("A")); Thread threadB = new Thread(() -> System.out.println("B")); Thread threadC = n原创 2020-10-27 17:49:56 · 266 阅读 · 0 评论 -
java多线程顺序打印ABC CountDownLatch方式
public class CountDownLatchABC { public static void main(String[] args) { CountDownLatch countDownLatchA = new CountDownLatch(1); CountDownLatch countDownLatchB = new CountDownLatch(1); CountDownLatch countDownLatchC = new Coun.原创 2020-10-27 17:48:26 · 911 阅读 · 0 评论 -
java多线程顺序打印ABC BlockingQueue方式
思路: 利用BlockingQueue的线程阻塞的特效进行顺序打印ABC代码如下public class BlockingQueueABC { public static void main(String[] args) { Thread threadA = new Thread(new Runnable() { @Override public void run() { System.out.原创 2020-10-27 17:44:01 · 245 阅读 · 0 评论 -
java多线程顺序打印ABC Join方式
/** * https://blog.csdn.net/Evankaka/article/details/80800081 * join 让当前线程执行完之后执行接下来的逻辑 */public class JoinABC { public static void main(String[] args) throws InterruptedException { Thread threadA = new Thread(new Runnable() { .原创 2020-10-27 17:41:22 · 608 阅读 · 0 评论 -
java多线程操作变量的例子乐观锁悲观锁
/** * 乐观锁悲观锁 */public class OptimismAndPessimismLock { // 线程不安全 private static int value1 = 0; //线程安全 使用乐观锁 private static AtomicInteger value2 = new AtomicInteger(0); //线程安全 使用悲观锁 private static int value3 = 0; private原创 2020-10-27 17:12:40 · 168 阅读 · 0 评论 -
java ArrayBlockQueue阻塞队列
阻塞队列的特点 就是当没有消息的时候就会进入阻塞状态/** * 阻塞队列 当消费者消费的时候若是没有消息 就会进入阻塞状态 */public class ArrayBlockingQueueDemo { public static void main(final String[] args) throws InterruptedException { ArrayBlockingQueue<Integer> arrQueue = new ArrayBlocking原创 2020-10-27 15:47:09 · 307 阅读 · 0 评论 -
java多线程AtomicBoolean使用
AtomicBoolean是Java.util.concurrent.atomic包下的原子变量,这个包里面提供了一组原子类,具有排他性 如下例子当线程thread1 进行操作的的时候thread2,thread3都不能进行操作public class AtomicDemo { public static void main(String[] args) { AtomicBoolean atomicBoolean = new AtomicBoolean(false);原创 2020-10-27 15:40:35 · 545 阅读 · 0 评论 -
LinkHashMap总结
linkHashMap继承HashMap LinkHashMap的底层维护了一个双向列表 ,重写了HashMap的 的实体类Entry 实现了双向列表,内部结构还是数组+链表 双向链表 linkHashMap和HashMap的区别 HashMap的存储和获取是无序的 LinkHashMap是有序的 (1,根据插入顺序排序,2,根据访问顺序排序(accessOrder)) LRUCache 最简单的LRUCache实现 最关键的参数是accessOrder 当为...原创 2020-07-15 10:46:46 · 2712 阅读 · 0 评论 -
LinkedList总结
底层实现是双向链表 add方法是如何添加元素的 调用add方法的时候会调用linkLast()方法 ,把last变量赋值给临时变量l,然后创建一个新的node节点信息 ,赋值给last节点 ,判断临时变量l是否为null 若为null 说明是第一个节点 fast 等于newNode,若l不为null的时候就l.next为newNode remove方法是如何删除元素的 首先先检查一下index是否越界 ,若不越界 检查节点是在前半部分还是在后半部...原创 2020-07-15 10:45:48 · 202 阅读 · 0 评论 -
ArrayList总结
ArrayList 继承关系 ArrayList构造方法 底层原理 ArrayList 封装了一个可以扩容的数组,当数据的长度大于数组的长度,数组变为原来长度的1.5倍,把老数组的数据copy到新的数组里面. 扩容的原理 扩容原理调用add方法的时候执行流程 调用remove方法执行的流程 arrayList和LinkedList对比 Arraylist特点 随机访问速度快,插入和移除的性能差 支持null元素 ...原创 2020-07-15 10:43:54 · 237 阅读 · 0 评论 -
HashMap总结
hashMap的内部结构 (java8):数组+链表+红黑树 hashmap put方法 流程 hashmap内部数组结构图 面试题 问题你知道HashMap的工作原理吗? 回答 :HashMap的底层实现是数组+链表+红黑树 ,通过put 和get方法存储和获取对象, 存储对象的时候,把key和value传递给put方法 ,他调用hashcode计算hash得到bucket的位置,然后判断table[i]是否等于null ,若是null 直接进行存储,若不是null...原创 2020-07-15 10:42:22 · 138 阅读 · 0 评论 -
java 垃圾回收机制
java 垃圾回收机制(csdn)GC回收 需要干的事情是找到垃圾 ,然后进行垃圾回收 垃圾回收算法 (六种) 引用计数法 标记整理法 标记清除法 缺点 当存在大量对象的时候,只有小部分存活的情况,耗时严重 复制搜集法 克服了标记清除法的缺点 可达性分析法 分代计数法 java内存模型 java内存 线程私有区域 程序计数器 本地方法栈 虚拟机栈 线程共享原创 2020-07-14 16:32:23 · 110 阅读 · 0 评论 -
java面试必备
技术面试: 1谈谈集合框架; 集合框架分为两大派系 |–单列集合 Coloection 接口 |–List 接口 有序的,可重复,可根据角标操作元素 |–ArrayList 底层数据结构是数组,查询速度快,增删稍慢,线程不同步的, |–LinkedList 底层数据结构是链表,增删速度快,查询稍慢原创 2015-10-23 12:38:35 · 398 阅读 · 0 评论 -
Java中String创建详解
先放一张图介绍String的图关于定义String的堆栈问题主要是参考lubiaopan的文章 String s =new String()分析堆与栈,是先定义S,还是先new string() 1. String str1 = "abc"; System.out.println(str1 == "abc"); 步骤: 1...原创 2019-04-03 00:17:08 · 235 阅读 · 0 评论 -
JAVA堆栈
参考https://www.cnblogs.com/ibelieve618/p/6380328.html原创 2019-04-03 00:43:46 · 225 阅读 · 0 评论 -
java 线程调用start()方法后,线程是不是马上执行
面试官问:线程调用start方法是立即执行了吗 ?面试者回答:线程不是马上执行的;准确来说,调用start( )方法后,线程的状态从 new 的状态 变成 “READY(就绪)”状态,而不是“RUNNING(运行中)”状态(关于线程的状态详细,可参考 java中的线程状态)。线程要等待CPU调度,不同的JVM有不同的调度算法,线程何时被调度是未知的。因此,start()方法的被调用顺序不能决...原创 2019-09-16 16:36:53 · 7986 阅读 · 0 评论 -
二分查找算法
二分查找是一种查询效率非常高的查找算法。又称折半查找。二分查找算法思想有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进行比较,每次缩小一半的查找范围,直到匹配成功。一个情景:将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过...原创 2019-09-17 09:20:59 · 285 阅读 · 0 评论 -
Java基础HashCode真正的含义
https://blog.csdn.net/SEU_Calvin/article/details/52094115?utm_source=blogxgwz1转载 2019-09-26 10:35:14 · 322 阅读 · 0 评论 -
java笔试题
注:按Java规范书写程序代码,如果你认为程序有错误,请指出,并说明程序错误原因。1.(2分) 写出程序结果 class Demo { public static void func() { try { throw new Exception(); } finally原创 2015-10-23 11:15:31 · 675 阅读 · 0 评论