![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
熊仙森
Walk slowly, it can always be far away
展开
-
为什么一到年底,部分网站就会出现日期混乱的现象。
跨年前的时候,2019.12.31号,部分网站显示2020.12.31,直接吞掉了一年的时间。当时也是有些迷糊,不过没有深究,现在看到了一个很好的解释,贴出来给大家看看。这个主要是和Java开发中常用的SimpleDateFormat类有关。SimpleDateFormatSimpleDateFormat是Java提供的一个格式化和解析日期的工具类。它允许进行格式化(日期 -> 文本...转载 2020-01-08 09:43:25 · 328 阅读 · 4 评论 -
蓝桥杯 交换瓶子 Java实现
交换瓶子有N个瓶子,编号 1 ~ N,放在架子上。比如有5个瓶子:2 1 3 5 4要求每次拿起2个瓶子,交换它们的位置。经过若干次后,使得瓶子的序号为:1 2 3 4 5对于这么简单的情况,显然,至少需要交换2次就可以复位。如果瓶子更多呢?你可以通过编程来解决。输入格式为两行:第一行: 一个正整数N(N<10000), 表示瓶子的数目第二行:N个正整数,用空格分开,...原创 2019-03-22 17:29:53 · 684 阅读 · 0 评论 -
蓝桥杯省赛Java寒假作业&&全排列Java实现
最近看蓝桥杯的题目,有好多这种数学基本方式的题目,有些题目如果可以总结出公式或者是递推公式,就会很容易就能算出结果。这种全排列的题目,如果只是填空的话,不做提前判断减少分支的话,暴力破解等个一两分钟也能算出来。要是编程的话就需要更多的判断来减少时间开销了。全排列的基本思想是:把待全排列记录分为两个部分:(1) 确定第一位一个记录(2) 剩下的所有元素所有记录的全排列就是所有可能出现在第一...原创 2019-03-16 21:38:01 · 369 阅读 · 3 评论 -
Java 堆栈 以及 SOF 和 OOM 的两个面试小问题
问:请分别写出一段堆和栈溢出的 Java 代码片段?答:代码如下。public class Test { //堆 溢出例子 OOM public void heapException() { for(;;) { ArrayList list = new ArrayList (2000); } } //栈 溢...转载 2019-02-19 16:46:11 · 347 阅读 · 0 评论 -
LeetCode 006 ZigZag Conversion
ZigZag ConversionThe string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)P A H...原创 2019-02-24 22:48:13 · 138 阅读 · 0 评论 -
Math.round()的四舍五入规则是加0.5向下取整
问:Math.round(15.5) 等于多少?Math.round(-15.5) 等于多少?答:分别等于 16 和 -15。因为四舍五入的原理是在参数上加 0.5 然后进行下取整。 所以类似的 Math.round(15.6) 计算方式为 15.6 + 0.5 = 16.1,接着向下取整数为 16;Math.round(-15.6) 计算方式为 -15.6 + 0.5 = -15.1,接着向...转载 2019-02-18 21:35:59 · 11632 阅读 · 3 评论 -
Java 中 java.lang.Void 和 void 区别
问:Java 中 java.lang.Void 和 void 有什么作用和区别?答:void 关键字表示函数没有返回结果,是 java 中的一个关键字。java.lang.Void 是一种类型,例如给 Void 引用赋值 null 的代码为 Void nil = null; 。通过 Void 类的源代码可以看到,Void 类型不可以继承与实例化。public final class Void...转载 2019-02-16 19:58:32 · 329 阅读 · 0 评论 -
Java主线程与子线程的生死存亡 && 守护线程和用户线程的区别
Java中线程分为两种类型:用户线程和守护线程。通过Thread.setDaemon(false)设置为用户线程;通过Thread.setDaemon(true)设置为守护线程。如果不设置次属性,默认为用户线程。用户线程和守护线程的区别:主线程结束后用户线程还会继续运行,JVM存活;主线程结束后守护线程和JVM的状态又下面第2条确定。如果没有用户线程,都是守护线程,那么JVM结束...原创 2019-02-15 17:11:44 · 2062 阅读 · 3 评论 -
HashMap面试夺命连环call
文章转自公众号《java编程精选》,是模拟面试的过程,逐渐深入的一个流程乙级扩展的相关问题,看了看感觉写的很好,转过来码一下。文章目录1、为什么用HashMap?2、HashMap 的工作原理是什么?3、有什么方法可以减少碰撞?4、HashMap 中 hash 函数怎么是实现的?5、拉链法导致的链表过深,为什么不用二叉查找树代替而选择红黑树?为什么不一直使用红黑树?6、说说你对红黑树的见解?7...原创 2019-01-15 22:05:41 · 1016 阅读 · 6 评论 -
浅谈 分布式 高并发 多线程的异同
相信很多人都和我一样,会认为三者是一个意思。确实,在一开始接触的时候,不少人都会将三者混淆,误以为所谓的分布式高并发的系统就是能同时供海量用户访问,而采用多线程手段不就是可以提供系统的并发能力吗?实际上,他们三个总是相伴而生,但侧重点又有不同。下面只是简单地说一下异同,先把坑都挖出来,改天挨个详细的分析一下。什么是分布式?分布式更多的一个概念,是为了解决单个物理服务器容量和性能瓶颈问题而采...原创 2019-01-15 20:31:47 · 236 阅读 · 0 评论 -
ThreadLocal小问题:与同步机制的区别及原理
啥是ThreadLocalThreadLocal 不是用来解决对象共享访问问题的,而是线程本地变量,其 set 的对象作用域为当前线程内部,生命周期伴随线程执行而终止,多个线程间不共享,切记将 ThreadLocal 理解成多线程变量副本的认知是绝对错误的,没有副本这一操作, ThreadLocal 中 set 进去的对象依然是引用方式而不是复制拷贝,所以谈不上副本,所以一般不建议 Thread...原创 2019-01-18 22:14:43 · 466 阅读 · 0 评论 -
模拟微信抢红包demo,生成随机数
经常抢红包会发现,很大的概率是在一开始得时候抢的红包越大,越靠后越小(大概率是这种情况,这是我的经验之谈,也不是一定的)。对于金额是如何确定的,我们可大概猜测是在用户提交之后就确定的数值,也可以是在用户每次点击的时候触发,确定金额。这两种方式并没有本质的区别。但是对于金额的确定方式,我猜测是用随机数生成的。 大概思路一开始的时候,随机数取值的范围较大,出现大数的可能性更大。越往后可分配...原创 2018-12-18 22:50:35 · 4543 阅读 · 0 评论 -
Java Math类方法学习记录
文章目录1 Math 类概述2 常用的数学运算方式2.1 三角函数方法2.2 指数函数方法2.3 取整数函数方法2.4取最大值、最小值、绝对值函数方法后记1 Math 类概述Math类表示数学类,它位于java.lang包中,由系统默认调用,该类中提供了众多数学函数方法,主要包括三角函数方法,指数函数方法,取整函数方法,取最大值,最小值以及绝对值函数方法,这些方法都被定义为static形式,...原创 2018-12-17 19:35:18 · 326 阅读 · 0 评论 -
蓝桥杯压缩变换Java
压缩变换小明最近在研究压缩算法。他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比。然而,要使数值很小是一个挑战。最近,小明需要压缩一些正整数的序列,这些序列的特点是,后面出现的数字很大可能是刚出现过不久的数字。对于这种特殊的序列,小明准备对序列做一个变换来减小数字的值。变换的过程如下:从左到右枚举序列,每枚举到一个数字,如果这个数字没有出现过,刚将数字变换成它的相...原创 2019-03-22 22:40:49 · 292 阅读 · 0 评论 -
11个简单的Java性能调优技巧
转自Java编程精选大多数开发人员理所当然地以为性能优化很复杂,需要大量的经验和知识。好吧,不能说这是完全错误的。优化应用程序以获得最佳性能不是一件容易的事情。但是,这并不意味着如果你不具备这些知识,就不能做任何事情。这里有11个易于遵循的建议和最佳实践可以帮助你创建一个性能良好的应用程序。大部分建议是针对Java的。但也有若干建议是与语言无关的,可以应用于所有应用程序和编程语言。在讨论专门...转载 2019-03-31 20:51:54 · 115 阅读 · 0 评论 -
final 修饰基本类型值不能变,修饰引用类型地址不能变,值可以变
大家都知道的是:用final修饰的变量必须赋初值,且是作为一个常量不能修改值修饰类的话是作为一个最终类不能被继承的修饰方法的话是不可以被重写的修饰引用类型的话地址是不能改变的我们知道JVM中,栈里面存放 方法中的局部变量(基本类型) 和 对象的引用变量,对象的引用变量指的是 使用new生成的,如类对象,数组,字符串等,都是引用变量,他们的对象会存放在堆区,在栈区存放的是他们的地址。...原创 2019-09-19 13:04:10 · 1776 阅读 · 4 评论 -
Java四种引用类型概述
Java中具有四种引用类型,按引用强度由大到小排列分别是:强引用软引用弱引用虚引用Java中垃圾回收机制在判断是否回收某个对象时,都需要依据“引用”的概念。Java中采用可达性分析的确认是否回收的算法,从一个被称为 GC Roots 的对象开始向下搜索,如果一个对象到GC Roots没有任何引用链相连时,则说明此对象不可用。在这之间对于四种引用会对应着不同的声明周期,在不同的时期被回...原创 2019-09-09 16:44:01 · 270 阅读 · 0 评论 -
内存泄漏及Java中五种内存泄漏的情况
文章转自 https://www.cnblogs.com/tiancai/p/9634332.html概念内存泄漏定义(memory leak): 一个不再被程序使用的对象或变量还在内存中占有存储空间。一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。内存溢出 out of memory : 指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据...转载 2019-08-30 16:33:36 · 540 阅读 · 2 评论 -
匿名内部类概述
匿名内部类不能定义任何静态成员、方法(内部类不能一开始就实例化,需要实例化外部类才能实例化它,外部类不是默认加载的,他只有在手动实例化之后才有内存分配,产生矛盾)。匿名内部类中的方法不能是抽象的(因为在创建匿名内部类的时候,会立即创建匿名内部类的对象。从而也可知匿名内部类必须实现它的抽象父类或者接口里包含的所有抽象方法);匿名内部类不能是public,protected,private,st...原创 2019-08-29 11:30:11 · 274 阅读 · 0 评论 -
ThreadLocal 有什么缺陷?如果线程池的线程使用ThreadLocal 会有什么问题?
ThreadLocal是什么ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不通的变量值完成操作的场景。下图为ThreadLocal的内部结构图从上面的结构图,我们已经窥见ThreadLocal的核心机制:每个Thread线程内部都有一个Map...原创 2019-07-05 11:03:25 · 10005 阅读 · 12 评论 -
Java 内存管理(堆和栈)及 垃圾回收算法
Java 内存管理(堆和栈)及 垃圾回收算法一.Jvm虚拟机内存简介1.1 Java运行时内存区1.2 线程私有的如下:1.3 线程共享的如下:二.Java 栈和堆2.1 堆栈的概念和特点2.2 栈与堆的异同2.3 举个例子另注:三.垃圾回收算法3.1 GC机制3.2 GC 流程3.3 GC算法3.4 常见小问题1: Java程序是否会出现内存泄露3.5 常见小问题2:JVM如何管理内存,分成几个...原创 2019-06-28 20:00:58 · 9732 阅读 · 0 评论 -
HashTable 和 ConCurrentHashMap 概述
HashTable底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化初始size为11,扩容:newsize = olesize*2+1计算index的方法:index = (hash & 0x7FFFFFFF) % tab.lengthCon...原创 2019-07-03 23:16:42 · 6024 阅读 · 0 评论 -
Array 和 ArrayList 、 List 以及 LinkedList 的区别 ?
下面列出了Array(数组)和ArrayList(集合)的不同点:Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。Array大小是固定的,ArrayList的大小是动态变化的。ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,...原创 2019-07-08 14:54:30 · 8427 阅读 · 0 评论 -
Java查看源代码显示 Source not found 解决
按住Ctrl+需要查询的方法或类名,然后打开 Open Declaration(或者是windows -> preferences -> java -> installedJREs,选择你的jre,点击edit,再在JRE system libraries里单机re.jar,点击source attachment)进入上图界面,选择External Location ,选择J...原创 2019-05-13 10:30:58 · 2985 阅读 · 0 评论 -
Java 类加载器 及 双亲委派模式解析
下面有关java classloader说法错误的是?正确答案: CA Java默认提供的三个ClassLoader是BootStrap ClassLoader,Extension ClassLoader,App ClassLoaderB ClassLoader使用的是双亲委托模型来搜索类的C JVM在判定两个class是否相同时,只用判断类名相同即可,和类加载器无关(错误了...原创 2019-05-12 15:59:47 · 278 阅读 · 0 评论 -
JDK,JRE,JVM区别与联系?
JDK,JRE,JVM区别与联系?JDK : Java Development ToolKit(Java开发工具包)。JRE:Java Runtime Enviroment(java运行时环境)。JVM:Java Virtual Mechine(JAVA虚拟机)。JDK : Java Development ToolKit(Java开发工具包)。JDK是整个JAVA的核心,包括了Java运行...原创 2019-05-15 16:45:27 · 179 阅读 · 0 评论 -
类变量在不设置初始值时,会进行默认值赋值
类变量在不设置初始值时,会进行默认值赋值而局部方法中声明的变量则必须进行初始化,不会进行默认值赋值。关于下列程序段的输出结果,说法正确的是:( )public class MyClass{ static int i; public static void main(String argv[]) { System.out.println(i); }}正确答案: DA...转载 2019-05-14 14:53:42 · 2371 阅读 · 0 评论 -
抽象类与接口的区别
抽象类和接口都包含可以有子类继承实现的成员,但抽象类是对根源的抽象,而接口是对动作的抽象。抽象类的功能要远超过接口,那为什么还要接口呢?这主要是由于定义抽象类的代价高。因为每个类智能继承一个类,在这个类中,必须继承或编写出其中子类的所有共性,因此,虽然接口在功能上会弱化许多,但他只是针对一个动作的描述,而且可以在一个类中同时实现多个接口,这样会降低设计的难度。抽象类与接口的区别主要有以下几点...原创 2018-12-03 17:11:00 · 164 阅读 · 0 评论 -
Java的四舍五入浅析
做题目需要需要用到double取整,不是直接强转,而是四舍五入,java提供了round函数有这个功能,但是内在的联系一搜资料有点复杂。下文转自博客园,作者链接在文末。四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么简单了。在讲解之间我们先看如下一个经典的案例:public static void main(String[] args) { ...转载 2018-12-08 14:50:23 · 780 阅读 · 0 评论 -
高并发下的HashMap(线程不安全)
高并发下的HashMapHashMap的容量是有限的。当经过多次元素插入,使得HashMap达到一定饱和度时,Key映射位置发生冲突的几率会逐渐提高。这时候,HashMap需要扩展它的长度,也就是进行Resize。影响发生Resize的因素有两个:1.CapacityHashMap的当前长度。HashMap的长度是2的幂。2.LoadFactorHashMap负载因子,默认值为0....原创 2018-11-17 18:31:06 · 2298 阅读 · 1 评论 -
Java while(scanner.hasNext())无法跳出的问题
情况说明: 该问题是在做PAT乙级1010时遇到的,我需要在键盘读入有限个数,然后两两进行计算。我一开始想的是声明一个数组,将所有读入的数字进行保存,再分别计算,但是我发现他并不会跳出我设的循环,而是一直在执行 当读入最后一个数据的时候,并不是跳出,而是阻塞在了while中,一直执行 原因: hasNext()这个方法是如果此扫描器的输入中有另...原创 2018-09-27 22:23:29 · 13949 阅读 · 6 评论 -
Java 中next()和nextLine()的区别
原理next()一定要读取到有效字符后才可以结束输入在输入有效字符之后,next()方法就会将其后输入的空格键、Tab键或Enter键等视为结束符。所以next方法不能得到带空格的字符串。而nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。即nextLine()获取的是一整行的数据。举例在控制...原创 2018-10-12 16:38:08 · 372 阅读 · 2 评论 -
手撕代码:从递归到辅助空间的创新,助广大学子喜提offer
文章目录前情概要:题目描述:题目分析及代码实现前情概要:这是一个面试阶段的手撕代码问题。可能是出题没有太深究,面试官的标准答案是递归,某位优秀的师兄拍拍脑瓜想出了辅助空间的做法,大大降低了时间和空间复杂度。赢得了众多面试官的一致好评,差点当场签约。题目描述:现有N个球,分别按照顺序标号:1~N;现在要求去除部分球,要求如下:去除所有标号为(1、22、32、42、52…)完全平方数的球体...原创 2018-09-21 17:29:58 · 225 阅读 · 0 评论 -
Java中,public class类是否可以共存
同一个java文件(就是一个后缀为java的文本)只能有一个pulic class(加public表示全局类,该类可以import到任何类内。不加public默认为保留类,只能被同一个包内的其他类引用。 )在public class 中写public class作为内部类存在可以,也可以在外部去掉public,只写class类,并不作为全局类,只在这个包内的其他类引用。public class ...原创 2018-09-24 14:54:36 · 1561 阅读 · 0 评论 -
求整数A二进制的最低位数
题目描述解决方案及分析题目描述 给出一个整数A,输出它的最低位数 比如:A= 26,它的二进制形式为:11010,最低位为10,所以应该输出2, 再比如 A=92,它的二进制为:01011100,最低位为:100,所以应输出4.输入描述 每行输入一个数字A(0 < A < 100),如果输入0,表示输入结束,并且最后输入的0不需要计...原创 2018-09-15 19:34:37 · 3262 阅读 · 0 评论 -
剑指 offer 题目分析及答案
1. 前言2. 实现 Singleton3. 数组中重复的数字4. 二维数组中的查找5. 替换空格6. 从尾到头打印链表7. 重建二叉树8. 二叉树的下一个结点9. 用两个栈实现队列10.1 斐波那契数列10.2 跳台阶10.3 矩形覆盖10.4 变态跳台阶11. 旋转数组的最小数字12. 矩阵中的路径13. 机器人的运动范围14. 剪绳子15. 二进制中 ...转载 2018-09-03 17:20:21 · 4392 阅读 · 1 评论 -
Java 虚拟机-JVM
内存模型1. 程序计数器2. Java 虚拟机栈3. 本地方法栈4. Java 堆5. 方法区6. 运行时常量池7. 直接内存垃圾收集1. 判断一个对象是否可回收1.1 引用计数1.2 可达性1.3 引用类型1.3.1 强引用1.3.2 软引用1.3.3 弱引用1.3.4 虚引用1.3 方法区的回收1.4 finalize()2. 垃圾收集...转载 2018-08-25 22:55:40 · 195 阅读 · 0 评论 -
Java 容器
概览1. List2. Set3. Queue4. Map5. Java 1.0/1.1 容器容器中的设计模式1. 迭代器模式2. 适配器模式散列源码分析1. ArraList2. Vector 与 Stack3. LinkedList4. TreeMap5. HashMap6. LinkedHashMap7. ConcurrentHashMap...转载 2018-08-25 22:17:38 · 237 阅读 · 0 评论 -
Java 基础
关键字1. final2. staticObject 通用方法1. 概览2. clone()3. equals()继承1. 访问权限2. 抽象类与接口的区别3. super()String1. String, StringBuffer and StringBuilder2. String 不可变的原因3. String.intern()基本类型...转载 2018-08-25 22:12:02 · 245 阅读 · 0 评论 -
Java 并发
使用线程1. 实现 Runnable 接口2. 实现 Callable 接口3. 继承 Tread 类4. 实现接口 vs 继承 ThreadExecutor基础线程机制1. sleep()2. yield()3. join()4. deamon线程之间的协作1. 线程通信2. 线程同步2.1 synchronized2.2 Lock2.3 Bloc...转载 2018-08-25 22:03:37 · 182 阅读 · 0 评论