2 zhouzhou_98

尚未进行身份认证

我要认证

所谓的焦虑就是书读的太少,而想的又太多

等级
TA的排名 3w+

淘宝面试题

/*** 曾经的面试题:(淘宝?)* 实现一个容器,提供两个方法,add,size* 写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束** 分析下面这个程序,能完成这个功能吗?* @author mashibing*/package com.mashibing.juc.c_020_01_Interview;import java.util.ArrayList;import java.util.L...

2020-05-30 15:04:18

25. K 个一组翻转链表

关于单链表倒置。有了单链表倒置,这道题无非就是用一个循环,每次将 k 个结点取下来,倒置后再接回去,然后再取 k 个,以此循环,到了最后一组如果不足 k 个,不做处理,直接返回头结点就可以了。所以关键就是,指针指来指去,大家不晕掉就好,我做了图示,大家参考一下。为了将头结点也一般化,我们创建一个 dummy 结点,然后整个过程主要运用三个指针, tail 指针表示已经倒置后的链表的尾部,subhead 指针表示要进行倒置的子链表,toNull 指针为了将子链表从原来链表中取下来。一个 while

2020-05-27 16:59:31

138复制带随机指针的链表

链接:https://leetcode-cn.com/problems/copy-list-with-random-pointer/相似题目连接:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/思路:链表的深拷贝可以利用到HashMap,进行两次遍历,第一次进行赋初始值,第二遍对random和next值进行初始化 public Node copyRandomList(Node head) { ...

2020-05-27 16:20:21

回文链表

链接地址:https://leetcode-cn.com/problems/palindrome-linked-list/相似的题目连接:https://leetcode-cn.com/problems/palindrome-linked-list-lcci/思路:首先找到链表的中心节点,然后从中心节点的下一位开始进行翻转。然后以rHead!=null作为循环条件,lHead和rHead不断循环下去,不断比较,当出现节点比较不相等时,直接return false即可。需...

2020-05-27 15:42:41

86分割链表

链接:https://leetcode-cn.com/problems/partition-list/相似题目链接(题目几乎一模一样):https://leetcode-cn.com/problems/partition-list-lcci/思路:使用两个指针进行分割比k小的值放入A链表,其他的放入B链表,最后进行连接。注意点:最后一个rTail的next必须进行清空处理,防止后面的next仍然小于K值。像上图的5之后的2值。 public ListNode partit...

2020-05-27 14:29:40

160相交链表

链接: https://leetcode-cn.com/problems/intersection-of-two-linked-lists/相似题目连接(几乎一模一样):https://leetcode-cn.com/problems/intersection-of-two-linked-lists-lcci/https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/思路一开..

2020-05-27 14:02:43

两数相加

链接地址: https://leetcode-cn.com/problems/add-two-numbers/思路:需要考虑三个值,第一个链表的值,第二个链表的值,两个链表相加之后的进位值循环条件则为当两个表同时为空的时候才截至。具体流程为:从l1和l2取出值,判断是否为空,为空给赋值上0,否则为其对应值,创建新链表,将l1和l2对应值分别赋值给v1、v2,用sum加上v1和v2的值和进位的值(一开始进位为0),然后对sum/10,将进位求出赋值,链表的元素则进行模10得出个位赋...

2020-05-27 10:50:29

移除链表元素

链接地址:https://leetcode-cn.com/problems/remove-linked-list-elements/思路:这道题目解决起来挺简单的,重新创建一个带有虚拟头结点的新链表,然后让原有链表不断循环下去,当循环到的值与给定值不相等时,将其与新链表进行连接,否则不连接。假如删除掉4:因为创建了一个虚拟头结点0,而0又不包含在链表内部,返回的时候,返回head.next即可。代码如下:(这里提供两套解决题目的方案,一套是不加虚拟头结点,一套使用了虚拟...

2020-05-27 09:59:16

线程锁

线程锁 三个count++性能对比 package com.mashibing.juc.c_018_00_AtomicXXX; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.LongAdder; public class T02_AtomicVsSyncVsLong

2020-05-26 16:07:41

violate与线程安全

1 violate 线程可见性: 可见性是值一个线程对共享变量的修改,对于另一个线程来说是否是可以看到的。 为什么会出现这种问题呢? 我们知道,java线程通信是通过共享内存的方式进行通信的,而我们又知道,为了加快执行的速度,线程一般是不会直接操作内存的,而是操作缓存。 java线程内存模型: 实际上,线程操作的是自己的工作内存,而不会直接操作主内存。如果线程对...

2020-05-26 00:01:45

多线程与高并发基础概念与synchronized

线程基础概念与synchronized1线程、进程、纤程的基本概念(1)进程进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。(2)线程线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线...

2020-05-25 11:28:05

模拟银行开户

/** * 面试题:模拟银行账户 * 对业务写方法加锁 * 对业务读方法不加锁 * 这样行不行? * * 容易产生脏读问题(dirtyRead) */ package com.mashibing.juc.c_008; import java.util.concurrent.TimeUnit; public class Account { String nam...

2020-05-25 11:26:29

最大间距

链接:https://leetcode-cn.com/problems/maximum-gap/思路:由于现有的基于比较的排序算法基本超过O(n),所以就不能采用现有的比较算法,而又要达到线性阶的时间复杂度,我们可以使用不是基于比较的排序算法。例如桶排序、计数排序、基数排序由于使用计数排序、计数排序属于大规模消耗空间的排序算法,在这里我们使用桶排序算法。我们把 0 3 4 6 23 28 29 33 38 依次装到三个箱子中0 1 ...

2020-05-23 22:27:12

有序数组的平方

链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array/思路与LeetCode88题一样,只是稍微进行点修改因为数组是有序的,只要把负数单独摘出,平方后逆序插入新数组就可以解决问题。 1 2 3 0 0 0 2 5 6由于数组已经是排好顺序的,最末尾的元素必定时最大的,我们只要对最末尾的元素进行比较,将最末尾的元素放到最尾端,然后不断进行比较即可,而这里我们需要用到3个指针。一个指针指向nums1数组的最后一个值...

2020-05-23 14:59:37

面试16_16

链接地址:https://leetcode-cn.com/problems/sub-sort-lcci/寻找最短序列从数学的角度上来看就是寻找最后一个逆序对的位置,逆序对就是在一个顺序的数组中,出现一个不按顺序排列的值,比如 [1 3 4 2 6 8] 其中原数组原本是个从小到大排序的,其中2是不按顺序排序,2就是个逆序对从右边往左,找到最后一个变小的数字从左往右,找到最后一个变大的数字 public int[] subSort(int[] arra...

2020-05-23 10:50:08

75颜色分类

链接地址:https://leetcode-cn.com/problems/sort-colors/这道题目看起来简单,实际由于规定了各种各样的条件,不能采用传统的排序算法来做,否则报超时。实际上这道题目也是用索引指针来做,需要利用一些规律。同时,通过让红色指针不断循环下去,来进行判断,直到红色指针的索引大于紫色指针方可进行中断循环。为什么不能红色指针不能等于紫色指针呢,当出现以下这种情况:此时按照规律,红色指针的2和紫色指针的0进行交换,同时紫色指针--...

2020-05-23 10:21:38

88合并两个有序数组

刷题链接:https://leetcode-cn.com/problems/merge-sorted-array/在这里提供两套解题思路: 直接将nums1后续的值填满,调用Arrays.sort()函数直接进行排序。 使用该方法解题的关键:如何把nums2的值成功赋值到nums1的末尾呢,关注索引。首先,我们能够得到nums1的总长度nums1.length或者m+n,nums1第一个为0的值即为m,也就是说循环的起点为m。而nums2如何获取它的索引呢,首先能够获得nums1的..

2020-05-23 10:00:51

常见垃圾回收器组合参数

-XX:+UseSerialGC = Serial New (DefNew) + Serial Old 小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器 -XX:+UseParNewGC = ParNew + SerialOld 这个组合已经很少用(在某些版本中已经废弃) https://stackoverflow.com/questions/34962257/why-remove-support-for-parnewserialold-...

2020-05-22 14:34:48

常用的垃圾回收器

常用的垃圾回收器大部分资料参考:https://www.cnblogs.com/chenpt/p/9803298.html1当前常用的垃圾回收器STW:Java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互;这些现象多半是由于gc引起。SerialSerial收集器是最基本的、发展历史最悠.

2020-05-22 14:20:37

垃圾回收器算法

GC垃圾回收器算法1如何找到垃圾 引用计数 该方法实现为:给每个对象添加一个引用计数器,每当有一个地方引用它时,引用计数值就+1,当引用失效时,引用计数值就-1,任何时刻引用计数值为0的对象就可以被回收,当一个对象被垃圾收集器收集时,被它引用的对象引用计数值就-1,所以在这种方法中一个对象被垃圾收集会导致后续其他对象的垃圾收集行动。优点:简单、高效;缺点:当两个对象相互引用的时候就无法回收,导致内存泄漏。无法解决循环引用问题。(实际上没有任何对象引用,但其结果不为0)

2020-05-22 10:25:21

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。