
Java
Java知识点和题目
努 力 小 子
憨憨一个
展开
-
Java获取当前年月日和从前或以后的年月日
【代码】Java获取当前年月日和从前或以后的年月日。原创 2022-08-30 14:07:21 · 1437 阅读 · 0 评论 -
虚拟机在 Java 堆中的对象分配、布局和访问
TLAB: 为每一个线程预先在 Eden 区分配一块儿内存,JVM 在给线程中的对象分配内存时,首先在 TLAB 分配,当对象大于 TLAB 中的剩余内存或 TLAB 内存已用尽时,再采用上述的 CAS 进行内存分配。初始化零值完成之后,虚拟机要对对象进行必要的设置,例如这个对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的 GC 分代年龄等信息。从虚拟机的视角来看,一个新的对象已经产生了,但从 Java 程序的视角来看,对象创建才刚开始, 方法还没有执行,所有的字段都还为零。...原创 2022-08-15 15:35:06 · 145 阅读 · 0 评论 -
JVM的概念、内存区域
对象一般首先在 Eden 区域分配,在一次新生代垃圾回收后,如果对象还存活,则会进入s0 或者 s1,并且对象的年龄还会加 1(Eden 区->Survivor 区后对象的初始年龄变为 1),当它的年龄增加到一定程度(默认为 15 岁),就会被晋升到老年代中。Hotspot遍历所有对象时,按照年龄从小到大对其所占用的大小进行累积,当累积的某个年龄大小超过了survivor区的一半时,取这个年龄和MaxTenuringThreshold中更小的一个值,作为新的晋升年龄阈值。...原创 2022-08-13 22:54:27 · 269 阅读 · 0 评论 -
AbstractQueuedSynchronizer——AQS框架
AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的 ReentrantLock,Semaphore,其他的诸如 ReentrantReadWriteLock,SynchronousQueue,FutureTask(jdk1.7) 等等皆是基于 AQS 的。当然,我们自己也能利用 AQS 非常轻松容易地构造出符合我们自己需求的同步器。只有一个线程能执行,如 ReentrantLock。又可分为公平锁和非公平锁。...原创 2022-08-11 16:34:01 · 188 阅读 · 0 评论 -
乐观锁与悲观锁
像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。CAS适用于写比较少的情况下(多读场景,冲突一般较少),synchronized适用于写比较多的情况下(多写场景,冲突一般较多)。但如果是多写的情况,一般会经常产生冲突,这就会导致上层应用会不断的进行retry,这样反倒是降低了性能,所以一般。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。场景),即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。...原创 2022-08-09 19:50:48 · 153 阅读 · 0 评论 -
线程池的基本概念、结构、类
这种策略会降低对于新任务提交速度,影响程序的整体性能。CPU 密集型任务(N+1): 这种任务消耗的主要是 CPU 资源,可以将线程数设置为 N(CPU 核心数)+1,比 CPU 核心数多出来的一个线程是为了防止线程偶发的缺页中断,或者其它原因导致的任务暂停而带来的影响。1. keepAliveTime :当线程池中的线程数量大于 corePoolSize 的时候,如果这时没有新任务提交,核心线程外的线程不会立即销毁,而是会等待,直到等待的时间超过了 keepAliveTime 才会被回收销毁;...原创 2022-08-08 20:48:19 · 130 阅读 · 0 评论 -
并发的基本概念,操作,容器
并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。这种方式我们称之为并发(Concurrent)。并行:当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另原创 2022-08-07 20:25:48 · 202 阅读 · 0 评论 -
双端链表LinkedList
删除:remove() ,removeFirst(),pop(): 删除头节点,removeLast(),pollLast(): 删除尾节点,removeLast()在链表为空时将抛出NoSuchElementException,而pollLast()方法返回null。getFirst() 和element() 方法将会在链表为空时,抛出异常NoSuchElementException,element()方法的内部就是使用getFirst()实现的。add(E e) 方法:将元素添加到链表尾部。...原创 2022-08-06 19:48:49 · 422 阅读 · 0 评论 -
Java动态数组——ArrayList复习
实现了 List, RandomAccess, Cloneable, java.io.Serializable 这些接口。原创 2022-08-05 19:05:40 · 167 阅读 · 0 评论 -
IO的基本概念
处理流(包装流)包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入和输出。处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。一个流对象经过其他流的多次包装,称为流的链接。OutputStream/Writer: 所有输出流的基类,OutputStream是字节输出流,OutputWriter是字符输出流。InputStream/Reader: 所有的输入流的基类,InputStream是字节输入流,InputReader是字符输入流。...原创 2022-08-05 14:47:11 · 260 阅读 · 0 评论 -
进程线程的基本概念复习
进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态,而 TIME_WAITING(超时等待) 状态相当于在等待状态的基础上增加了超时限制,比如通过 sleep(long millis) 方法或 wait(long millis) 方法可以将 Java 线程置于 TIMED WAITING 状态。,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如 CPU 时间,内存空间,文件,输入输出设备的使用权等等。线程与进程相似,但线程是一个比进程更小的执行单位。...原创 2022-08-05 11:00:19 · 115 阅读 · 0 评论 -
Exception(异常) 和 Error(错误)区别解析
对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。在Java中,错误通过Error的子类描述。原创 2022-08-01 20:14:30 · 7956 阅读 · 0 评论 -
Object 类——万类之父
Object 类是一个特殊的类,是所有类的父类。正因为有了这层关系,Object类里的通用方法(函数)都是可以被子类使用的。原创 2022-06-28 09:05:11 · 598 阅读 · 0 评论 -
堆内存和栈内存
在函数中定义的一些**基本类型的变量**和**对象的引用变量**(变量名)都在函数的**栈内存中分配**。当在一段代码块**定义一个变量**时,Java就**在栈中为这个变量分配内存空间**,**超过变量的作用域**,Java会**自动释放**掉为该**变量所分配的内存空间**,该**内存空间可以立即被另作他用**。**堆内存用来存放由new创建的对象**(包括由基本类型包装起来的类:Integer、String、Double,实际上每个基本类型都有他的包装类)和**数组**。......原创 2022-06-19 15:47:21 · 200 阅读 · 0 评论 -
成员变量与局部变量的区别
代码中的实例变量、类变量、常量都属于成员变量原创 2022-06-24 16:43:47 · 1575 阅读 · 0 评论 -
基本数据类型和对应的包装类
Integer原创 2022-06-22 10:36:38 · 459 阅读 · 0 评论 -
NullPointerException: null 报错
报错出来一个判空的内部,发现报错是因为判空用的是isEmpty。isEmpty在空的情况下返回true在不空的情况下返回false要想存在的条件下应该用!isEmpty我想要满足的条件是不为空,忘记加!了,结果内部操作都是基于存在的情况下,肯定报错啊。...原创 2022-04-03 19:58:50 · 864 阅读 · 0 评论 -
Java泛型中的通配符?
类型通配符一般是使用 ? 代替具体的类型参数。例如 List<?> 在逻辑上是 List,List 等所有 List<具体类型实参> 的父类。因为 getData() 方法的参数是 List<?> 类型的,所以 name,age,number 都可以作为这个方法的实参,这就是通配符的作用。也就是说,当我们定义一个方法如getData(List<?> data),所有满足的泛型都可以使用该方法,如下:List<String> name = .原创 2022-03-30 16:46:32 · 110 阅读 · 0 评论 -
Java的迭代器—— Iterator
定义Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。创建方式创建一个集合如 ArrayList 或HashSet,ArrayList<String> sites = new ArrayList<String>();获取迭代器,Iterator<String> it = sites.iterator();ArrayList<String> sites = ne原创 2022-03-30 16:13:07 · 1095 阅读 · 0 评论 -
Java中HashMap和HashSet的知识点汇总
目录HashMap介绍HashSet介绍HashMap的一些特点HashMap的一些重要方法HashSet的一些特点HashSet的一些方法HashMap介绍HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度。HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。HashSet介绍HashSe原创 2022-03-30 14:51:52 · 1513 阅读 · 0 评论 -
Java链表—— LinkedList
ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。链表LinkedList和动态数组ArrayList以下情况使用 ArrayList :频繁访问列表中的某一个元素。 只需要在列表末尾进行添加和删除元素操作。以下情况使用 LinkedList :你需要通过循环迭代来访问列表中的某些元素。 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。实现的接口Queue 接口可作为队列使用。List 接口可进行列表的相关操作。原创 2022-03-30 14:26:29 · 1171 阅读 · 0 评论 -
Java 动态修改的数组——ArrayList
定义ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList继承于AbstractList并且实现了多个接口。创建格式ArrayList<E> objectName =new ArrayList<>(); E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型。objectName: 对象名。和数组一样,ArrayList下标从零开始常用方法方法名原创 2022-03-30 11:54:04 · 779 阅读 · 0 评论 -
Java可改变容量大小的数组——Vector
定义Vector 类实现了一个动态数组,主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。构造方法默认的向量,默认大小为 10Vector()创建指定大小的向量Vector(int size)创建指定大小的向量,并可按指定量增加容量Vector(int size,int incr)创建一个包含集合 c 元素的向量Vector(Collection c)常用函数函数作用void add(int index, Object element原创 2022-03-29 17:36:07 · 1176 阅读 · 0 评论 -
修饰符(public/private/default/protected)
public:公共的可以修饰类、成员变量、成员方法、构造方法。public 修饰符,具有最大的访问权限,可以访问任何一个在 CLASSPATH 下的类、接口、异常等。被public修饰的成员,可以在任何一个类中被调用,不管同包或不同包。因此一般来说类的构造方法、成员方法会使用public,方便创建对象和调用方法。private:私有的可以修饰成员变量,成员方法,构造方法,不能修饰类(此处指的是外部类,内部类不加以考虑)。被private修饰的成员只能在其修饰的本类中访问,在其他类中不能调用,只允原创 2022-03-29 11:27:44 · 1766 阅读 · 0 评论 -
super 与 this 关键字
super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。this关键字:指向自己的引用。简言之,this调用自身类的方法,super调用父类的方法,而且是直系父类,父类的父类不是我的父类。...原创 2022-03-29 11:05:19 · 126 阅读 · 0 评论 -
Java异常处理——try-with-resource 语法糖
基本结构try (resource declaration) { // 使用的资源} catch (ExceptionType e1) { // 异常块}try —— catchtry{ // 程序代码 //这边的代码就是想要执行的代码}catch(ExceptionName e1)//ExceptionName是设定可能出现的异常{ //Catch 块 //catch块用于出现异常时进行的处理}try-catch 与 try-with-resourc原创 2022-03-28 17:57:12 · 1372 阅读 · 0 评论 -
Java中的String、StringBuffer、StringBuilder的区别和使用范围
StringString不可随便更改,把他当做常量就行。但是String可以通过函数组合或者用format创建可复用的格式化字符串。StringBuffer、StringBuilder想要多次修改String就可以使用StringBuffer、StringBuilder。把他们当做数组用。StringBuilder的速度更快但是不能同步访问,在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。...原创 2022-03-26 16:23:30 · 677 阅读 · 0 评论 -
JAVA——Map基础知识
Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象。其中,map中键可以是任意类型的对象,键对象不允许重复,每个键都有一个对应的值。值对象可以重复,并且值对象还可以是 Map 类型的。键-值对(key-value)就如同数组中的下标和值,通过通过键找值就如同下标找数组值。Map本身是一个接口,要使用Map需要通过子类进行对象实例化。声明Map<String, List> map = null;方法名称说明get(O原创 2022-03-24 18:50:35 · 3974 阅读 · 0 评论 -
idea里自动创建构造函数
1.首先创建变量public class Student { private String name; private int age;}2.鼠标右键选择Generate,意思是生成3.选择Constructor,即构造函数4.单击Select None可以生成无参数的构造函数5.也可以按住ctrl加左键单击选择参数当变蓝时说明选中了public class Student { private String name; private int age;原创 2022-03-20 17:32:29 · 5666 阅读 · 3 评论 -
表达实体和信息的规范——JavaBean
Bean的含义是为了保持向后兼容性可重复使用的而普遍遵循特定写法的Java组件。JavaBean是一个遵循特定写法的Java类,是一种Java语言编写的可重用组件,它的方法命名,构造及行为必须符合特定的约定:1、这个类必须具有一个公共的(public)无参构造函数2、所有属性私有化(private)3、私有化的属性必须通过public类型的方法(getter和setter)暴露给其他程序,并且方法的命名也必须遵循一定的命名规范。属性使用public 的get,set方法访问,也就是说设置成priva原创 2022-03-13 15:57:18 · 380 阅读 · 0 评论 -
Java基本规范
1.大小写敏感。2.类名的首字母大写,多个单词组成,每个单词首字母都大写。3.方法名小写,多个单词组成,除首字母单词其余单词首字母都大写。4.源文件名必须和类名相同。5.public static void main(String[] args) 是主方法入口,程序从主方法开始执行。6.一个方法的基本组成为:访问修饰词(如public)private:只有该类可以访问protected:该类及其子类的成员可以访问,同一个包中的类也可访问public:该类或非该类均可访问类、方法的修饰符原创 2022-02-28 11:15:45 · 975 阅读 · 0 评论 -
Java数组的基本知识点
1.数组的使用要先声明数组变量。int []a;等同于int a[];但第一种方法更普遍2.使用new操作符来创建数组int []a = new int[3];这里的a是一个引用,引用了新创建的三元素数组或在创建数组时直接赋值int []a = {1,2,3};3.声明数组不能指定长度int [5]b;这种写法就是错误的4.Java中可以使用对象数组Date []dates = new Date[3];5.数组分配空间后会隐式初始化。即不赋初值若是数值类型如int自动赋原创 2022-02-27 20:33:13 · 384 阅读 · 0 评论 -
减少if else的使用
项目中尽量不要过多使用if-else,可能导致设计复杂,代码可读性差,并且可能导致重构困难。如果可以的话执行用if而不接上else1.执行用多段if,不要接else在简单的判断中:if(a == 1) return"a";if(a == 2) return"b";return"c";由于有return直接返回,那就根本不需要else了。2.通过对前提条件的检查减少else使用先排除最大范围的非符合值再使用直接用if判断少量值。3.使用字典匹配键值对给出键和值,你就可以将值存储在Dic原创 2022-02-23 14:51:19 · 1092 阅读 · 0 评论 -
switch判断条件
项目中尽量不要使用if-elseswitch(expression){ case value : //语句 break; //可选 case value : //语句 break; //可选 default : //以上case情况皆不满足执行default的语句,default中不需要break //语句}...原创 2022-02-23 14:00:23 · 773 阅读 · 0 评论 -
Java说明注释(Doc注释)
Java说明注释以 /** 开始,以 */结束。说明注释允许你在程序中嵌入关于程序的信息。你可以使用 javadoc 工具软件来生成信息,并输出到HTML文件中,使你更加方便的记录你的程序信息。文章摘自菜鸟教程/** 之后,先说明注释的是什么内容。之后,你可以包含一个或多个各种各样的 @ 标签。@ 标签必须在一个新行的开始或者在一行的开始紧跟星号*.多个相同类型的标签应该放成一组,将它们一个接一个的放在一起。如以下例子:/** 内容声明:说明注释的内容* @author Alpha* @原创 2022-02-23 12:00:45 · 389 阅读 · 0 评论 -
java中的this什么作用
this指针指的是当前正在访问的示例对象本身。this指针最常见的是用在传参函数中,在传参赋值时解决局部变量(参数变量)和域变量同名的冲突问题。Person(String name){ this.name = name;}name是参数变量,this.name是域变量...原创 2022-02-22 15:09:31 · 347 阅读 · 0 评论 -
Java判断字符串是否是整数
character.isDigit()isDigit函数只能判断一个字符,判断字符串需要对所有字符分别判断Integer.parseInt()函数可以直接转换,Integer.parseInt()是把()里的内容转换成整数。Integer.parseInt(String)遇到一些不能被转换为整型的字符时,会抛出异常。以下示例为对输入的年月日进行判断:while(true) { try { y=Integer.parseInt(year) ;//直接转化为整数,如果不成功则报错原创 2021-04-29 12:57:23 · 3356 阅读 · 0 评论 -
eclipse无法运行 ,报错:the selection cannot be launched
原创 2021-04-23 21:40:34 · 22712 阅读 · 4 评论 -
final 字符常量——确定一个值后该值无法改动,使变量变字符常量
final double PI= 3.14;//初始化PI是3.14后,不能再次赋值,如下:PI=100;//程序会报错,因为用final初始化后不能改变。一般来说用到final后字符常量须全部大写原创 2020-08-07 11:46:42 · 363 阅读 · 0 评论 -
一些概念整理(不一定完全正确)
前端和后端以下为百科上的招聘要求:Web前端:1、精通HTML,能够书写语义合理,结构清晰,易维护的HTML结构;2、精通CSS,能够还原视觉设计,并兼容业界承认的主流浏览器;3、熟悉JavaScript,了解ECMAScript基础内容,掌握1到2种js框架,如JQuery;4、对常见的浏览器兼容问题有清晰的理解,并有可靠的解决方案;5、对性能有一定的要求,了解yahoo的性能优化建议,并可以在项目中有效实施;技术层面上前端=HTML+CSS+JAVASCRIPTWeb后端:1、精通j原创 2020-07-27 15:33:22 · 226 阅读 · 0 评论