![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
sofency
stay hungry stay foolish
展开
-
HashMap怎么和面试官讲清楚?
集合中我们经常使用的就是hashmap,我们知道它的底层实现是hash桶外加链表的方式来进行存储数据的,但是底层又是如何进行具体实现的,我们可能真的说不清除。现在我们从源码层次上进行讲解hashmap的原理;get方法的底层实现先看下源码我们传入key的参数,底层调用的是getNode的方式,其中最重要的就是对我们传入的key进行了hash算法的处理,那么hash算法又是如何实现的哪,继续源码刨析首先判断了key是否为空,空的话返回0;非空的话使用key的hashcode的高16位和低16位原创 2020-08-04 10:09:55 · 233 阅读 · 0 评论 -
JVM双亲委派机制,沙箱安全机制
双亲委派机制的原理如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器(Bootstrap ClassLoader)中,只有当父加载器在它的搜索范围中没有找到所需的类时,即无法完成该加载,子加载器才会尝试自己去加载该类。具体流程:当AppClassLoader加载一个cla...原创 2020-04-26 23:35:09 · 361 阅读 · 1 评论 -
集合常见面试题总结
Map存储元素的类型:K-V模型map 中的key不能为null, 如果为null,抛出空指针异常。hashMap存储原理:在jdk1.6和1.7中底层使用的数据结构是数组和链表。使用链表来解决冲突,即对于同一hash值的元素,通过链表的形式存储到对应的数组中。但是当一个桶里面的元素越来越多,即相同hash值的元素越来越多,查找的效率就退化到链表了,因此效率变低。jdk 1.8之后h...原创 2020-04-20 20:19:41 · 191 阅读 · 0 评论 -
多线程面试题知识点总结
并行和并发的概念并行说明的是两个程序在同一时刻一起执行并发的概念和并行略微有些差别 是在微观时刻上的一起实行是有执行的先后顺序的。对于单核机器来说只能发生并发,对于多核机器来说可以发生并发也可以发生并行。进程和线程进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。 它是操作系统动态执行的基本单元。通俗的来说 就是我们电脑上安装的软件在运行时所创建的一个执行单元。线...原创 2020-04-14 09:59:24 · 183 阅读 · 0 评论 -
NIO技术
什么是NIO?java 的NIO是从jdk1.4引入的一个新的I/O操作的api。可以替换标准的I/O API,NIO与原来的IO具有同样的功能和目的,但是使用方式完全不一样,NIO是面向缓冲区,基于通道的IO操作,NIO将以更加高效的方式进行文件的读写操作。传统的IO操作是面向流的。如果是本地文件,那么需要设置接收文件的输入流,同时指定发送文件的输出流,由输出流向输入流通过流式操作发送数...原创 2020-03-28 14:24:22 · 286 阅读 · 0 评论 -
多线程知识总结
对于不同的线程操作共有的变量时,当在某一个线程中共有变量发生变化时,其他的线程不能感知到共有变量发生的变化,因为线程的工作内存不共享。解决方案: 对于共享的变量使用volatile修饰,用来保证线程间共享变量可见性,以此来做线程间的通信。原理: volatile 修饰的变量的read load use和 assign store write操作是连续的,即确保修改后必须立即同步回主内存...原创 2020-03-14 08:21:44 · 117 阅读 · 0 评论 -
Java实现外部排序
外部排序使用场景及来源主要针对大容量数据进行排序在使用选择排序,插入排序,冒泡排序,和快速排序时的嘴馋时间复杂度是O(n^2),因此对于几十万的数据量时排序要耗费很长的时间。对于外部的文件进行数据排序,首先要将数据送入内存中,然后对他们进行内部,但是如果文件过大,那么文件的所有数据不能送入内存,因此就有了外部排序。外部排序的思路首先将数据从文件中分段读入内存,并使用内部排序算法对于分段的...原创 2020-01-18 16:12:00 · 2627 阅读 · 0 评论 -
Java实现基数排序
基数排序的思路就是从整数的最后一位开始向前面根据基数进行分组的一种排序算法。eg: 示例数组 int[] arr={3,23,41,5,22,1,31,1,6,71};首先从最后一位开始按0-9进行分组以1结尾的有41,1,31,1,71以2结尾的有22以3结尾的有3,23以5结尾的有5以6结尾的有6其他的没有该据即现在的桶里面的数据如下现在的数组顺序是 {41 1 31 ...原创 2020-01-16 22:35:36 · 178 阅读 · 0 评论 -
Java实现堆排序
堆排序使用的是完全二叉树。即满足r(n)的左孩子是r(2*n+1),右孩子是r(2*n+2)。堆排序它首先将所有的元素添加到堆上,然后不断移除最大的元素并用最后一个叶子结点替换根节点之后再调整堆到大顶堆或者小顶堆的一种排序方法。底层是使用ArrayList进行存储元素的。大顶堆的概念:即根节点是最大的(相对于左右孩子结点)元素 例如下面的图小顶堆的概念:即根节点存储的是最小的(相对...原创 2020-01-16 20:23:37 · 131 阅读 · 0 评论 -
interface接口类和abstract类的区别分析
很多时候我们已经学过的东西却不能将它很快的想起,或者说的时候总是不全,那么这个时候就需要我们慢下来,好好总结,细细回味。抽象类关键字 abstractabstract关键字修饰的类就是abstract类, 如果类中含有抽象方法,那么这个类就必须使用abstract关键字进行修饰,即这个类就是抽象类。(public) abstract class demo{ abstract void ...原创 2019-11-28 19:22:43 · 154 阅读 · 0 评论 -
Java之你真的了解String吗?--内存分析
今天对String类进行了相应的复习,才发现原来String的运用会决定你代码的质量。众所周知,String修饰的字符串是不可已进行修改的,那么它所进行字符串的拼接的时候需要再重新进行创建对象进行赋值。 String str1 ="abc"; String str2 = "def"; String str3 = str1 + str2;对于上述简单的字符串拼接,在jvm里...原创 2019-11-27 22:58:14 · 141 阅读 · 0 评论 -
java数组,数组扩容,数组元素的增删,常见的数组排序方法
今天复习数组,觉得之前学的好些都忘得差不多了,所以好记性不如烂笔头,笔耕不断,慢慢积累自己的知识体系。在讨论数组的扩容问题之前,我们先复习下数组的基本知识。数组的初始化方法int[] arr = {12,13,12,33,4};//直接初始化int[] arr =new int[]{1,2,3,4};//使用对象的创建方式int[] arr = new int[4];arr.f...原创 2019-10-23 08:49:50 · 181 阅读 · 0 评论 -
使用ajax实现异步刷新验证手机号码
前端界面<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>ajax实现异步...原创 2019-09-24 15:18:18 · 583 阅读 · 0 评论 -
使用commons组件实现文件的上传与下载
需要的jar包下载地址commons-fileupload-1.3.1.jarcommons-io-2.4.jar我们在网页中需要上传一些文件到网络上,那么它到底是怎么实现的,我们现在把每个过程给抽象出来数据流向图request请求取文件文件给前端前端界面后端 servlet存储数据到数据库先来简单写个表单解决前端的界面<!DOCTYPE html><html&g...原创 2019-09-07 20:20:32 · 687 阅读 · 0 评论 -
实现HashMap泛型类
HaspMap结合了数组和链表量两者的优点从而查找效率由于数组得到大大提高,修改效率由于链表而大大提高hash值是根据key的hashcode() 通过散列算法进行计算的package testMap;/** * * @author sofency * */public class SofencyHashMap4<K,V> { Node2<K,V&g...原创 2019-07-04 15:44:40 · 874 阅读 · 0 评论 -
如何理解static和this的用法
我们刚开始跟着书上的代码练习写函数模块时,你可能注意到函数模块都用static来修饰该函数,那么我们不用会怎样,答案是会出错导致无法编译。如下图片代码解决方案在boolean后面加上static在main函数中加上 test Max=new test();然后在if语句中的max函数改为Max.max(number1,number2),顺利运行。为什么会这样整哪可以理解下我的上篇博...原创 2019-03-31 17:59:29 · 265 阅读 · 0 评论 -
JAVA实现飞机大战02
紧跟上篇博客链接:JAVA实现飞机大战013. 加载图片的类,因为我们要加载很多图片,如果每加载一个写一个类,着实会增加代码的冗余,所以写一个图片的加载类import java.awt.Image;public class GameUtil{ private GameUtil(){//私有类,只能通过GameUtil对方法进行访问 } /*返回指定路径文件的图片对象 */...原创 2019-04-15 16:43:30 · 371 阅读 · 0 评论 -
初步理解JAVA的继承、多态、封装
JAVA面向对象的三大特性:继承,封装,多态。继承当我们对于不同的对象进行抽象时,会发现他们中会有好多属性是相同的。eg: 小明和小红都有自己的姓名,年龄,身高,体重,并且他们都可以说话。。。同理他们也有一些对方没有的属性或方法,小明知道如何使用计算机编程,但是小红会跳舞。因此可以将这两个人抽象为如下形式public class csdn { public static voi...原创 2019-04-12 23:49:06 · 114 阅读 · 0 评论 -
关于File中使用file.renameTo("path")和file.delete()失败的原因
失败代码public class deleteStringInFile { public static void main(String[] args) throws IOException{ //首先创建文件并且在文件中写入数据 PrintWriter input=new PrintWriter("D:\\test.txt"); inpu...原创 2019-05-04 17:46:41 · 917 阅读 · 0 评论 -
HttpRequestException encountered解决方法
今天在使用git push进行提交项目时却发现 git push成功但是,却始终在github 上无法显示文件,原因就是Git 需要更新了更新地址 git管理器下载第一个原创 2019-05-16 08:37:09 · 1315 阅读 · 0 评论 -
Java中枚举的使用
看java核心技术一的时候,侧重点都在之前没有见到过的新奇功能嗯 这就发现了一个新奇的功能------ 枚举枚举着实有些意思意思1. 它属于一个类,还可以包含参数看下面的例子enum Size{ SMALL("S"),MEDIUM("M"),Big("B"),EXTRA_BIG("XL");}之前着实没有见到过这样的写法,之前学的C没有过多的研究(不知道C是否可以这样整)...原创 2019-07-03 08:53:17 · 170 阅读 · 0 评论 -
理解ArrayList底层原理
package 容器myself;/** * 手写ArrayList 体会底层原理 * @author sofency * */public class SofencyArrayList03<E> {//与泛型结合一起 private Object[] elementData; private int size; private static final int...原创 2019-07-03 19:11:41 · 180 阅读 · 0 评论 -
字节数组输入流和字节数组输出流实现文件的拷贝
整理思路如下为什么要这样进行copy (我更愿意称它为传输)因为这样以二进制的形式传输文件,可以实现文件的远距离传输,即通过这样可以实现服务器与用户之间文件的传输。我们在本地发送请求时,计算机将请求编码为二进制文件,当传送到服务器后,服务器将二进制文件进行解码,从而实现文件的传输那么如何将文件编码为二进制文件哪将文件转化为字节数组存储到byteArray中,即对应上图的第二个方向...原创 2019-07-09 16:23:09 · 529 阅读 · 0 评论 -
实现LinkList泛型类
package linkList;/** * @author sofency * */public class SofencyLinkList03<E> { private Node first; //链表的最前一个元素 private Node last; //链表的最后一个元素 private int size;//链表的大小 //add方法实现 p...原创 2019-07-04 09:47:17 · 245 阅读 · 0 评论 -
Java类与对象的理解以及底层实现原理
Java类与对象的关系可以看作父与子的关系(父亲可以有多个儿子,共用父亲的爱)通过类来new一个对象,但是创建对象后,对象还需要引用类中的变量,就好比父亲还要给你提供生活费一样。下面通过一个简单的代码进行对类和对象的进一步了解。//定义类public class Student{//类的首字母要大写 int id; String name;//属性 或者叫局部变量 int age;...原创 2019-10-23 09:15:50 · 1151 阅读 · 0 评论