![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
java
文章平均质量分 60
Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 .
Royalreairman
知者不言,言者不知
展开
-
java的浅拷贝和深拷贝
创建一个位置类 创建一个对象测试代码运行结果: 深拷贝就是要让原始对象和克隆之后的对象所具有的引用类型属性不是指向同一块堆内存,这里介绍两种实现思路。既然引用类型不能实现深拷贝,那么将每个引用类型都拆分为基本类型,分别进行浅拷贝。比如上面的例子,Person类有一个引用类型Address,在Address类内部也重写clone方法,代码如下。运行结果:运行结果: 因为序列化产生的是两个完全独立的对象,所有无论嵌套多少个引用类型,序列化都是能实现深拷贝的。原创 2022-12-06 14:33:12 · 127 阅读 · 0 评论 -
多线程学习笔记
6-1继承 Thread 类创建线程6-2实现Runnable接口创建线程6-3使用匿名内部类的形式创建线程6-4使用lambada表达式创建线程6-5使用Callable和 Futrue创建线程使用Callable和Futue线程可以获取到返回结果,底层基于LockSupport6-6使用线程池列如用Exrcutor框架 6-7spring @Asyn异步注解结合线程这个注解不能用test方法来测试,因为test方法底层是static方法,下面我是用controller原创 2022-12-06 00:09:17 · 431 阅读 · 0 评论 -
集合框架----源码解读HashSet篇
该类实现了Set接口,由一个哈希表(实际上是一个Hash Map实例)作为后台。它不保证集合的迭代顺序;特别地,它并不能保证秩序会随着时间的推移而保持不变。该类允许空元素。该类为基本操作(添加、删除、包含和大小)提供了恒定的时间性能,假设哈希函数在桶之间适当分散元素。迭代这个集合需要的时间正比于Hash Set实例的大小(元素的个数)加上支持Hash Map实例(桶的数量)的"容量"之和。因此,如果迭代性能很重要,不要将初始容量设置得太高(或负荷系数过低)是非常重要的。注意,这种实现并不同步。原创 2022-11-29 10:34:36 · 222 阅读 · 0 评论 -
集合框架----源码解读LikedeHashMap篇
Hash表和链表实现Map接口,具有可预测的迭代顺序。该实现与HashMap的不同之处在于它维护了一个贯穿其所有条目的双向链表。该链表定义了迭代顺序,通常是键被插入到映射中的顺序(插入顺序)。注意,如果密钥被重新插入到映射中,插入顺序不会受到影响。当m . includekey ( k )在调用之前立即返回true时调用(如果m . put ( k , v ) ,则密钥k被重新插入到映射m中)。)原创 2022-11-29 00:28:22 · 284 阅读 · 0 评论 -
集合框架----源码解读LikedHashSet篇
Hash表和链表实现了Set接口,具有可预测的迭代顺序。该实现与HashSet的不同之处在于它维护了一个贯穿其所有条目的双向链表。该链表定义了迭代顺序,即元素插入集合的顺序(插入顺序)。注意,如果一个元素重新插入到集合中,插入顺序不受影响。当s .包含( e )在调用之前立即返回true时调用(如果s . add ( e ) ,则元素e重新插入到集合s中)。这种实现使其客户端免受HashSet提供的未指定的、通常是混乱的排序,而不会增加与TreeSet相关的成本。原创 2022-11-29 00:20:48 · 312 阅读 · 0 评论 -
集合框架----源码解读HashMap篇(一)
基于哈希表的Map接口实现。该实现提供了所有可选的映射操作,并允许空值和空键。(HashMap类大致相当于Hashtable,除了它是非同步的,并且允许为空值。)这个类不保证映射的顺序;特别是,它不能保证顺序随时间的推移保持不变。这个实现为基本操作(get和put)提供了恒定时间的性能,假设哈希函数将元素适当地分散到桶中。在集合视图上迭代所需的时间与HashMap实例的“容量”(桶的数量)加上它的大小(键-值映射的数量)成正比。原创 2022-11-28 22:23:33 · 494 阅读 · 0 评论 -
集合框架----源码解读LinkedList篇
双链表实现的list和Deque接口。实现所有可选的列表操作,并允许所有元素(包括null)。所有的操作都按照双链表的预期执行。索引到列表中的操作将从列表的开始或结束遍历列表,以更接近指定索引的为准。注意,这个实现不是同步的。如果多个线程并发访问一个链表,并且其中至少有一个线程在结构上修改了链表,那么它必须在外部同步。(结构修改是添加或删除一个或多个元素的任何操作;仅仅设置元素的值并不是结构修改。)这通常是通过在自然封装列表的某些对象上同步来实现的。如果不存在这样的对象,则应该使用集合“包装”列表。原创 2022-11-27 23:23:01 · 336 阅读 · 0 评论 -
集合框架----源码解读Vector篇
这个还是调grow方法进行扩容,这里就不细说了1.默认的初始化容量=10,每次扩容时2倍,可以设置每次扩容的容量。2.基于数组实现3.List接口下的子类4.vector是线程安全的(有上同步锁)原创 2022-11-27 19:09:35 · 456 阅读 · 0 评论 -
java泛型
1.Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。2.早期的时候,使用Object来代表任意类型。但是这样在向上转型的是没有问题的,但是在向下转型的时候存在类型转换的问题,这样的程序其实是不安全的。所以Java在JDK5之后提供了泛型来解决这个问题3.早期的时候,使用Object来代表任意类型。但是这样在向上转型的是没有问题的,但是在向下转型的时候存在类型转换的问题,这样的程序其实是不安全的。原创 2022-11-27 15:16:40 · 1064 阅读 · 0 评论 -
集合框架----源码解读ArrayList篇
1.ArrayList底层基于数组实现,根据index下标查询效率非常高2.增、删底层基于数组实现的扩容,缩容 效率也很低3.修改是方法是如果是根据index下标来修改所以效率高4.无法对结构进行修改5.每次缩容扩容会生成新的对象。原创 2022-11-27 00:20:42 · 511 阅读 · 0 评论 -
20220505java学习笔记-----Reactor(反应器)
Reactor模式(1)Reactor线程的职责:负责响应IO事件,并且分发到Handlers处理器。(2)Handlers处理器的职责:非阻塞的执行业务处理逻辑。多线程OIO的致命缺陷如果前一个网络连接的handle(socket)没有处理完,那么后面的新连接无法被服务端接收,于是后面的请求就会被阻塞,导致服务器的吞吐量太低。这对于服务器来说是一个严重的问题。为了解决这个严重的连接阻塞问题,出现了一个极为经典的模式:ConnectionPerThread(一个线程处理一个连接..原创 2022-05-15 22:29:18 · 696 阅读 · 0 评论 -
202205014java算法笔试题----String(字符串)
7.如何求相对路径6.如何截取包含中文的字符串原创 2022-05-15 19:19:26 · 730 阅读 · 0 评论 -
20220512java算法笔试题------数组
1.如何找出数组中重复唯一的重复的元素题目描述:数字1~1000放在含有1001个元素的数组中,其中只有唯一的一个元素值重复,其他数字均只出现一次。设计一个算法,将重复元素找出来,要求每个数组元素只能访问一次。如果不使用辅助存储空间,能否设计一个算法实现?import java.util.Hashtable;/** * @author 龙御修 * @create 2022-05-04 10:04 */public class FindRepetitionArrays { .原创 2022-05-14 11:49:16 · 572 阅读 · 1 评论 -
20220504java算法笔试题----------数组
1.如何找出数组中重复唯一的重复的元素题目描述:数字1~1000放在含有1001个元素的数组中,其中只有唯一的一个元素值重复,其他数字均只出现一次。设计一个算法,将重复元素找出来,要求每个数组元素只能访问一次。如果不使用辅助存储空间,能否设计一个算法实现?import java.util.Hashtable;/** * @author 龙御修 * @create 2022-05-04 10:04 */public class FindRepetitionArrays { .原创 2022-05-09 08:32:45 · 427 阅读 · 0 评论 -
20220504java学习笔记------聊天室代码
OIO聊天室import java.io.*;import java.net.ServerSocket;import java.net.Socket;import java.nio.charset.StandardCharsets;import java.util.ArrayList;import java.util.Collection;/** * 聊天室服务端 */public class Server { /** * java.net.ServerSocke原创 2022-05-04 22:52:08 · 333 阅读 · 0 评论 -
20220422java学习笔记-------------NIO
高并发IO的底层原理LinuxIO读写的基本原理应用程序的IO操作实际上不是物理设备级别的读写,而是缓存的复制。(底层的读写交换系统内核完成,在内核缓冲区和进程缓冲区之间进行数据交换。)内核缓冲区与进程缓冲区内核缓冲区:减少底层系统的频繁中断所导致的时间损耗、性能损耗。(只有一个)进程缓冲区:每个用户程序(进程)都有自己独立的缓冲区。read:内核到进程write:进程到内核IO操作就是内核缓冲区和进程缓冲区之间的数据交换系统调用流程数据交换.原创 2022-05-02 22:33:31 · 490 阅读 · 0 评论 -
20220501java算法题---------二叉树
二叉树二叉树(BinaryTree)也称为二分树、二元树、对分树等,它是n(n≥0)个有限元素的集合,该集合或者为空,或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。二叉树的递归定义为:二叉树或者是一棵空树,或者是一棵由一个根结点和两棵互不相交的分别称作根结点的左子树和右子树所组成的非空树,左子树和右子树又同样都是一棵二叉树。以下是二叉树的一些常见的基本概念:1)结点的度。结点.原创 2022-05-02 21:07:40 · 1209 阅读 · 0 评论 -
20220422java算法笔试题-----栈、队列与哈希表
1.如何实现栈题目描述:实现一个栈的数据结构,使其具有以下方法:压栈、弹栈、取栈顶元素、判断栈是否为空以及获取栈中元素个数。//利用数组class MyStack<T>{ private ArrayList<T> arr; private int stackSize; public MyStack() { stackSize=0; arr=new ArrayList<T>(); }原创 2022-05-01 16:40:09 · 1257 阅读 · 0 评论 -
20220420java第二阶段----webserver、反射、注解
webserverWebServer主类WebServer是一个Web容器,实现了Tomcat中的基础功能,通过这个项目的学习了解Tomcat的底层工作逻辑。Web容器是一个Web服务端程序,主要负责两方面的工作:1:管理部署在容器中的所有网络应用2:与客户端(通常就是浏览器)进行TCP通讯,并基于HTTP协议进行应用交互,使得客户端可以 通过网络远程调用容器下不同网络应用中的内容。 网络应用(webapp):包含的内容大致有:网页,处理业务的代码,其他资源等。就是俗称的"网站"..原创 2022-04-23 20:43:53 · 611 阅读 · 0 评论 -
20220417java算法笔试题-------链表
1.如果实现链表的逆序?题目描述:给定一个带头结点的单链表,请将其逆序。即如果单链表原来为head→1→2→3→4→5→6→7,则逆序后变为head→7→6→5→4→3→2→1。/** * @author 龙御修 * @create 2022-04-17 22:11 */class LNode{ int data; //数据域 LNode next;//下一个节点的引用}//方法一:就地逆序 时间复杂度为O(N),空间复杂度为O(1)public class .原创 2022-04-20 19:30:33 · 422 阅读 · 0 评论 -
20220416 java笔试题
1.下面关于关键字synchronized的描述中,正确的是(B )。A.保证两个或多个进程同时启动和结束B.保证任何时候只有一个线程访问一个方法或对象C.允许两个进程并行运行但其之间相互通信D.保证两个或多个线程同时启动和结束2.将对象序列化,要实现的接口是( C)。A.RunnableB.CloneableC.SerializableD.Comparator3.fail-fast和fail-safe迭代器的区别是什么?它们的主要区别是fail-safe允许...原创 2022-04-16 20:17:26 · 2348 阅读 · 0 评论 -
20220412 java笔试题
91.实现对一组无序的字母进行从小到大排序(区分大小写),当两个字母相同时,小写字母放在大写字母前。要求时间复杂度为O(n)。5.给定正整数x,定义函数A(n)=1+x+x^2+x^3+…+x^n(n为整数且≥0),已知乘运算的时间远大于加运算,输入x、n,如何尽可能快地求出A(n)?6.请用两个队列实现栈的先进后出的操作,希望该栈的push/pop时间复杂度尽量小。请写出push/pop的代码。8.n(1,2,3,…,n)个元素有N!个不同的排列,将这n!个数按字典序排列,并编号0,1,…,n原创 2022-04-13 23:41:32 · 579 阅读 · 0 评论 -
20220411 java笔试题
8二4.Java语言中实现多态的机制是什么?5.数字签名和加密的区别是什么?6.在Java语言中,Socket的连接和建立的原理是什么?7.XML有哪些解析技术?它们有什么不同点?8.数据库中“事务处理”指的是什么?9.Java语言中有几种方法可以终止线程运行?stop()和suspend()方法为什么不推荐使用?8三1.寻找一条从左上角(arr[0][0])到右下角(arr[m−1][n−1])的路线,使得沿途经过的数组中的整数之和最小。2.使用两种方法编写多线程环境下的S原创 2022-04-11 22:45:30 · 526 阅读 · 1 评论 -
202204010 java笔试题
一个文件中有10000个数,用Java语言实现一个多线程程序,将这10000个数输出到5个不同文件中(不要求输出到每个文件中的数量相同)。要求启动10个线程,两两一组分为5组。每组两个线程分别将文件中的奇数和偶数输出到该组对应的一个文件中,需要偶数线程每打印10个偶数以后,就将奇数线程打印10个奇数,如此交替进行。同时需要记录输出进度,每完成1000个数就在控制台中打印当前完成数量,并在所有线程结束后,在控制台输出“Done”原创 2022-04-10 21:40:29 · 715 阅读 · 0 评论 -
20220409java第二阶段------集合
集合框架什么是集合集合与数组一样,可以保存一组元素,并且提供了操作元素的相关方法,使用方便集合只能存放引用类型元素,并且存放的是元素的引用(地址)java集合框架相关接口java.until.Collection接口:java.util.Collection是所有集合的顶级接口.Collection下面有多种实现类,因此我们有更多的数据结构可供选择.Collection下面有两个常见的子接口:List:线性表是可重复集合,并且有序Set:不可重复的集合,大部分实原创 2022-04-09 23:13:27 · 713 阅读 · 0 评论 -
20220407 java 笔试题
1.“hello”instanceof Object的返回值是( )。A.“abcd” B.true C.false D.String5.一个Java程序运行从上到下的环境次序是( )。A.JRE/JVM、操作系统、Java程序、硬件B.Java程序、JRE/JVM、硬件、操作系统C.Java程序、JRE/JVM、操作系统、硬件D.Java程序、操作系统、JRE/JVM、硬件4.一般有两种用于创建线程对象的方法,分别是()与()。5.Java语言提供了两种用于多态的机制,..原创 2022-04-09 11:26:20 · 857 阅读 · 0 评论 -
20220322 java笔试题-------web
1)在JSP中,可动态导入其他页面的标签是( )。A.<%include/></textarea>B.<%@include%>C.<jsp:importPage/>D.<jsp:include/>答案:D2)如果只希望在多个页面间共享数据,可以使用( )作用域。A.request,sessionB.application sessionC.request,applicationD.pageContext request答案:A3)为了让浏览器以UTF-8编码显示J原创 2022-04-07 15:49:06 · 1468 阅读 · 0 评论 -
20220406 java学习笔记------java笔试题
1.实现多线程的方法有哪几种?1)实现Runnable接口,并实现该接口的run()方法2)继承Thread类,重写run方法3)实现Callable接口,重写call()方法2.利用递归方法求6!public class Test { public static long fac(int n){ if(n>1) return (n*fac(n-1)); else return 1; } pu原创 2022-04-06 23:40:04 · 738 阅读 · 0 评论 -
20220405 java 学习笔记------流处理
Stream接口:泛型接口,Stream接口常用方法中间操作类型的方法会产生一个新的流对象,被操作的流对象仍然可以执行其他操作。终端操作为消费流,操作结束之后,被操作的流对象就不能再次执行其他操作了。Collection接口获取流对象的方法1)获取集合的顺序流,Stream<E>stream();2)获取集合的并行流Stream<E>parallelstream();Optional类可以保存任何对象(像是一个容器)..原创 2022-04-05 18:11:27 · 398 阅读 · 0 评论 -
20220405 java第二阶段学习笔记------线程、
多线程:线程:一个顺序的单一的程序执行流程就是一个线程。多线程:多个单一顺序执行的流程并运行。并发:宏观上感觉一起运行的现象成为并发运行用途: 当出现多个代码片段执行顺序有冲突时,希望它们各干各的时就应当放在不同线程上"同时"运行 一个线程可以运行,但是多个线程可以更快时,可以使用多线程运行 线程的生命周期图创建线程有两种方式:方式一:继承Tread并重写run方法优点:结构简单,利于匿名内部类形式创建缺点:1)由于java是单继承的,这会导致继承原创 2022-04-05 11:32:27 · 121 阅读 · 0 评论 -
20220404 java第二阶段------------异常处理、网络编程
异常处理java异常处理机制1)java中所有错误的超类为Throwable,其下有两个子类:Error和Exception2)Error的子类描述的都是系统错误,比如虚拟机内存溢出等。3)Exception的子类描述的都是程序错误,比如空指针,下标越界等4)通常我们程序中处理的异常都是Exception异常处理机制中的try-catch 异常处理机制中的try-catch 语法: try{ 可能出现异常的代码片段 }catch(XXXException e)原创 2022-04-04 22:57:58 · 168 阅读 · 0 评论 -
20220331 java学习笔记总结-----------第二阶段IO流、file
File类:file类的每一个实例可以表示硬盘(文件系统)中的一个文件或目录,表示一个抽象类使用File可以做到:1:访问其表示的文件或目录的属性信息2:创建和删除文件或目录3:访问一个目录中的子项注:file不能访问文件数据创建File时要指定路径,而路径通常使用相对路径。相对路径的好处在于有良好的跨平台性。"./"是相对路径中使用最多的,表示"当前目录"。File常见方法:文件:(一)file.getName():获取文件名字(二)file.length()原创 2022-04-03 23:07:26 · 363 阅读 · 0 评论 -
利用数组完成扑克牌
大家都完玩过斗地主,一副牌有什么组成呢?答案是:一个牌盒和54张牌;54张牌有2到A各四种花色张加两张大小王换算成素质就是。代码如下String[] colors={"黑色","红桃","梅花","方块"};String[] nums={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};String[] puke = new String[54];现在我们需要把数字和花色拼接构成除开小王的牌,这里我们将运用到遍历遍历有两原创 2022-03-03 16:15:20 · 866 阅读 · 0 评论 -
计算平均年龄
import java.util.Scanner;/*1.循环录入5个人的年龄,并计算平均年龄. 如果录入的数据出现负数或者大于130的数,立即停止输出报错 */public class Demo01 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入5个人年龄:"); in.原创 2022-02-27 20:33:41 · 1112 阅读 · 0 评论 -
java数组总结笔记
数组笔记总结原创 2022-03-06 18:40:53 · 238 阅读 · 0 评论 -
String笔记总结
(一)String(char[])写法1:char a[]={'g','o','o','d'};String s=new String(a);等价于:String s=new String("good");(二)String(char a[], int offset,int length)offset:表示开始截取字符串的位置,length:表示字符串的长度。写法一:char a[]={'s','t','u','d','e','n''t'};String s=new String(2.原创 2022-03-05 15:41:37 · 144 阅读 · 0 评论 -
接收用户输入的年份和月份,判断该年该月共有多少天
解题思路:年份分闰年和平年,只会影响2月份,其他月份在每年的规律都一样所以我们这里选择用switch/* 接收用户输入的年份和月份,判断该年该月共有多少天 */import java.util.Scanner;public class Demo02 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.p原创 2022-03-02 20:58:34 · 2819 阅读 · 0 评论 -
用Calendar设置时间,周:数字转换成汉字
import java.util.Calendar;public class Demo06CalendarInit { public static void main(String[]args){ //创建calendar对象 Calendar cal= Calendar.getInstance(); cal.add(Calendar.MONTH,1); //设置年 int year =cal .get(Cale.原创 2022-02-23 11:45:51 · 823 阅读 · 0 评论 -
如果在程序中使用频繁地附加字符串String与StringBuilder时间对比
public class StringBuilderDemo { public static void main(String[] args) { String str="s"; long startTime=System.currentTimeMillis(); for (int i = 0; i <10000 ; i++) { str+=i; } long endTime=Syste.原创 2022-03-04 20:53:42 · 71 阅读 · 0 评论 -
数组测试:大乐透plus
前面我们用随机数生成10个,也有可能重复,我用到了soft进行排序来判断邻近的/*- 一组大乐透号码由10个1-99之间的数字组成- 定义方法,打印大乐透号码信息 */import java.util.Arrays;import java.util.Random;public class Test1 { public static void main(String[] args) { printJob(); } //定义方法 publi原创 2022-03-01 20:10:26 · 317 阅读 · 0 评论