![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
java基础
文章平均质量分 90
java基础
奋斗的小媛
这个作者很懒,什么都没留下…
展开
-
Java 注解机制
注解是 JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。它主要的作用有以下四方面:**【1】生成文档:**通过代码里标识的元数据生成 javadoc文档。**【2】编译检查:**通过代码里标识的元数据让编译器在编译期间进行检查验证。**【3】编译时动态处理:**编译时通过代码里标识的元数据动态处理,例如动态生成代码。**【4】运行时动态处理:**运行时通过代码里标识的元数据动态处理,例如使用反射注入实例。这么来说是比较抽象的,我们具体原创 2021-04-13 20:59:41 · 194 阅读 · 0 评论 -
Java 反射机制
反射(Reflection)被视为动态语言的关键,反射机制允许程序在执行期间借助于 Reflection API 取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。反射是一种功能强大且复杂的机制。使用它的主要人员是工具构造者,而不是应用程序员。如果仅对设计应用程序感兴趣,而对构造工具不感兴趣,就没有学习的必要。一、反射机制提供的功能(什么时候会用到反射)【1】在运行时判断任意一个对象所属的类。【2】在运行时构造任意一个类的对象。【3】在运行时判断任意一个类所具有的成员变量和方法。【.原创 2021-04-13 20:47:54 · 65 阅读 · 0 评论 -
Java开发人员犯的10大错误
一、将数组转换为ArrayList要将数组转换为ArrayList,开发人员通常会这样做:List<String> list = Arrays.asList(arr);Arrays.asList()将返回 ArrayList私有静态类的Arrays,而不是java.util.ArrayList类。该java.util.Arrays.ArrayList有set(),get(),contains()方法,但没有添加元素的任何方法,所以它的大小是固定的。要创建一个real ArrayList原创 2021-04-13 20:42:47 · 67 阅读 · 0 评论 -
Java面试——TCP与HTTP
一、Session 和 cookie 的区别【1】Cookie 保存在客户端,未设置存储时间的 Cookie,关闭浏览器会话 Cookie 就会被删除;设置了存储时间的 Cookie 保存在用户设备的磁盘中直到过期,同时 Cookie 在客户端所以可以伪造,不是十分安全,敏感数据不易保存。Session 保存在服务器端,存储在 IIS 的进程开辟的内存中,而 Session 过多会消耗服务器资源,所以尽量少使用 Session。【2】Session 是服务器用来跟踪用户的一种手段,每个 Session都原创 2020-07-08 23:36:55 · 593 阅读 · 0 评论 -
java面试---Socket
1. 对套接字编程的理解,它的协议是如何的?socket通常称为“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通过套接字向网络发出请求或应答网络请求。服务器和客户端通过socket进行交互。服务器需要绑定在本机的某个端口号上,客户端需要声明自己连接哪个地址的哪个端口,这样服务器和客户端就能连接了。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分...转载 2020-04-13 23:24:26 · 1055 阅读 · 1 评论 -
TCP三次握手和四次挥手的流程,断开连接如果只有两次握手,会出现什么。
TCP三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT(请求连接)状态,等待Server确认。第二次握手:Server收到数据包后由标志位SYN=1知...原创 2020-04-11 22:21:44 · 1600 阅读 · 0 评论 -
java面试---servlet+jsp
1、说一说Servlet生命周期Servlet的生命周期分为三部分初始化:Web容器加载servlet,调用init()方法进行初始化。处理请求:当请求到达时,运行其service()方法。Service()会根据表单的请求类型调用相对doGet()方法或者是doPost()方法。销毁:当服务器关闭时,调用distroy()方法销毁servlet。2、get提交和post提交有...转载 2020-04-12 23:25:36 · 139 阅读 · 0 评论 -
HashMap的底层实现原理?
HashMap是一个数据结构 实现Map接口复杂度O(1) 线程非安全 key和value都可以为空以jdk7为例说明:HashMap map=new HashMap();在实例化以后 底层创建了长度是16的一维数组Entry[ ] table....可能已经执行过多次putmap.put(key1value1);首先 调用key1所在类的hashCode()计算ke...原创 2019-12-14 15:38:35 · 177 阅读 · 0 评论 -
Java 序列化与反序列化
序列化:把对象转换为字节序列存储于磁盘或者进行网络传输的过程称为对象的序列化。反序列化:把磁盘或网络节点上的字节序列恢复到对象的过程称为对象的反序列化。一、序列化对象【1】必须实现序列化接口 Serializable:Java.io.Serializable 接口。【2】serialVersionUID:序列化的版本号,凡是实现 Serializable 接口的类都有一个静态的表示序列化版本标识符的变量。①、Add default serial version ID:生成的代码...原创 2020-07-08 23:35:48 · 165 阅读 · 0 评论 -
Hashset和Treeset的区别
Set中元素不可以重复,是无序的(这里的无序是指存入元素的先后顺序与输出元素的先后顺序不一致)HashSet: ①内部的数据结构是哈希表,是线程不安全的。 ②HashSet中保证集合中元素是唯一的方法:通过对象的hashCode和equals方法来完成对象唯一性的判断。如果对象的hashCode值不同,则不用判断equals方法,就直接存到HashSet中。 注意:如果元素要...原创 2020-04-19 22:56:24 · 476 阅读 · 0 评论 -
Hash算法和一致性Hash算法
Hash算法在路由算法应用中,为了保证数据均匀的分布,例如有3个桶,分别是0号桶,1号桶和2号桶;现在有12个球,怎么样才能让12个球平均分布到3个桶中呢?使用Hash算法的做法是,将12个球从0开始编号,得到这样的一个序列:0,1,2,3,4,5,6,7,8,9,10,11。将这个序列中的每个值模3,不管数字是什么,得到的结果都是0,1,2,不会超过3,将结果为0的数字放入0号桶,结果为1的数...转载 2020-04-15 21:47:44 · 237 阅读 · 0 评论 -
java对象与json对象间的相互转换
1.简单的解析json字符串首先将json字符串转换为json对象,然后再解析json对象,过程如下。JSONObject jsonObject = JSONObject.fromObject(jsonStr);//根据json中的键得到它的值String name = jsonObject.getString("name");int num = jsonObject.getInt...原创 2020-04-14 00:08:44 · 134 阅读 · 0 评论 -
java面试---IO与NIO
一、概念 NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。二、NIO和IO的主要区别下表总结了Java IO和NIO之间的主要区别: IO NI...原创 2020-04-13 23:09:49 · 217 阅读 · 0 评论 -
java面试---String
1、什么是String,它是什么数据类型?String是定义在 java.lang 包下的一个类。它不是基本数据类型。String是不可变的,JVM使用字符串池来存储所有的字符串对象。2、创建String对象的不同方式有哪些? 和使用其他类一样通过new关键字来创建。 使用这种方式时,JVM创建字符串对象但不存储于字符串池。我们可以调用intern()方法将该字符串对象存储在...原创 2020-04-13 22:11:13 · 143 阅读 · 0 评论 -
java序列化的方式
目录一、认识序列化2、序列化的使用场景二、序列化实现的方式三、序列化版本号serialVersionUID四、总结一、认识序列化1、从网络通信认识序列化为了很好的理解序列化,先不讲概念,而是先从网络通信谈起,我们知道现在的网络通信技术基本上都是基于TCP/IP来实现的。假设我们有两台电脑,这两台电脑之间写好了java程序,一个是send端,一个是receive...原创 2020-04-07 15:16:24 · 95 阅读 · 0 评论 -
ArrayList在循环过程中删除,会不会有问题,为什么
for循环正向删除先看示例,再解析原因:public static void main(String[] args){ List<String> list = new ArrayList<String>(); list.add("111"); list.add("222"); list.add("2...转载 2020-04-05 23:09:26 · 864 阅读 · 0 评论 -
Java 传值和传引用的区别
传值:传递的是值的副本。方法中对副本的修改,不会影响到调用方。传引用:传递的是引用的副本,共用一个内存,会影响到调用方。此时,形参和实参指向同一个内存地址。对引用副本本身(对象地址)的修改,如设置为null,重新指向其他对象,不会影响到调用方。直接上代码,更好的理解两者的区别。首先看传基本数据类型,如int、long等。// 基本数据类型// 基本数据类型public class P...原创 2020-04-05 22:00:01 · 307 阅读 · 0 评论 -
接口和抽象类的区别,注意JDK8的接口可以有实现
相同:接口和抽象类都能定义方法和属性,都是看作是一种特殊的类。大部分的时候,定义的方法要子类来实现 抽象类和接口都可以不含有抽象方法。接口没有方法就可以作为一个标志。比如可序列化的接口Serializable,没有方法的接口称为空接口。没有抽象方法的抽象类,小编不知道有什么作用,总之是可以通过编译的。 抽象类和接口都不能创建对象。 抽象类和接口都能利用多态性原理来使用抽象类引用指向子类对...原创 2020-04-05 20:57:29 · 645 阅读 · 0 评论 -
BIO与NIO、AIO的区别
【1】阻塞 BIO(Blocking I/O):同步阻塞I/O模式,当一条线程执行 read() 或者 write() 方法时,这条线程会一直阻塞直到读取到了一些数据或者要写出去的数据已经全部写出,在这期间这条线程不能做任何其他的事情。在活动连接数不是特别高(小于单机1000)的情况下,这种模型是比较不错的,可以让每一个连接专注于自己的 I/O 并且编程模型简单,也不用过多考虑系统的过载、限流等问...原创 2020-04-02 23:11:30 · 109 阅读 · 0 评论 -
java面试----java基础
java类装载过程分为3步: 1:加载 Jvm把class文件字节码加载到内存中,并将这些静态数据装换成运行时数据区中方法区的类型数据,在运行时数据区堆中生成一个代表这个类 的java.lang.Class对象,作为方法区类数据的访问入口。 *释:方法区不仅仅是存放方法,它存放的是类的类型信息。 2:链接:执行下面的校验、准备和解析步骤,其中解析步...原创 2020-03-23 17:30:00 · 186 阅读 · 0 评论 -
数据库分页、索引、优化等
接触过哪些数据库;oraclemysqloracle和mysql分页的区别;oracle分页的原理;Mysql使用limit分页select * from stu limit m, n; //m = (startPage-1)*pageSize,n = pageSizeOracle使用rownum分页select * from (select rownum rn,a...原创 2020-03-23 17:27:18 · 321 阅读 · 0 评论 -
Java面试---jvm及GC之深入理解JVM的内存结构及GC机制
jvm垃圾回收的流程;哪些对象会被认为是垃圾;有一个对象A它有一个属性是B,B这个对象他又有一个属性是A,这个对象最终会不会被认为是垃圾;允许GC之后,开始查找那些允许被回收的(两个算法)-> 开始回收(四个算法)第一步:那些对象是垃圾:1,引用计数法:通过对引用的遍历,找到对应的实例,让对应的实例计数加1 ,如果引用取消,或者指向null,实例的引用减...原创 2020-03-23 17:25:20 · 965 阅读 · 0 评论 -
ConcurrentHashMap 高并发性的实现机制与源码浅析
说一下你对HashMap的理解;他的底层结构是什么样的;jdk7之前底层使用的是数组+链表的形式,1.8之后改成了数据加链表加红黑二叉树,提高查询性能,一个数据是怎么存到,map里面的;1.首先创建hashmap,默认大小是16,负载因子是0.75,我们可以去指定他的长度size,如果自己传入初始大小k,初始化大小为 大于k的 2的整数次方。那么为什么2的整数次方,例如如果传10,大小...原创 2020-03-23 17:21:32 · 415 阅读 · 0 评论 -
JVM内存结构和GC垃圾回收算法
一、JVM体系结构概览Java8以后的JVMGC的作用域二、常见的垃圾回收算法(1)引用计数算法(Reference-Counting)(JVM的实现一般不采用这种方式)引用计数算法缺点:每次对对象赋值时均要维护引用计数器,且计数器本身也有一定的消耗;较难处理循环引用。(2)复制...原创 2020-03-10 16:23:52 · 179 阅读 · 0 评论 -
线程池7大参数详解及底层工作原理
线程池做的主要工作就是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果运行线程数量超出了最大线程数量,超出部分需要排队等候,等待其他线程执行完毕,然后线程再从队列中取出任务执行。线程池的主要特点线程复用; 控制最大并发数; 管理线程;优势降低资源的消耗。通过重复利用已经创建的线程降低线程创建和销毁造成的消耗 提高响应速度。当任务到...原创 2020-03-09 14:38:47 · 2052 阅读 · 0 评论 -
JVM老年代和新生代的比例
Java中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。堆的内存模型大致...转载 2020-03-05 15:21:15 · 1268 阅读 · 0 评论 -
Java面试---JAVA基础
一、JAVA中的几种基本数据类型是什么,各自占用多少字节。Java语言中一共提供了8种原始的数据类型(byte,short,int,long,float,double,char,boolean),这些数据类型不是对象,而是 Java语言中不同于类的特殊类型,这些基本类型的数据变量在声明之后就会立刻在栈上被分配内存空间。除了这8种基本的数据类型外,其他类型都是引用类型(例如类、接口、数组等),引...原创 2020-02-18 10:33:54 · 318 阅读 · 0 评论 -
Java基础之list某列一样的数据放入map(Stream)
用List对象中的age当做key 其余当做value 放入map中。代码:public class StreamTest { public static void main(String[] args) { List<User> list = new ArrayList<User>(); User user = new U...原创 2020-02-27 00:03:43 · 1493 阅读 · 0 评论 -
Java基础之java8 的新特性
【1】Lambda 表达式:将函数式编程引入了Java。Lambda 允许把函数作为一个方法的参数,或者把代码看成数据。String[] atp = {"Nadal", "Djokovic", "Wawrinka"}; List<String> players = Arrays.asList(atp); // 以前的循环方式 for (String play...原创 2020-02-26 22:45:49 · 91 阅读 · 0 评论 -
Java基础之ConcurrentHashMap
ConcurrentHashMap专门用于多线程(并发)场景下的 Map实现类,其大大优化了多线程下的性能。这个 Map实现类是在 jdk1.5中加入的,其在 jdk1.6/1.7中的主要实现原理是 segment分段锁,而每个Segment 都继承了 ReentrantLock 类,也就是说每个Segment类本身就是一个锁。使用 put 方法的时候,是对我们的 key进行 hash拿到一个整...原创 2020-02-26 21:20:37 · 258 阅读 · 0 评论