Java
文章平均质量分 73
小的时候可菜了
这个作者很懒,什么都没留下…
展开
-
面向对象的好处
提到面向对象的好处,一些人脑中可能会冒出:封装继承多态封装封装:通过类,为数据和方法,提供统一的上下文但是,函数名,同样也可以提供上下文,并且可以通过一种叫柯里化的技巧,保存某些字段,从而实现类中成员变量的效果面向对象在封装中,没有体现出明显的优势 😔继承:其本质为复用,而通过函数,也可以实现复用 😔最后是多态:相同的接口,不同的行为使用方式在 Javascript 中,你同样可以将运算逻辑,存储到 map 中区别就在于:一个存储的是对象(类的实例),另一个存储的是函数。原创 2023-01-14 13:35:59 · 701 阅读 · 0 评论 -
Dubbo 服务注册与启动源码解析
Dubbo 服务注册与启动源码解析:通过画图的方式,更直观,清晰原创 2022-11-24 15:17:10 · 794 阅读 · 0 评论 -
Spring 事件基本使用
}注册其他:refresh、closed(Spring 内部提供)} }原创 2022-11-22 16:07:13 · 379 阅读 · 0 评论 -
Velocity 模板文件生成,基本使用
区别:如果存在 $name 和 $names,模板文件无法识别 $names,建议使用 ${names}${person.name} 等价于 ${person.getName()}在模板文件中,可以通过 $name 或 ${name} 来使用定义的变量。原创 2022-11-18 09:39:38 · 721 阅读 · 0 评论 -
抽象与面向对象
对概念的清晰定义,能够更好的理解概念所具备的共有属性,并与原有知识进行关联(知识之间往往具有很强的关联性)如果感觉自己的思路混乱,往往是因为对概念的理解只有一种大概的模糊性,尝试去提出问题,通过问题,将概念理清晰。原创 2022-11-11 14:48:17 · 418 阅读 · 0 评论 -
Java UML 类图
是一种“自顶向下”的设计:代码还未些,大致框架已规划好。弱拥有关系:宠物店可以有哈士奇,也可以没有。一个类,知道另一个类:警犬知道听从口令。得来,是一种“自底而上”的设计。耦合:修改一方,会影响另一方。应用:是否需要下“向上转型”行为的抽象、可跨越不同的类。必须拥有:鱼离开水不能存活。:人,有两只眼睛,一个鼻子。继承:重用父类的某些功能。原创 2022-11-06 20:54:03 · 828 阅读 · 0 评论 -
Netty - Reactor线程模型解析
一个非阻塞的例子:列表中有三份资源,在 while 循环中不断遍历,如果资源读取成功,从列表移除缺点:在绝大多数情况下,迭代的资源,都还未将数据准备好,因此,白白浪费了 CPU如何优化?定义一个监听器,监听列表,当列表中有资源读取成功,发送消息给监听器,监听器执行之后相应操作reactor 模式:是一种处理 I/O 操作的模式,如果受监控的某资源产生新事件,那就接触阻塞,对事件做出反应极简 netty 服务器。原创 2022-10-29 20:38:14 · 294 阅读 · 0 评论 -
模拟简易 Tomcat
TCP(英语:Transmission Control Protocol,传输控制协议) 是一种面向连接的、可靠的、基于字节流的传输层通信协议。是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。客户端程序创建一个套接字,并尝试连接服务器的套接字。,该方法将一直等待,直到客户端连接到服务器上给定的端口。主要内容来源以下代码,可自己 debug 试试。模拟的 tomcat,底层使用了。三次握手的目的:保证消息的可靠。,表示通过服务器上的端口通信。提供了两台计算机之间的。原创 2022-10-23 22:52:58 · 498 阅读 · 0 评论 -
Java 立即对类进行初始化的情况
将Class 文件加载到JVM 内存,整个生命周期:加载、连接(验证、准备、解析)、初始化、使用、连接其中,解析阶段,某些情况,可在初始化之后开始在初始化阶段,发生以下情况,会对类进行初始化。原创 2022-10-07 15:02:16 · 398 阅读 · 0 评论 -
Java 类文件结构整理
在 16 进制文件中,对应常量池结束后的。访问标识:表示类或接口的访问信息。接口索引集合:第一项为接口的数量。开头为常量池容量,u2 类型。总结一下,之后按着这个来。原创 2022-10-07 00:44:22 · 402 阅读 · 0 评论 -
Mybatis 实现原理
解析出这些内容后,必定要存储,于是用到了 Configuration 类:将 xmlFile(对数据库的操作)的信息,封装到 Configuration 类中。根据 mapper.xml 的信息,namespace 对应 IDAO的位置,select 等对应 SQL 语句,通过解析 XML,可获取这些内容。如果要强行解释的话,那么我的强行解释就是,Factory,从语义上可以理解为创建 xxx 的工厂,很规范。相同的IDAO接口,可有不同的实现方式,甚至,所使用的数据库也可能不同。原创 2022-10-01 20:55:58 · 1180 阅读 · 3 评论 -
Spring源码流程图
它俩在应用上下文的refresh()方法下,实例化自身之后(因为getBeanOfType内调用了getBean方法),一个是立即调用,一个是添加。并调用postProcessBeanFactory(BeanFactory的后置处理方法),(实例化之后就立即调用)实例化所有继承了BeanFactory后置处理器接口的Bean,FactoryBean:工厂Bean,用于创建Bean的Bean。实现了FactoryBean接口的Bean虽然本身也是Bean,实例化所有继承了Bean后置处理器接口的Bean,原创 2022-09-27 22:53:39 · 1043 阅读 · 0 评论 -
ThreadLocal 实现原理
ThreadLocal 的作用是,对某一共享变量的操作,仅对当前线程可见。原创 2022-09-21 23:58:03 · 244 阅读 · 0 评论 -
ReentrantLock 实现原理
多线程情况下,sum++,因线程切换导致并发问题,因此需给导致并发问题的代码加锁。原创 2022-09-11 17:15:44 · 236 阅读 · 0 评论 -
Synchonized 实现原理
原子性是导致线程不安全的一个因素之一比如使用寄存器中的值,而该值已被其他线程修改过,从而造成非预期的结果,典型例子就是多线程同时++一个值可以使用 synchronized 保护可能存在线程安全的代码,对这些代码进行加锁。原创 2022-09-09 12:39:45 · 282 阅读 · 0 评论 -
Servlet Error instantiating servlet class NoSuchMethodException
原因竟然是class不是public。原创 2022-07-16 19:55:35 · 247 阅读 · 0 评论 -
java 基础问题
java产生的背景早期的JavaThe Java language was initially called OAK.Originally, it was developed for handling portable devices and set-top boxes. Oak was a massive failure.In 1995, Sun changed the name to “Java” and modified the language to take advantage of t原创 2021-04-14 15:37:19 · 266 阅读 · 0 评论 -
重写equals方法的时候为什么需要重写hashCode方法呢
浅谈Java中的hashcode方法equals是保证逻辑上的相同,如一个Perspn类有name和age属性,下面的equals表明如果name和age相同,他们就是同一个人@Overridepublic boolean equals(Object obj) { // TODO Auto-generated method stub return this.name.equals(((People) obj).name) && this.age == ((People)原创 2021-04-07 11:09:38 · 78 阅读 · 0 评论 -
Java 并发
来自《Java 并发编程之美》只是摘抄,方便回顾,具体可以看书进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位线程是进程的一个执行路径,CPU分配的基本单位一个进程中有多个线程,多个线程共享进程的堆和方法区资源,但是每个线程有自己的程序计数器和栈区域程序计数器:记录该线程让出CPU时的执行地址的线程创建与运行Threadclass ThreadTest { //继承Thread类并重写run方法 public static class MyThread e原创 2021-03-31 17:03:32 · 111 阅读 · 0 评论 -
Java 反射及动态代理基本使用
Class类与Class对象的区别?Class类:Class类是一个实实在在的类,存在于java.lang 包中,是所有自定义类的原型,JAVA程序运行时,每个自定义类本身也是Class类的实例化对象Class对象:每一个类都有一个Class对象,每当编译一个新类就产生一个Class对象(一个类不会产生多个Class对象),Class对象保存在同名.class的文件中。Class对象由虚拟机自动生成,因此不能显示声明,它的作用是表示运行时类型信息,通过它我们可以创建这个类的所有对象Class对象对应着原创 2021-03-20 10:55:29 · 302 阅读 · 1 评论 -
Kotlin lambda
需求:确定一个集合最长的单词是哪个fun for_to_max() { val list = listOf<String>("a","bwq","cqwesad","ds","wqee") var max = "" for (i in list){ if (i.length > max.length) max = i } println(max)}fun main() { val list =原创 2021-02-20 22:15:29 · 84 阅读 · 1 评论 -
Kotlin 入门
先问个问题,java代码是怎么运行的?答案是先使用 javac 将 .java 文件编译成 .class 文件,然后再由 java 虚拟机 执行 .class 文件那么是不是即使不是 .java 文件,只要编译器最后运行的结果为 .class 文件,java虚拟机都可以运行呢?答案是:是的只要符合 class 文件的文件规则,java虚拟机都能识别出来这就是 Kotlin 的工作原理,将代码编译成 .class 文件Kotlin 有哪些优点呢?语法简洁语法更高级安全性与 java 100原创 2021-02-20 15:26:06 · 291 阅读 · 2 评论 -
回调
js中的回调函数A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.函数a有一个参数,这个参数是个函数b,当函数a执行完以后执行函数b。那么这个过程就叫回调。回调函数(b):以参数形式传给函数afunction a(callback){ alert("我是parent函数a!.原创 2021-02-20 14:34:25 · 346 阅读 · 0 评论 -
JAVA基本数据类型
在字节码中byte、short、char、boolean:都以int型来保存long类型要在数字后面加个Lfloat类型要在数字后面加个F类型转换都是小范围向大范围转换,大范围往小范围转化需要用到强制转换例如:int a=12; // int 相比于 double 是小范围,可以直接转换double b=a;double a=3.0; // double 相比于 int 是大范围,后面需要强制转换int b=(int)a; int跟char之间的转换是通过ASCII转化的; 例..原创 2021-02-19 21:56:29 · 88 阅读 · 0 评论 -
Activity 生命周期
一个 Activity 在其生命周期中会经历多种状态。您可以使用一系列回调来处理状态之间的转换onCreate()您必须实现此回调,它会在系统创建您的 Activity 时触发。您的实现应该初始化 Activity 的基本组件:例如,您的应用应该在此处创建视图并将数据绑定到列表。最重要的是,您必须在此处调用 setContentView() 来定义 Activity 界面的布局。onCreate() 完成后,下一个回调将是 onStart()。onStart()onCreate() 退出原创 2021-02-18 20:02:45 · 122 阅读 · 0 评论 -
JAVA基础面试问题
JAVA基础进程和线程的区别进程(堆、栈):对于操作系统来说,一个任务就是一个进程程序的一次执行,是系统进行资源分配和调度的独立单位,作用是程序能够并发执行,提高资源利用率和吞吐率有些进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread),比进程更小的能独立运行的基本单位,进程的一个实体线程(程序计数器、寄存器和栈)基本不拥...原创 2021-02-08 14:43:25 · 213 阅读 · 1 评论 -
HashMap
HashMapHashMap 是一个散列表,通过 key 可以得到 value 的值 存储时都是用(key,value)形式它是由数组和链表组合构成的数据结构数组里存在Key-Value这样的实例,在Java7叫 Entry 在Java8中叫Node。本身所有的位置都为null,在put插入的时候会根据key的hash去计算一个index值数组容量是有限的,数据多次插入的,到达一定的数量就会进行扩容,也就是resize什么时候resize呢?Capacity:HashMap当前长度。Lo原创 2021-02-05 12:57:25 · 105 阅读 · 0 评论 -
从零开始学Spring
学习就是知道未知的事情,如何向一个人解释清楚一个他未知的概念?答案就是用已知的概念去类比他未知的概念spring 是什么? 有什么用?spring 是java的一个框架目的是为了解决企业开发的复杂性(可以使java程序更快速,更简便,更安全)怎么解决程序之间的复杂性?将所有程序集中放入一个中间件,进行集中式的管理bean是什么?包装过的对象,包装的目的:统一规格什么是IOC?(幼儿园招生的过程)(解耦,将一堆小朋友交到一个地方)IoC - Inversion of Control, 控原创 2021-02-04 12:33:20 · 127 阅读 · 0 评论 -
Spring 官方文档笔记
Spring IoC Container and Beans 的介绍Inversion of Control(IOC 就是控制反转)它是对象定义它们依赖的一个过程对象定义它们依赖仅仅通过构造函数的参数,工厂方法的参数、构造或从工厂方法返回对象实例后,在对象实例上设置的属性BeanFactory接口提供了一种高级配置机制,它能够管理任何类型的对象ApplicationContext 是 BeanFactory 的子类 ,它代表了 Spring IoC container ,负责实例化、配置和组装b原创 2020-11-03 15:15:53 · 118 阅读 · 0 评论 -
Mybatis-分页
分页<select id="listCategory" resultType="Category"> select * from category_ <if test="start!=null and count!=null"> limit #{start},#{count} </if></select>TestMap<String,Object> params = new HashMap<>();params原创 2020-11-02 12:42:58 · 76 阅读 · 0 评论 -
Mybatis-注解
注解public interface CategoryMapper { @Select(" select * from category_ ") public List<Category> list(); @Select("select * from category_ where id= #{id} ") public Category get(int id); @Insert(" insert into category_ ( na原创 2020-11-02 11:10:50 · 96 阅读 · 0 评论 -
Mybatis-动态SQL
动态SQLif<!-- resultType 和实体类关联起来 --><select id="listProduct" resultType="Product"> select * from product_ <if test="name!=null"> <!-- #{name}会自动获取传进来对象的name属性值--> where name like concat('%',#{name},'%') </if> </原创 2020-11-02 10:08:43 · 79 阅读 · 0 评论 -
Mybatis 的基础使用
why have Mybatis?平时我们都用JDBC访问数据库,除了需要自己写SQL之外,还必须操作Connection, Statement, ResultSet 这些其实只是手段的辅助类。 不仅如此,访问不同的表,还会写很多雷同的代码,显得繁琐和枯燥就像这样现在,只要这样具体的sql语句都写在了xx.xml文件里这样的文件说明什么???代码可以复用!!!不用写重复的代码了,只要引用这个文件就代码执行了这个sql语句环境准备Java 连接 MySQL 需要驱动包我们需要用到原创 2020-11-01 20:23:50 · 181 阅读 · 0 评论 -
注释规约
/** 类名使用 UpperCamelCase 风格 类、类属性、类方法的注释必须使用 Javadoc 规范 内容格式,不得使用// xxx 方式* */public class CodeFormat { // 注释在前面,双斜杠之后要有个空格 public static void main(String[] args) { // 采用 4 个空格缩进,禁止使用 tab 字符 } /*方法名、参数名、成员变量、局部变量都统一使用 lowerCamelC原创 2020-10-31 22:32:51 · 120 阅读 · 0 评论 -
Spring refresh方法
Spring IOC 容器源码分析原创 2020-10-10 19:14:07 · 2116 阅读 · 2 评论 -
实现Spring autowired
首先,我们有这两个类public class UserController { private UserService userService ; public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService;原创 2020-10-08 22:49:32 · 150 阅读 · 0 评论 -
Java IO类
输入流:将<存储设备>中的内容读入到<内存>中。输出流:将<内存>中的内容写入到<存储设备>中。节点流:具有实际传输数据的读写功能。过滤流:在节点流的基础之上增强功能。所有在java.io中的类都将相对路径名解释为以用户工作目录开始,通过下面代码来获取这个信息System.out.println(System.getProperty("user.dir")); //用户工作目录 io类的相对路径字节流:以字节为单位的流字节流的父类Inpu原创 2020-10-08 11:04:27 · 141 阅读 · 0 评论 -
Java 中的 getResource 方法
(3)应用程序类加载器(ApplicationClassLoader), 主要负责加载用户自定义的类以及classpath环境变量所配置的jar包的。就是如果一个类加载器(用来加载 class 文件)收到了类加载的请求,首先不会自己尝试去加载这个类,二十把这个请求委派给父类加载器去完成。另外Class.getResource和ClassLoader.getResource的区别,就是在加载资源文件的时候,加载方式的不同Class.getResource多了个resolveName方法。原创 2020-10-07 12:12:16 · 14404 阅读 · 0 评论 -
JAVA lambda表达式
lambda表达式可以干什么呢?创建可以在将来某个时间点执行的代码块了解lambda之间,先知道什么是函数式接口函数式接口,顾名思义,它是一个接口,它还有个特点,就是只有一个抽象方法java需要这种接口的对象时,就可以通过lambda表达式来构造也就是说lambda表达式可以用来构造只有一个抽象方法的接口函数式接口的特点:只有一个抽象方法 ,所以我们只关注它的参数类型,参数个数和返回值,这个抽象方法起什么名字 ,好像并不是那么不重要现在我们来创建一个函数式接口,这个接口用来打印某些东西pu原创 2020-09-21 18:41:44 · 113 阅读 · 0 评论 -
java泛型
把到的时候才去明确的特殊的类型。原创 2020-07-10 16:17:16 · 123 阅读 · 0 评论