
JAVA基础
CSU_Dennis
博主2019年6月毕业于中南大学计算机院
展开
-
list中除去所有null值
List.remove(Object o):删除一个元素,成功则返回true;需要注意它只删除一个; List.removeAll(Collection<?> c):删除存在集合c的所有情况,注意入参不是一个元素; List.removeIf(Predicate<? super E> filter):删除所有满足条件的元素,入参为Lambda表达式。例如:list....原创 2020-04-17 21:14:02 · 3117 阅读 · 0 评论 -
java8 stream().map().collect()用法
List<User> users = getList(); //从数据库查询的用户集合现在想获取User的身份证号码;在后续的逻辑处理中要用;常用的方法我们大家都知道,用for循环,List<String> idcards=new ArrayList<String>();//定义一个集合来装身份证号码for(int i=0;i<users....转载 2019-11-29 17:13:50 · 5289 阅读 · 1 评论 -
单点登录笔记
单点登录概念、原理CAS+Tomcat实现单点登录原创 2019-05-27 19:18:21 · 257 阅读 · 0 评论 -
中间件相关概念
原创 2019-04-28 08:49:07 · 475 阅读 · 0 评论 -
Java中的NIO,BIO,AIO分别是什么
同步阻塞IO(BIO):用户进程发起一个IO操作以后,必须等待IO操作的真正完成后,才能继续运行;同步非阻塞IO(NIO):用户进程发起一个IO操作以后,可做其它事情,但用户进程需要经常询问IO操作是否完成,这样造成不必要的CPU资源浪费;异步非阻塞IO(AIO):用户进程发起一个IO操作然后,立即返回,等IO操作真正的完成以后,应用程序会得到IO操作完成的通知。类比Future模式。...原创 2018-08-23 16:11:36 · 1483 阅读 · 1 评论 -
ConcurrentHashMap总结
ConcurrentHashMap采用了非常精妙的”分段锁”策略,ConcurrentHashMap的主干是个Segment数组。 Segment继承了ReentrantLock,所以它就是一种可重入锁(ReentrantLock)。在ConcurrentHashMap,一个Segment就是一个子哈希表,Segment里维护了一个HashEntry数组,并发环境下,对于不同Segment的...原创 2018-08-23 11:26:40 · 318 阅读 · 0 评论 -
hashmap总结
hashmap在面试的时候被问的很多,带着问题去了解是最好的 1、底层如何存储数据 2、如何确定元素存储以及如何处理hash冲突 3、扩容机制1、JDK1.8中,hashmap由数组+链表+红黑树 组成,JDK1.8引入红黑树大程度优化了HashMap的性能 2、hashmap中有一个内部类Node,Node是HashMap的一个内部类,实现了Map.Entry接口,本质是就是一个映射...原创 2018-08-23 10:35:04 · 272 阅读 · 0 评论 -
volatile
volatile是一个类型修饰符(type specifier),它是被设计用来修饰被不同线程访问和修改的变量。在使用volatile修饰成员变量后,所有线程在任何时间所看到变量的值都是相同的。此外,使用volatile会组织编译器对代码的优化,因此会降低程序的执行效率。所以,除非迫不得已,否则,能不使用volatile就尽量不要使用volatile...原创 2018-08-22 11:07:53 · 186 阅读 · 0 评论 -
java反射机制
在程序运行时通过类名获取类的信息Class c = Class.forName("类的名字");Object obj = c. newInstance();return obj; 在框架中就是将类名作为配置文件中参数通过反射机制创建的对象...原创 2018-07-24 10:28:50 · 197 阅读 · 0 评论 -
hash冲突解决方法
基本思路:当发生冲突时,通过哈希冲突函数产生一个新的哈希地址,如果仍然有冲突,则继续计算直到不冲突为止1、开放定址法 以发生冲突的哈希地址为自变量,通过线性探查法、平方探查法、伪随机序列法、双哈希函数法等处理得到一个新的空闲的哈希地址2、拉链法(hashmap处理冲突解决方法) 拉链法 的实现比较简单,将链表和数组相结合。也就是说创建一个链表数组,数组中每一格就是一个链表。若...原创 2018-06-24 11:06:34 · 311 阅读 · 0 评论 -
二叉排序树、平衡二叉树、红黑树概念
二叉排序树:1、如果它左子树非空,则左子树上所有元素的值均小于根元素的值2、如果它右子树非空,则右子树上所有元素的值均大于根元素的值3、左,右子树本身又各是一棵二叉排序树平衡二叉树:一棵二叉树中每个结点的左、右子树的高度至多相差1,则此二叉树为平衡二叉树(平衡因子:|左子树高度-右子树高度| <= 1 即平衡因子为1、0、-1 )...原创 2018-06-24 09:47:59 · 558 阅读 · 0 评论 -
Tomcat 基本概念、原理
Tomcat 多被用作于中小型应用服务器最重要的就是Connector和Container组件Connector组件:1、接受客户端连接2、加工处理客户端请求通俗理解:如果Tomcat是个城堡,那么Connector组件就是城门,城堡可能有多个城门,则代表有多个通道。Container组件:1、所有的子容器的父接口2、责任链设计模式...原创 2019-05-23 15:17:59 · 370 阅读 · 0 评论 -
Tomcat常用配置项修改
Tomcat端口号例如:8009负责监听关闭Tomcat经典的默认端口8080,负责建立HTTP请求内存server 是虚拟机的运行模式,多个CPU时有更好的性能Xms 是java heap初始大小,物理内存的1/64,最大不超过物理内存80%,又叫堆内存Xmx 是java heap最大值,建议设置成物理内存的一半metaspaceSize:初始源空间大...原创 2019-05-23 16:46:37 · 398 阅读 · 0 评论 -
接口和抽象类对比、默认访问权限
默认访问权限:接口JDK 1.8前,接口中的方法必须是publicJDK 1.8,接口中的方法可以是public的,也可以是defaultJDK 1.9,接口中的方法可以是private抽象类JDK 1.8前,抽象类的方法默认访问权限为protectedJDK 1.8,抽象类的方法默认访问权限变为default...原创 2019-07-09 09:37:53 · 1093 阅读 · 0 评论 -
对象创建步骤
原创 2019-07-11 11:07:47 · 320 阅读 · 0 评论 -
异常总结
原创 2019-07-11 11:02:12 · 192 阅读 · 0 评论 -
变量、方法初始化顺序
父静态变量 ——> 父静态代码块——> 子静态变量——> 子静态代码块——> 父非静态变量——> 父非静态代码块——> 父构造函数——> 子非静态变量——> 子非静态代码块——> 子构造函数...原创 2019-07-11 10:45:41 · 189 阅读 · 0 评论 -
static
1、为特定数据类型或对象分配单一的存储空间,为创建对象个数无关2、static成员变量为类变量;通过类名可以直接调用静态方法,静态方法可以直接调用本类的静态成员,不能直接用非静态(创建类对象后可以用)3、static成员方法中不能用this,super,因为static方法被调用时,类对象可能还没被创建4、static代码块:JVM加载类时执行static代码块,只会执行一次...原创 2019-07-11 10:43:21 · 168 阅读 · 0 评论 -
super关键字
1、子类构造过程中必须调用其父类构造方法2、子类的构造方法没有显示调用父类的构造方法,则默认调用父类无参构造方法3、如果显示调用,必须在子类构造方法第一行4、无显示调用,父类也无无参构造方法,编译出错...原创 2019-07-11 10:32:10 · 194 阅读 · 0 评论 -
final关键字
1、final修饰类,不能被继承2、final修饰方法,不能被重写3、final修饰属性,不可变4、final修饰变量,只能赋一次值,即常量原创 2019-07-11 10:29:05 · 156 阅读 · 0 评论 -
访问修饰符权限
本类 同包 子类 其他public √ √ √ √protected ...原创 2019-07-11 09:45:14 · 250 阅读 · 0 评论 -
重载与重写
首先要明确的是:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载:1.发生在一个类中2.要求同名方法的参数列表不同(参数有无,参数类型,参数个数,参数顺序)3.返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准重写 : (两同两小一大)1.发生在父类与子类之间2.方法名,参数列表必须相同...原创 2019-07-09 09:58:51 · 202 阅读 · 0 评论 -
匿名内部类
java中的匿名内部类总结匿名内部类也就是没有名字的内部类正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口实例1:不使用匿名内部类来实现抽象方法 1 2 3 4 5 6 7 8 9 10 11 12...转载 2019-07-03 16:15:31 · 164 阅读 · 1 评论 -
哈夫曼树概念
带权路径长度WPL最小的二叉树成为哈夫曼树(最优二叉树)原创 2018-06-24 09:22:32 · 418 阅读 · 0 评论 -
运算符优先级 简单记忆版
单目乘除位关系,逻辑三目后赋值。 单目:单目运算符+(正数) –(负数) ++(自加) --(自减) 等 乘除:算数单目运算符* / % + - (加减乘除余)位:位移单目运算符<< >> (左移、右移)关系:关系单目运算符> < >= <= == != (大于、小于、等于、不等)逻辑:逻辑单目运算符&& || & | ^ (...原创 2018-06-22 19:32:06 · 1519 阅读 · 1 评论 -
垃圾收集概念、垃圾收集算法
垃圾收集弄清3个问题1、哪些内存需要回收 2、何时回收 3、怎么回收(垃圾收集算法)垃圾收集概念:有效自动监测对象是否超过作用域而达到自动回收内存的目的。引用计数算法:给对象加一个引用计数器,用到的时候+1,引用失效的时候-1,当计数器为0时对象可能不再被使用优点:实现简单,效率高缺点:如两个对象互相引用,A.instance = B, B.instance = A 这两个对象都不...原创 2018-06-14 10:11:57 · 340 阅读 · 0 评论 -
java中集合总结
原创 2018-03-11 10:39:32 · 517 阅读 · 0 评论 -
Apache/Tomcat/JBOSS/Nginx区别
总结:Apache/Tomcat/JBOSS/Nginx区别 .1、Apache是Web服务器,Tomcat是应用(Java)服务器。Tomcat在中小型系统和并发访问用户不是很多的场合下被普遍使用。Apache支持静态页,Tomcat支持动态的。2、Jetty:Tomcat内核作为其Servlet容器引擎,并加以审核和调优.大中型系统可以应用。能够提供数据库连接池服务,还支持其他 Web转载 2017-04-24 19:02:56 · 413 阅读 · 0 评论 -
面向对象和面向过程
面向对象就是:把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。封装:将对象的属性与行为封装起来,其载体就是类。类通常对用户隐藏了其实现细节,用户可以使用但不知道其内部结构继承:一个类的基础上加入...原创 2017-06-06 14:52:00 · 375 阅读 · 0 评论 -
JVM加载class文件的原理机制
JVM加载class文件的原理机制1.Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中 2.java中的类大致分为三种: 1.系统类 2.扩展类 3.由程序员自定义的类 3.类装载方式,有两种 1.隐式装载, 程序在运行过程中当碰到通原创 2017-04-19 14:17:27 · 637 阅读 · 0 评论 -
4种创建对象的方法
[java] view plain copy public class Dog{ public Dog(){ super(); } } 1、创建对象有什么难的,我们new一个就是的………………对,没错,这只是其中一种[ja转载 2017-05-08 16:08:26 · 537 阅读 · 4 评论 -
值传递和引用传递的区别
1:按值传递是什么指的是在方法调用时,传递的参数是按值的拷贝传递。示例如下:[java] view plain copypublic class TempTest { private void test1(int a){ //做点事情 } public static void main(String[] arg转载 2017-05-08 15:22:56 · 716 阅读 · 0 评论 -
static和final的位置问题
static和final的位置问题"效果上"耗无区别但是习惯上是 类型名 紧跟在 final 的后面如 final int习惯上的通用格式为[访问限定符] [static] [final] [类型名]除了类型名其他三个修饰符的位置可以随意互换public static final int --> 通常用法, 可读性高原创 2017-04-24 08:37:57 · 2115 阅读 · 0 评论 -
垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。转载 2017-04-19 14:37:12 · 1001 阅读 · 0 评论 -
heap与stack的区别
1.Java中对象都是分配在heap(堆)中。从heap中分配内存所消耗的时间远远大于从stack产生存储空间所需的时间。 (1)每个应用程序运行时,都有属于自己的一段内存空间,用于存放临时变量、参数传递、函数调用时的PC值的保存。这叫stack。 (2)所有的应用可以从一个系统共用的空间中申请供自己使用的内存,这个共用的空间叫heap。 (3)stack中的对象或变量只要定义转载 2017-04-19 14:25:45 · 658 阅读 · 0 评论 -
《Java虚拟机》必知必会——十四个问题总结(内存模型+GC)
一、Java概述1、Java相较于PHP、C#、Ruby等一样很优秀的编程语言的优势是什么? (1)体系结构中立,跨平台性能优越。Java程序依赖于JVM运行,javac编译器编译Java程序为平台通用的字节码文件(.class),再由JVM与不同操作系统匹配,装载字节码并解释(也有可能是编译,会在第三个问题中说到)为机器指令执行。 (2)安全性优越。通过JVM与宿主环境隔离,且J转载 2017-07-13 11:17:44 · 367 阅读 · 0 评论 -
java内存溢出处理方法
一、堆溢出 1、通过内存映像分析工具(如Eclipse Memory Analyzer)确认是内存泄漏还是内存溢出,也就是确认内存中对象是否有 存在的必要。 2、如果是内存泄漏,则进一步通过工具看对象到GC Roots的引用链,从而确定路径,掌握对象信息确定代码位置。 如果是内存溢出,也就是对象必须活着则检查堆参数(-Xmx,-Xms)看是否可以调大...原创 2018-06-13 17:25:31 · 382 阅读 · 0 评论 -
对象的内存布局,对象的创建步骤
对象的内存布局:1、对象头(Header):存储对象自身运行时数据,如:哈希码、GC分代年龄、锁状态标志等。2、实例数据(Instance Data):真正存储的有效信息,如代码中定义各种类型的字段内容。3、对齐填充(padding):不是必须的,起着占位符的作用(对象起始地址必须是8字节的整数倍)。普通对象的创建步骤:...原创 2018-06-13 17:09:37 · 308 阅读 · 0 评论 -
JVM内存(运行时数据区)和直接内存 概念
JVM内存分为5块,其中1--3为线程隔离,4、5为线程共享。线程隔离:1、程序计数器:分支,循环跳转、异常处理、线程恢复等作用(唯一一个没有规定outofmemoryError的内存区)。2、VM stack,虚拟机栈:主要用来存放局部变量表(八种基本数据类型,对象引用也就是对象地址)。3、本地方法栈:与VM stack相似,但不同的是VM stack为JVM执行java方法服务,本地方法栈为J...原创 2018-06-13 16:55:56 · 2774 阅读 · 0 评论 -
什么是java序列化,如何实现java序列化?
序列化是一种处理对象流的机制,对象流即将对象的内容流化,可以对流化的对象进行读写操作。实现:将需要被序列化的类实现serializable接口,然后使用一个输出流(如FileOutputStream)来构造一个对象流: ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(test.txt)); os.w...原创 2017-04-19 13:53:28 · 406 阅读 · 0 评论