Java 学习笔记
文章平均质量分 76
从 零 开始学习 Java
姜皓
胸藏文墨怀若谷 腹有诗书气自华
展开
-
Docker 的优点和注意事项
Docker 的优点和注意事项1)什么是 Docker ?2)Docker 常用命令3)Docker 可能存在的问题Docker 从 2013 年发展到现在,它的普及率已经可以和最常用的 MySQL 和 Redis 并驾齐驱了,Docker 是什么?它有什么优点?1)什么是 Docker ?Docker 是一个开源(开放源代码)的应用容器引擎,可以方便地对容器进行管理。可通过 Docker 打包各种环境应用配置,比如安装 JDK 环境、发布自己的 Java 程序等,然后再把它发布到任意 Linux 机原创 2020-11-25 14:21:42 · 1531 阅读 · 0 评论 -
Nginx 的负载均衡模式及实现原理
Nginx 的负载均衡模式及实现原理1)什么是 Nginx?2)负载均衡策略2.1)轮询策略2.2)最少连接数负载均衡2.3)加权负载均衡2.4) ip-hash 负载均衡3)健康检测4)Nginx 缓存5)总结1)什么是 Nginx?Nginx 是一款开源的高性能轻量级 Web 服务器(也叫 HTTP 服务器),它主要提供的功能是:反向代理、负载均衡和HTTP 缓存。它于 2004 年首次公开发布,2011 年成立同名公司以提供支持,2019 年 3 月被 F5 Networks 以 6.7 亿美元收原创 2020-11-25 10:53:18 · 1646 阅读 · 0 评论 -
Java 源码剖析(31)--TCP 为什么需要三次握手
TCP 为什么需要三次握手1)什么是 TCP?2)为什么 TCP 需要三次握手?2.1)原因一:防止重复连接2.2)原因二:同步初始化序列化3)什么是 UDP?4)TCP 和 UDP 的区别5)总结首先我们需要搞清楚两个概念,第一,什么是 TCP?第二,什么是 TCP 连接?只有搞明白了这两个问题,我们才能彻底搞懂为什么 TCP 需要三次握手?1)什么是 TCP?首先来说 TCP(Transmission Control Protocol,传输控制协议)是一个面向连接的、可靠的、基于字节流的传输层协议原创 2020-11-24 17:50:07 · 241 阅读 · 0 评论 -
Java 源码剖析(30)--如何保证接口的幂等性
如何保证接口的幂等性1)前端拦截2) 数据库实现2.1)通过悲观锁来实现幂等性2.2)通过唯一索引来实现幂等性2.3) 通过乐观锁来实现幂等性3)JVM 锁实现4)分布式锁实现5)幂等性注意事项6)幂等性的关键步骤幂等性问题说的就是如何防止接口的重复无效请求,幂等性最早是数学里面的一个概念,后来被用于计算机领域,用于表示任意多次请求均与一次请求执行的结果相同,也就是说对于一个接口而言,无论调用了多少次,最终得到的结果都是一样的。比如以下代码:public class IdempotentExample原创 2020-11-24 15:42:12 · 1264 阅读 · 0 评论 -
单例的实现方式及其优缺点
单例的实现方式及其优缺点1)单例的实现方式2)双重检测锁3)单例其他实现方式4)小结单例模式是 Java 中最简单的设计模式之一,它是指一个类在运行期间始终只有一个实例,我们就把它称之为单例模式。它不但被应用在实际的工作中,而且还是面试中最常考的题目之一。1)单例的实现方式单例的实现分为饿汉模式和懒汉模式。顾名思义,饿汉模式就好比他是一个饿汉,而且有一定的危机意识,他会提前把食物囤积好,以备饿了之后直接能吃到食物。对应到程序中指的是,在类加载时就会进行单例的初始化,以后访问时直接使用单例对象即可。饿原创 2020-11-19 11:11:48 · 347 阅读 · 0 评论 -
Java 源码剖析(25)--生产环境如何排除和优化 JVM
垃圾回收算法1)如何判断一个对象是否“死亡”2)垃圾回收的算法有哪些?3)GC Roots死亡对象判断说到 Java 虚拟机不得不提的一个词就是 “垃圾回收”(GC,Garbage Collection),而垃圾回收的执行速度则影响着整个程序的执行效率。1)如何判断一个对象是否“死亡”垃圾回收器首先要做的就是,判断一个对象是存活状态还是死亡状态,死亡的对象将会被标识为垃圾数据并等待收集器进行清除。判断一个对象是否为死亡状态的常用算法有两个:引用计数器算法和可达性分析算法。引用计数算法(Refere原创 2020-09-23 15:51:28 · 335 阅读 · 0 评论 -
Java 源码剖析(23)--JVM 的内存布局和运行原理
JVM 的内存布局和运行原理1)JVM 的内存布局1.1)堆1.2)方法区1.3)程序计数器1.4)虚拟机栈1.5) 本地方法栈2)类的生命周期2.1)加载阶段2.2) 验证阶段2.3)准备阶段2.4)解析阶段2.5) 初始化JVM(Java Virtual Machine,Java 虚拟机)顾名思义就是用来执行 Java 程序的“虚拟主机”,实际的工作是将编译的 class 代码(字节码)翻译成底层操作系统可以运行的机器码并且进行调用执行,这也是 Java 程序能够“一次编写,到处运行”的原因(因为它会原创 2020-09-13 10:55:40 · 209 阅读 · 0 评论 -
JavaWeb学习(09)--Response对象与ServletContext对象
HTTP&&Response对象&&ServletContext对象1)HTTP协议2)Response对象功能3)案例完成重定向特点路径写法服务器输出字符数据到浏览器服务器输出字节数据到浏览器验证码4)ServletContext对象5)文件下载案例需求分析步骤问题1)HTTP协议代码:https://gitee.com/jianghaok/Login.git概念:Hyper Text Transfer Protocol 超文本传输协议传输协议:定义了客户端原创 2020-05-16 17:05:10 · 192 阅读 · 0 评论 -
Java线程--概念与原理
Java线程概念与原理操作系统中线程和进程的概念Java线程的实现形式继承Thread类实现Runnable接口使用Callable和Future接口创建线程。操作系统中线程和进程的概念现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是...转载 2019-11-08 10:26:48 · 242 阅读 · 0 评论 -
Java设计模式--工厂模式
工厂模式工厂模式静态工厂模式工厂方法模式抽象工厂模式1. 产品2. 产品族Factory3. Client使用静态工厂优化抽象工厂小结工厂模式工厂模式用工厂方法代替了new操作, 将选择实现类, 创建对象统一管理和控制.从而将调用者(Client)与实现类进行解耦.实现了创建者与调用者分离;使用场景JDK中Calendar的getInstance方法;JDBC中Connec...转载 2019-11-08 09:36:08 · 215 阅读 · 0 评论 -
详解面试中常考的 Java 反射机制
详解面试中常考的 Java 反射机制反射(Reflection)是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性和方法。关于反射,常见的面试考察点包括:如何反射获取 Class 对象如何反射获取类中的所有字段如何反射获取类中的所有构造方法如何反射获取类中的所有非构造方法反射是什么?反射...转载 2019-11-01 17:49:37 · 421 阅读 · 0 评论 -
Java设计模式--单例模式
单例模式Java设计模式--单例模式单例模式简述单例模式创建1.饿汉式单例2.懒汉式单例单例模式区别Java设计模式–单例模式设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式;设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索。简单来说,设计模式就是在实际编程过程中逐渐摸索出来的解决问题的套路。单例模式简述所谓类的单例设...原创 2019-10-30 11:03:02 · 425 阅读 · 0 评论 -
Java中的事务及使用
Java中的事务及使用什么是事务?为什么要事务?事务的4个特性(ACID):Java有几种类型的事务?1.JDBC事务2.JTA事务1)JTA的构成2)JTA的主要接口位于javax.transaction包中3)JTA编程的基本步骤JTA的优缺点:3、Spring容器事务1)、Spring JDBC事务2)、Hibernate事务3)、Java持久化API事务(JPA)什么是事务?事务(Tr...转载 2019-10-29 10:00:12 · 753 阅读 · 0 评论 -
23、Java中类对象的实例化过程
Java中类对象的实例化过程简单类对象的实例化过程示例代码:public class Person{ public Person(){ } int age = 1; String name = "zhangsan"; int sex = 0 ; public void showInfo(){ System.out.printl...原创 2019-10-29 09:25:13 · 564 阅读 · 0 评论 -
Java--【Java容器】ArrayList全解析
ArrayList全解析一、ArrayList结构图ArrayList 是 java 集合框架中比较常用的数据结构了,继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化,允许 null 的存在,同时还实现了 RandomAccess、Cloneable、Serializable 接口,所以ArrayList 是支持快速访问、复制、序列化的。...转载 2019-10-23 16:14:02 · 393 阅读 · 0 评论 -
Java--【IO流】IO流学习总结
Java IO流学习总结IO是指对数据流的输入和输出,也称为IO流,IO流主要分为两大类,字节流和字符流。字节流可以处理任何类型的数据,如图片,视频等;字符流只能处理字符类型的数据。【IO流的本质是数据传输,并且流是单向的】Java流操作有关的类或接口Java流类图结构IO流的分类字符流和字节流字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作...转载 2019-10-23 11:18:26 · 184 阅读 · 0 评论 -
Java--【面向对象】int与Integer的区别
int与Integer的区别一、int与Integer的基本使用对比 Integer是 int 的包装类;int 是基本数据类型; Integer变量必须实例化后才能使用;int 变量不需要; Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ; Integer的默认值是null;int的默认值是0。 二、int与...转载 2019-10-22 21:31:22 · 222 阅读 · 0 评论 -
Java--【面向对象】Java中重载与重写的区别
Java中重载与重写的区别一、重载(Overloading) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载是一个类中多态性的一种表现。 Java的方法重载就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性...转载 2019-10-22 14:36:51 · 195 阅读 · 0 评论 -
Java--【面向对象】Java中==, equals 和 hashCode 的区别与联系
Java中==、equals 和 hashCode 的区别与联系一、概述概念: == : 该操作符生成的是一个boolean结果,它计算的是操作数的值之间的关系 equals : Object 的 实例方法,比较两个对象的content是否相同 hashCode : Object 的 native方法, 获取对象的哈希值,用于确定该对象在哈希表中的索引位置,它实...转载 2019-10-22 13:50:55 · 578 阅读 · 0 评论 -
Java--【面向对象】Java的反射机制
Java的反射机制反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取信息以及动态调用对象的方法称为java语言的反射机制。【翻译于 官方文档】本篇将从以下几个方面讲述反射的知识: class的使用 方法的反射 构造函数的反射 成员变量的反射 一、什么是class类...转载 2019-10-22 13:22:32 · 145 阅读 · 0 评论 -
Java--【面向对象】最全面的泛型详解
最全面的泛型详解泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。泛型的本质:为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参...转载 2019-10-22 10:56:21 · 287 阅读 · 0 评论 -
Java--【面向对象】内部类和静态内部类的区别
内部类和静态内部类的区别定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。外部类按常规的类访问方式使用内部类,唯一的差别是外部类可以访问内部类的所有方法与属性,包括私有方法与属性创建...转载 2019-10-22 10:06:33 · 372 阅读 · 0 评论 -
Java--【面向对象】final、finally和finalize的区别
final、finally和finalize的区别final根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。 final类不能被继承,没有子类,final类中的方法默认是final的。 final方法不能被子类的方法覆盖,但可以被继承。 f...转载 2019-10-21 15:20:46 · 176 阅读 · 0 评论 -
Java--【面向对象】Java面向对象六大原则
Java向对象六大原则一、单一职责原则(Single-Resposibility Principle)"对一个类而言,应该仅有一个引起它变化的原因。"本原则是我们非常熟悉地"高内聚性原则"的引申,但是通过将"职责"极具创意地定义为"变化的原因",使得本原则极具操作性,尽显大师风范。同时,本原则还揭示了内聚性和耦合生,基本途径就是提高内聚性;如果一个类承担的职责过多,那么这些职责就会相互...转载 2019-10-21 14:28:15 · 176 阅读 · 0 评论 -
Java--【面向对象】Java面向对象的特征
Java面向对象的特征面向对象的三个基本特征是:封装、继承、多态。一、封装封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装:就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装的优点: 将变化隔离 便于使用 提高重用性 提高安全性 封装的缺点:将变量等使用...转载 2019-10-21 14:16:58 · 160 阅读 · 0 评论 -
Java面试--google 笔试题
google 笔试题Beautiful Numbers分析:代码实现:BeautifulNumber.javapackage interview.google;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Scanner;public ...原创 2018-09-27 20:55:19 · 1026 阅读 · 0 评论 -
Java面试--容易忽略的知识点
容易忽略的知识点并行计算【详解】步骤:1.将数据拆分到每个节点上【如何拆分:要保证每个节点都能独立计算;1.将大的数据根据尺寸进行拆分 2.根据用户首字母进行拆分】2.每个几点并行的计算出结果【每个节点算出什么样的结果,这时得到中间结果】3.将结果汇总例【外部排序】 如何排序10G个元素使用扩展的归并排序归并排序:将数据分为左右两半,分别归并排序,再把两个有序数据...原创 2018-09-27 11:03:33 · 260 阅读 · 0 评论 -
Java面试--设计模式
设计模式单例模式【Singleton】定义:确保全局最多只有一个对象适用:构建缓慢的对象;需要统一管理的资源优点:1.减少内存的占用 2.单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。 3.因为类控制了实例化过程,所以类可以灵活更改实例化过程 缺点:1.很多全局状态 2. 线程安全性问题创...原创 2018-09-26 21:12:59 · 962 阅读 · 0 评论 -
Java面试--面向对象
面向对象一、类与对象类的成员变量---对象状态类的成员函数---对象行为类的静态变量类的静态函数1.没有 this 引用,静态变量全局唯一一份2.普通函数引用静态变量、函数---可以3.对象上引用静态变量、函数---可以,但编译器会警告4.静态函数引用普通成员变量、函数---编译错误【静态函数里没有 this 引用,不知道该引用那个对象的成员变量和成...原创 2018-09-26 20:09:44 · 237 阅读 · 0 评论 -
Java面试--二叉树的遍历
二叉树的遍历一、前序遍历遍历顺序:先前序遍历树根,再前序遍历左子树,再前序遍历右子树先遍历树根(A)--再遍历左子树(B)--再遍历左子树(D)--(D没有左子树了)再遍历右子树(E)--再遍历左子树(G)--(A没有左子树了)再遍历右子树(C)--(C没有左子树了)再遍历右子树(F) ;故顺序为 A-B-D-E-G-C-F; 二、中序遍历遍历顺序:先中序遍历左子树...原创 2018-09-26 10:51:19 · 3303 阅读 · 1 评论 -
Java面试--面试中的数据结构问题
面试中的数据结构问题数据结构分类:列表 型---1.数组 2.链表 3.队列 4.栈数组【详解】开辟一片连续的空间,将元素依次放入其中;数组的好处:可以进行随机访问,只需要一个下标就可以访问到该元素;但插入和删除会比较耗费时间,插入和删除操作都需要将之后的元素进行整体的移动,腾出空间来进行对应的操作。链表【详解】每一个节点通过 next 值链接起来;查找元素耗费时...原创 2018-09-24 10:58:18 · 5124 阅读 · 0 评论 -
Java面试--面试中常考的循环问题
面试中常考的循环问题一、循环控制循环不变式(loop invariant)循环书写方法1.定义循环不变式,并在循环体每次结束后保持循环不变式2.先一般、后特殊3.每次 必须 向前推进循环不变式中涉及的变量值4.每次推进的规模必须为 1 例 1.链表反转步骤:1.定义循环不变式【在链表中间"切一刀",循环进行到一半、切在 3 和 4 之间,循...原创 2018-09-24 09:19:07 · 974 阅读 · 0 评论 -
Java面试--Java常考的设计模式
Java常考的设计模式[转载自博客]设计模式主要指的就是 GoF 的23种设计模式,其分为三个方面:创建型模式、结构型模式、行为型模式。下面就罗列出每个方面常考的设计模式。1、创建型模式:单例模式(文章链接:浅析Java设计模式——单例模式(1)/ 单例模式(2))工厂模式(文章链接:浅析Java设计模式——简单工厂模式 / 工厂方法模式 / 抽象工厂模式 )2、结构型模式:...转载 2018-09-19 23:14:42 · 1923 阅读 · 0 评论 -
Java面试--面试中常考的递归问题
面试中常考的递归问题一、链表创建定义函数 CreateLinkedList,让其返回值为 Node(链表头),每次必须缩小问题规模且必须为1;则将 1 拆掉,把 2、3、4、5 添入到CreateLinkedList,再把 1 和 2、3、4、5 连接起来即可;如何接:把 1 的 next 和 2、3、4、5 的 head 接起来就完成了链表的创建;代码实现:...原创 2018-09-19 23:10:02 · 1798 阅读 · 0 评论 -
Java面试--堆和栈的概念和区别
堆和栈的概念和区别【转载自博客】在说堆和栈之前,我们先说一下JVM(虚拟机)内存的划分: Java程序在运行时都要开辟空间,任何软件在运行时都要在内存中开辟空间,Java虚拟机运行时也是要开辟空间的。JVM运行时在内存中开辟一片内存区域,启动时在自己的内存区域中进行更细致的划分,因为虚拟机中每一片内存处理的方式都不同,所以要单独进行管理。 JVM内存的划分有五片:...转载 2018-09-19 20:30:33 · 68461 阅读 · 8 评论 -
Java面试--数据库(事物/事物隔离级别/乐观锁与悲观锁)
数据库一、关系型数据库基于关系代数理论;缺点:表结构不直观,实现复杂,速度慢优点:健壮性高,社区庞大二、事物事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。 事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发...原创 2018-09-18 23:10:48 · 661 阅读 · 0 评论 -
Java面试--网络基础(OSI模型/TCP与UDP/滑动窗口协议)
网络基础一、OSI七层模型及各层作用OSI是Open System Interconnect的缩写,意为开放式系统互联。OSI中的层 功能 TCP/IP协议族应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet表示层 数据格式化,代码转换,数据加密 没有协议会话层 解除或建立与别的接点的联系 没有协...原创 2018-09-18 17:26:16 · 789 阅读 · 0 评论 -
Java 笔试题 (01)
Java 笔试题 1.有1、2、3、4、5个数字,能组成多少个互不相同且无重复数字的四位数?都是多少?提示:可填在千位、百位、十位、个位的数字都是1、2、3、4、5。组成所有的排列后再去 掉不满足条件的排列。代码: public class test01 { public static void main(String[] args) { int count ...原创 2018-09-04 19:32:05 · 453 阅读 · 0 评论 -
初识 Spring(01)---(浅谈 Spring 框架)
浅谈 Spring 框架Spring框架是分模块存在,除了最核心的Spring Core Container(即Spring容器)是必要模块之外,其他模块都是可选,视需要而定。大约有20多个模块。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。一般来说,Spring主要分为...原创 2018-08-07 16:35:41 · 397 阅读 · 0 评论 -
初识 Spring(02)---(IOC)
IOC参照《Spring思维导图,让Spring不再难懂(IOC篇)》写过java的都知道:所有的对象都必须创建;或者说:使用对象之前必须先创建。而使用ioc之后,你就可以不再手动创建对象,而是从ioc容器中直接获取对象。就好像我们无需考虑对象的销毁回收一样,因为java垃圾回收机制帮助我们实现了这个过程;而ioc则是让我们无需考虑对象的创建过程,由ioc容器帮我们实现对象的创建、注入...转载 2018-08-08 16:20:33 · 146 阅读 · 0 评论