
Java基础
文章平均质量分 62
概览:1. 集合框架;2. 多线程及并发;3. 反射原理;4. 代理(动态代理);5. String、异常、IO、Hash Map等常用类方法汇总;6. NIO;7. Java 8新特性;8. 其他面试题目等
小蜗牛慢跑
一点点记录和记录总会进入大厂的
展开
-
Java8 Stream流操作&数组转化成集合
参考:添加链接描述添加链接描述流操作@Test public void testStreamOfMap(){ // 使用lambda表达式 Stream.of("apple", "banana", "orange", "waltermaleon", "grape") .map(s -> s.substring(0, 1)) .forEach(s -> System.out.println原创 2021-03-04 14:30:24 · 2287 阅读 · 2 评论 -
ASM 框架
来源声明今天介绍下ASM之前先思考几个问题:1.ASM是什么?2.ASM 跟传说中的AOP三剑客APT、aspectJ、Javassit有什么关系?3.ASM是怎样修改class文件的?1、ASM是什么?ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的原创 2020-09-13 22:12:18 · 3432 阅读 · 0 评论 -
CGLIB 动态代理
一、CGLIB动态代理概览:JDK 动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理,CGLIB 是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。二、什么是CGLIB1、它广泛的被许多AOP的框架使用,例如:Spring AOP和dynaop,为他们提供方法的interception(拦截);2、hibernate使用CGLIB来代理单端single-ended(多对一和一对原创 2020-09-13 21:44:57 · 130 阅读 · 0 评论 -
JDK 动态代理
备注:来源声明一、什么是代理代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。代理模式UML图:结构示意图:为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别。通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间,从而在设计上获得了更大的灵活性。Java 动态代理原创 2020-09-13 19:36:50 · 258 阅读 · 0 评论 -
Spring中的代理
Spring中有两种类型的代理:使用 JDK Proxy 类创建的 JDK 代理以及使用 DDLIB Enhancer 类创建的基于 CGLIB 的代理。代理的核心目标是拦截方法的调用,并在必要时执行适用于特定方法的通知链。通知的管理和调用基本上是独立于代理的,由 Spring AOP 框架管理。而代理主要负责拦截对所有方法的调用,并将它们根据需要传递给 AOP 框架,以便应用通知。此外,代理还必须支持一组附加功能,即可以通过 AopContext 类(这是一个抽象类)配置代理以公开自己,以便可以检索代理原创 2020-09-13 16:32:41 · 672 阅读 · 0 评论 -
设计模版
来源声明:菜鸟教程一、概述设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。作用:使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。分类:模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns),另一类设计模式:J2EE 设计模式。创建型模式:这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直原创 2020-09-12 21:56:26 · 101 阅读 · 0 评论 -
synchronized关键字的使用范围及其作用
1、修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;当两个并发线程访问同一个对象中的synchronized(this){}同步代码块时,同一时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块;当一个线程访问对象中的一个synchronized(this){}同步代码块时,另一个线程仍然可以访问该对象中的非synchronized(this){}同步代码块;当一个线程访问对象中的一个syn原创 2020-09-12 11:20:35 · 2838 阅读 · 0 评论 -
HashMap、Hashtable、HashSet
一、HashMap(API文档)//所在包package java.util;//继承关系public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {}HashMap是基于哈希表的Map接口的实现,当假设散列函数在桶之间正确地分散元素(均匀散列)时,基本读写操作( get和put )提供了常数(O(1))时间性能。Ha原创 2020-09-12 01:01:44 · 293 阅读 · 0 评论 -
String、StringBuilder、StringBuffer
一、概述//String类所在包package java.lang;//继承和实现关系public final class String implements java.io.Serializable, Comparable<String>, CharSequence {}String类表示字符串。 Java程序中的所有字符串文字(例如"abc" )都实现为此类的实例。字符串是不变的; 它们的值在创建后无法更改。 字符串缓冲区支持可变字符串。 因为String对象是不可变原创 2020-09-11 13:17:31 · 139 阅读 · 0 评论 -
Java基础优秀博文
并发编程(该作者不止一篇):https://blog.youkuaiyun.com/u014792301/article/details/106042708原创 2020-09-10 23:31:43 · 111 阅读 · 0 评论 -
HashMap类详解
HashMap:对于put、remove以及containsKey方法,averageTime(n)基本都是常量。1、HashMap类的方法描述//Constructs an empty HashMap with the specified initial capacity(初始容量) and load factor(加载因子).public HashMap(int initialCapacity, float loadFactor);//Constructs an empty HashMap w原创 2020-09-08 08:36:55 · 919 阅读 · 0 评论 -
Java8 新特性
一、Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。1、概述:理解Lambda表达式的Java实现,需要了解两个结构,分别是lambda表达式和函数式接口。lambda表达式本质上就是一个匿名(即未命名)方法。但是这个方法不是独立执行的,而是用于实现由函数式接口定义的另一个方法。因此,lambda表达式会导致产生另一个匿名类。lambda表达式也常被叫做闭包。函数式接口是仅包含一个抽象方法的接口。一般这个方法指了接口的目标用途,因此,函数式接口通常表示原创 2020-09-06 17:21:43 · 171 阅读 · 0 评论 -
Java异常处理
一、 异常机制的概述异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。程序错误分为三种:1.编译错误;2.运行时错误;3.逻辑错误。编译错误是因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置,这个也是大家在刚接触编程语言最常遇到的问题。运行时错误是因为程序在执行时,运行环境发现了不能执行的操作。逻辑错误是因为程序没有按照预期的逻辑顺序执行。异常也就是指程序运行时发生转载 2020-08-30 14:20:21 · 135 阅读 · 0 评论 -
java动态代理实现与原理详细分析
关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式–代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理。一、代理模式代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。简单的说就是,我们在访问实际对象转载 2020-08-29 18:52:15 · 153 阅读 · 0 评论 -
面试题
Java面试题:https://blog.youkuaiyun.com/qq_40949465/article/details/88766411?原创 2020-08-29 09:31:39 · 113 阅读 · 0 评论 -
Java反射
名词解释一、解释型语言和编译型语言1、解释型语言:不需要编译,在运行的时候逐行翻译解释;修改代码时可以直接修改,可以快速部署,不过性能上会比编译型语言稍差;比如 JavaScript、Python ;2、编译型语言:需要通过编译器将源代码编译成机器码才能执行;编译之后如果需要修改代码,在执行之前就需要重新编译。比如 C 语言;Java 严格来说也是编译型语言,但又介于编译型和解释型之间;Java 不直接生成机器码而是生成中间码:编译期间,是将源码交给编译器生成 class 文件(字节码),这个过程中原创 2020-08-29 07:24:29 · 147 阅读 · 0 评论 -
static、abstract、final关键字对比
Java中的关键字final修饰变量、方法、类分别表示什么含义?先看一个简单的介绍修饰对象解释说明备注类无子类,不可以被继承,更不可能被重写final类中的方法默认是final的方法方法不能在子类中被覆盖类的private方法会隐式地被指定为final方法。final方法不能被子类的方法覆盖,但可以被继承变量称为常量,初始化以后不能改变值用final修饰的成员变量表示常量,值一旦给定就无法改变!final修饰的变量有三种:静态变量、实例变量和局部变量,分.原创 2020-08-26 19:01:45 · 219 阅读 · 0 评论 -
IntelliJ IDEA 学习
IntelliJ IDEA 学习Mac常用快捷键IntelliJ IDEA 官方学习文档学习建议使用官方第一手资料,网上很多翻译的文档多是老版本,没有学习价值。个人觉得哪怕用谷歌翻译也比各种过时的中文版强。原创 2020-07-31 00:05:54 · 105 阅读 · 0 评论