java
文章平均质量分 89
java手术刀
一个社畜Java码农
展开
-
开心到飞起!Alibaba百万年薪必备—高性能架构路线已到手
架构师?多么具有吸引力的三个字!那咱今天就来聊聊Alibaba百万年薪架构师必备技能——高性能架构学习路线:中间件、Nginx、缓存、ZK等等...看下方高性能架构进阶技能图...纯手绘高性能架构进阶技能图Zookeeper分布式环境指挥官1.1 zookeeper基础ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式原创 2022-07-14 13:53:25 · 330 阅读 · 2 评论 -
多线程高并发编程(10) -- ConcurrentHashMap源码分析
前文讲了HashMap的源码分析,从中可以看到下面的问题: 基于上述问题,都可以使用ConcurrentHashMap进行解决,ConcurrentHashMap使用分段锁技术解决了并发访问效率,在遍历迭代获取时进行修改操作也不会发生并发修改异常等等问题。 initTable:初始化 tabAt:寻找指定数组在内存中i位置的数据 helpTransfer:帮助扩容 transfer:扩容和数据迁移,采用多线程扩容,整个扩容过程,通过cas设置sizeCtl、tr原创 2022-07-14 13:42:39 · 637 阅读 · 1 评论 -
多线程高并发编程(9) -- CopyOnWrite写入时复制
CopyOnWrite,即快照模式,写入时复制就是不同线程访问同一资源的时候,会获取相同的指针指向这个资源,只有在写操作,才会去复制一份新的数据,然后新的数据在被写操作完后立马被其他线程看到最新的数据变化,然后之前获取的指针会指向新的数据,但在写操作未结束时,其他线程仍然能访问最初的资源。此做法主要的优点是如果没有线程进行写操作,就不会进行数据副本的复制,因此多个线程只是读取操作时可以共享同一份资源。 CopyOnWrite可以并发的读,而不需要加锁,是一种读写分离的思想,读和写不同的容器。 下面以原创 2022-07-14 11:32:05 · 437 阅读 · 1 评论 -
拿捏大厂面试,2022最新版的Java面试突击班手册
最近很多同学已经成功“拿捏”了今年的面试,好多同学给老师说,2022最新版的Java面试突击班的内容给自己提供了很大的帮助,在这里很感谢这些同学对老师的认可,老师会持续奋战在Java教培的一线,了解最新的技术并且提供给大家学习!话说回来,今天给大家分享的就是咱们2022版面试突击班的文字PDF版本,如果大家需要视频版本也可以一并送给大家的,下面是文字版的分享大家可以详细往下看!面试官:兄弟你来阐述一下Spring框架中Bean的生命周期?JAVA篇RPC 远程过程调用可以说是分布式系统的基础,本文将原创 2022-07-14 10:32:41 · 242 阅读 · 1 评论 -
缓存架构技术:Redis+MongDB,阿里P7面试必跳的坑
前几日有个小老弟找我哭诉,挤破脑袋进阿里,三轮技术下来倒在了缓存技术(Redis+MongDB)上。听完我这小老弟的一番肺腑之言,这...缓存架构技术:Redis+MongDB,不就是阿里P7面试必跳的坑?跳不过去那就只能say godbye了,在坑里“等死”呀...紧接着...吾日三省吾身,突然发现自己掌握的好像也不咋滴,不得不回家好好“补一补”。像Redis的基础入门,掌握下图这几个列出来的知识点足以了。Redis基础入门进阶的话,就得下点功夫了,事务、主从复制、哨兵、集群等等之类的搞不明白你就上不去呀原创 2022-07-14 10:10:22 · 185 阅读 · 1 评论 -
真香现场!Spring5秘籍手册+架构导图,我爱了.
Spring 5 于 2017 年 9 月发布了通用版本 (GA),它标志着自 2013 年 12 月以来第一个主要 Spring Framework 版本。它提供了一些人们期待已久的改进,还采用了一种全新的编程范例,以反应式宣言中陈述的反应式原则为基础。几天前小编从朋友那边嫖来Spring5秘籍手册+架构导图,经过自己的梳理才发现,这完全就是真香现场!我爱了!咱今天就来挖掘真香现场——Spring5这份Spring5的架构脑图我总共是将其整个知识分为以下这6个部分(xmind文件不可上传,截图展示):一步原创 2022-07-14 09:31:14 · 195 阅读 · 1 评论 -
设计模式学习笔记(八)适配器模式介绍及其应用
适配器模式(Adapter)指的是将一个类的接口转换成另一个可以兼容的接口。比如我们日常生活中的转换头、古早时期使用的电池万能充,就相当于程序中使用的适配器模式。适配器模式模式主要分为类结构型模式和对象结构型模式两种:1.1.1 类适配器模式类适配器模式通过多重继承,将一个接口与另一个接口进行匹配。而对于一些面向对象语言如C#、Java不支持多重继承,那么我们就可以继承一个类,同时实现多个接口来达到适配器的效果。如下图所示:1.1.2 对象适配器模式对象适配器模式相对于类适配器的不同点在于,对象适配器中适配原创 2022-07-14 09:02:09 · 527 阅读 · 1 评论 -
设计模式学习笔记(七)代理模式以及动态代理的实现
代理模式(Proxy Design Pattern)是为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象。在结束创建型模式的讲解后,从这一篇开始就进入到了结构型模式,结构型模式主要是总结一些类和或对象组合在一起的结构。代理模式在不改变原始代理类的情况下,通过引入代理类来给原始类附加功能。代理模式的主要结构如下:按照上面的类图,可以实现如下代码:代理模式有比较广泛的使用,比如、、缓存等。在 Java 中,根据代理的原创 2022-07-13 16:33:48 · 154 阅读 · 1 评论 -
设计模式学习笔记(六)原型模式以及深浅拷贝的区别
原型模式也是创建对象的一种方式,它一般用在这样的场景:系统中存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂而且耗费资源。这个时候使用原型模式的克隆方式,能够节省不少时间。比如Java 类中提供的就是原型模式的应用。原型设计模式(Prototype Design Pattern)指用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在Java语言中就存在克隆的方式,比如浅拷贝和深拷贝。对于一般的对象创建,本身不会花费太多的资源,但是对于负责的对象,原创 2022-07-13 16:29:30 · 118 阅读 · 0 评论 -
设计模式学习笔记(五)建造者模式和其他对象创建方式的区别
建造者(Builder)模式指将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。它是把对象的构建和表述分离。也就是通过多个简单对象组装出一个复杂对象的过程,比如机器人需要多步简单的组装、装修需要各个子步骤的合并完成:优点建造者模式将零件细节进行了封装,实现了构建和表示分离建造者可以对创建过程逐步细化,而不对其它模块产生影响,能方便控制细节风险缺点:建造者模式主要由产品(Product)、抽象建造者(Builder)、具体建造者(Concrete Buil原创 2022-07-13 16:19:43 · 314 阅读 · 1 评论 -
设计模式学习笔记(四)单例模式的实现方式和使用场景
单例模式可以说是Java中最简单的设计模式,也是技术面试中频率极高的面试题。因为它不仅涉及到设计模式,还包括了关于线程安全、内存模型、类加载等机制。所以下面就来分别从单例模式的实现方法和应用场景来介绍一下单例模式单例模式也就是指在整个运行时域中,一个类只能有一个实例对象。那么为什么要有单例模式呢?这是因为有的对象的创建和销毁开销比较大,比如数据库的连接对象。所以我们就可以使用单例模式来对这些对象进行复用,从而避免频繁创建对象而造成大量的资源开销。为了到达单例这个全局唯一的访问点的效果,必须要让单例满足以下原原创 2022-07-13 16:15:51 · 156 阅读 · 0 评论 -
设计模式学习笔记(三)简单工厂、工厂方法和抽象工厂之间的区别
设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。那么三者有什么区别呢?先说结论:下面具体展开说明简单工厂模式又叫做静态工厂方法模式(static Factory Method pattern),它是通过使用静态方法接收不同的参数来返回不同的实例对象。我们通过一个类图来进行讲解:我们以上面类图为例,实现简单工厂原创 2022-07-13 15:19:41 · 2465 阅读 · 2 评论 -
设计模式学习笔记(二)工厂模式、模板模式和策略模式的混合使用
工厂模式又叫做工厂方法模式,是一种创建型设计模式,一般是在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。工厂模式是Java 中比较常见的一种设计模式,实现方法是定义一个统一创建对象的接口,让其子类自己决定去实例化那个工厂类,解决不同条件下创建不同实例的问题。工厂方法模式在实际使用时会和其他的设计模式一起结合,而不是单独使用。比如在Lottery 项目中奖品的发放就是工厂+模板+策略模式。举个例子,比如要实现不同奖品的发放业务,有优惠券、实体商品和会员电子卡这些奖品,那么我们可以定义这三种类型奖原创 2022-07-13 11:42:10 · 1081 阅读 · 0 评论 -
设计模式学习笔记(一)设计模式六大原则
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码的可靠性。平常主要有这样的三大类型:那么这些设计模式具体会遵循哪些原则呢?又叫做单一功能原则,每个类只负责一项职责。是面向对象五个基本原则之一。原则定义:一个类只有一个发生变化的原因,否则该类应该被拆分。模拟场景:将 if-else 的用户(访客用户、普通用户和VIP 用户)分类进行编写职责代码(模板模式)规定“软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是对于原创 2022-07-13 11:00:29 · 148 阅读 · 0 评论 -
精品!阿里P7爆款《K8s+Jenkins》技术笔记,高质量干货必收藏
精品!阿里P7爆款《K8s+Jenkins》技术笔记,高质量干货必收藏!前些日子从阿里的朋友那里取得这两份K8s+Jenkins的爆款技术笔记:《K8S(kubernetes)学习指南》+《Jenkins持续集成从入门到精通》,非常高质量的干货,我立马收藏!而今天咱们文章的主角就是这非常之干货的技术笔记:K8S+Jenkins!先看Jenkins--《Jenkins持续集成从入门到精通》Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软原创 2022-07-13 10:17:47 · 227 阅读 · 2 评论 -
阿里官方保姆级Java技术图谱发布!赶紧收藏
作为一个Java程序员,所有小伙伴都会有这么一个情况,想学习,不想被淘汰,结果天天加班,只能想想!2021年即将来了马上就是新年了,今年疫情假期都比之前长点,其实这也是一个提升自己最好的机会,现在对于Java开发的而言,对技能的要求比以前高了不是一点!但是直到今天,我看到这个Alibaba Java技术图谱之后,感觉这里面的内容真是为进击大厂的小伙伴量身打造的!所以,今天特地拿出来分享一下,这个非常值得每一个Java开发者去学习和收藏!图谱亮点为什么说这个图谱值得推荐呢?主要有这几点:内容采用视频的形式,比原创 2022-07-13 10:07:08 · 387 阅读 · 1 评论 -
多线程高并发编程(8) -- Fork/Join源码分析
Fork/Join就是将一个大任务分解(fork)成许多个独立的小任务,然后多线程并行去处理这些小任务,每个小任务处理完得到结果再进行合并(join)得到最终的结果。 流程:任务继承RecursiveTask,重写compute方法,使用ForkJoinPool的submit提交任务,任务在某个线程中运行,工作任务中的compute方法的代码开始对任务进行分析,如果符合条件就进行任务拆分,拆分成多个子任务,每个子任务进行数据的计算或操作,得到结果返回给上一层任务开启线程进行合并,最终通过get获取整体原创 2022-07-13 10:02:34 · 321 阅读 · 0 评论 -
多线程高并发编程(7) -- Future源码分析
Future可获取计算的结果。 它有提供方法来检查计算是否完成,等待其完成,并检索计算结果。 结果只能在计算完成后使用方法get进行检索,如有必要,阻塞,直到准备就绪。 取消由cancel方法执行。 提供其他方法来确定任务是否正常完成或被取消。 计算完成后,不能取消计算。 如果您想使用Future ,以便不可撤销,但不提供可用的结果,则可以声明Future表格的类型,并返回null作为基础任务的结果。 Future模式非常适合在处理很耗时很长的业务逻辑时进行使用,可以有效的减小系统的响应时间,...原创 2022-07-12 16:34:23 · 226 阅读 · 0 评论 -
多线程高并发编程(6) -- Semaphore、Exchanger源码分析
一个计数信号量。在概念上,信号量维持一组许可证。如果有必要,每个都会阻塞,直到许可证可用,然后才能使用它。每个添加许可证,潜在地释放阻塞获取方。但是,没有使用实际的许可证对象;只保留可用数量的计数,并相应地执行。即一个Semaphore维护了一组permits【许可证】。每次调用acquire()方法都会阻塞,直到获取到许可证。每次调用release()方法都会添加一个许可证,也就是释放一个被阻塞的获取者。但是实际上并不存在这个许可证,Semaphore仅仅是记录可用资源的数量,并且做出对应的行为(有资原创 2022-07-12 16:02:36 · 130 阅读 · 0 评论 -
点击量破百万!阿里内产微服务进阶讲义,简直是Java开发者的福音
不得不说,微服务是当下非常热门的话题。我平时工作之外和圈子里的朋友们交流,提到微服务等新技术,他们先是兴奋,后又无奈。兴奋的是他们看到了新技术带来的便利,无奈的是团队规模和能力又反过来制约了他们采用新技术的步伐。而他们也对微服务有着这样或那样的理解,但更多的是疑惑,比如说他们会问:微服务这技术虽然面试的时候总有人提,但作为一个开发者,是不是和我关系不大?那不都是架构师的事吗?微服务不都是大厂在玩吗?我们这个业务体量用得着吗?微服务特别复杂,没个 100 人的研发团队是不是就无法落地?你心里是否也有过上面的想原创 2022-07-12 13:23:22 · 130 阅读 · 0 评论 -
多线程高并发编程(5) -- CountDownLatch、CyclicBarrier源码分析
public CountDownLatch(int count) {//初始化 if (count < 0) throw new IllegalArgumentException("count < 0"); this.sync = new Sync(count); } CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。 CountDownLatch能够使一原创 2022-07-12 12:01:40 · 154 阅读 · 0 评论 -
多线程高并发编程(4) -- ReentrantReadWriteLock读写锁源码分析
ReentrantReadWriteLock把锁进行了细化,分为了写锁和读锁,即独占锁和共享锁。独占锁即当前所有线程只有一个可以成功获取到锁对资源进行修改操作,共享锁是可以一起对资源信息进行查看。即写同时只能一个人写,读可以大家一起读。 ReentrantReadWriteLock并没有继承ReentrantLock,也并没有实现Lock接口,而是实现了ReadWriteLock接口,该接口提供readLock()方法获取读锁,writeLock()获取写锁。public interface Re原创 2022-07-12 10:42:11 · 120 阅读 · 0 评论 -
多线程高并发编程(3) -- ReentrantLock源码分析AQS
提供一个框架,用于实现依赖先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量,事件等)。 该类被设计为大多数类型的同步器的有用依据,这些同步器依赖于单个原子int值来表示状态。 子类必须定义改变此状态的受保护方法,以及根据该对象被获取或释放来定义该状态的含义。 给定这些,这个类中的其他方法执行所有排队和阻塞机制。 子类可以保持其他状态字段,但只以原子方式更新int使用方法操纵值getState() , setState(int)和compareAndSetState(int, int)被...原创 2022-07-12 09:56:47 · 105 阅读 · 0 评论 -
多线程高并发编程(2) -- 可重入锁介绍和自定义
什么是 “可重入”?可重入就是说某个线程已经获得某个锁,可以再次获取锁而不会出现死锁。即可重入锁的作用就是为了避免死锁,java中synchronized和ReentrantLock都是可重入锁。 //synchronized 可重入锁 private void test() { // 第一次获得锁 synchronized (this) { while (true) { // 第二次获得同样的锁原创 2022-07-12 09:31:10 · 80 阅读 · 0 评论 -
多线程高并发编程(1) -- 基础及详解
进程和线程的区别: 进程的内存大小为:堆内存+线程数量*栈内存,即线程数量 =( 最大地址空间[MaxProcessMemory] - JVM堆内存 - 系统保留内存[ReservedOsMemory] )/ ThreadStackSize(XSS),从中可以看出,线程的数量随栈内存的增多而减少。 线程是程序执行的一个路径,每一个线程都有自己的局部变量表、程序计数器(指向正在执行的指令指针)以及各自的生命周期。当启动了一个Java虚拟机(JVM)时,从操作系统开始就会创建一个新的进程(JVM进程),JV原创 2022-07-12 09:20:39 · 301 阅读 · 0 评论 -
Mybatis一级缓存和结合Spring Framework后失效的源码探究
1.在下面的案例中,执行两次查询控制台只会输出一次 SQL 查询:mybatis-config.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-原创 2022-07-09 15:19:55 · 69 阅读 · 0 评论 -
JAVA泛型
什么是泛型?泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。可以在集合框架(Collection framework)中看到泛型的动机。例如,Map 类允许您向一个 Map 添加任意类的对象,即使最常见的情况是在给定映射(map)中保存某个特定类型(比如 String)的对象。因为 Map.get() 被定义为返回原创 2022-07-09 14:44:28 · 94 阅读 · 0 评论 -
JVM内存Dump原理与在线分析实战
当前我们微服务容器化部署JVM 实例很多,常常需要进行JVM heap dump analysis,为了提升JVM 问题排查效率,得物技术保障团队研究了JVM内存Dump 原理与设计开发了JVM 内存在线分析。常见的JVM heap dump analysis 工具如: MAT,JProfile,最常用的功能是大对象分析。功能上本地分析工具更全面,在微服务架构下,成千上万的实例当需要一次分析的时候,于是我们思考如何提供更方便更快的在线分析方便研发人员快速排障。流程传统在线分析相比hprof 获取jmapj原创 2022-07-09 14:32:02 · 3824 阅读 · 0 评论 -
深入浅出阻塞队列BlockingQueue及其典型实现ArrayBlockingQueue
本篇我们将一起对 AQS的另一类的应用场景的实现类——阻塞队列(实现生产者/消费者模型的经典方法) 做一次深入浅出的分析。从上面的类图结构和源码的注释分析来看,我总结如下:从上面总结的第一和第二点我们知道,BlockingQueue的接口方法包含四种类型的: 会抛异常的、返回特殊值的、会阻塞的和阻塞有超时的 ;但是按照操作结果大体可分为三种(官方区分的): 插入型的、删除型的、读取型的 。如下面的表格总结(其实也是源码的注释内容):正在上传…重新上传取消下面我们就此表格说明下( 我又多分了一个种类->读取删原创 2022-07-09 13:27:11 · 474 阅读 · 0 评论 -
JAVA开发----IOC之核心容器
如何创建容器?创建好容器后,如何从容器中获取bean对象?容器类的层次结构是什么?BeanFactory是什么?在解决上述问题之前,先来准备下环境:创建一个Maven项目pom.xml添加Spring的依赖<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</arti原创 2022-07-09 13:09:02 · 71 阅读 · 0 评论 -
JAVA中计算两个日期时间的差值竟然也有这么多门道
先取出今天的日期,然后分别计算得出年、月、日的值,然后将给定的字符串进行切割,得到目标的年、月、日,然后再判断是否闰年之类的逻辑,决定每月应该是加28天还是29天还是30或者31天,最后得出一个天数!想想都令人窒息的操作...日期时间的处理,是软件开发中极其常见的场景,JAVA中与日期、时间相关的一些类与API方法也很多,这里结合平时的编码实践全面的整理了下,希望可以帮助大家厘清其中的门道,更加游刃有余的面对此方面的处理~JAVA8之后新增了java.time包,提供了一些与日期时间有关的新实现类:具体每个原创 2022-07-09 11:32:34 · 412 阅读 · 0 评论 -
180页100+题15W+字解析的《Java高级面试指南》
180页100+题15W+字解析的《Java高级面试指南》,100+题包含:消息队列、Redis缓存、MySQL的分库分表读写分离、高并发系统设计、分布式、高可用、SpringCloud微服务架构等的内容,每一道题皆从面试官的角度分析题意,然后再附带完整的解析,先看题目,答不上的再翻阅答案! 消息队列面试问题如下:消息队列部分答案:Redis缓存面试问题如下:Redis缓存部分答案:高并发系统设计题目如下:高并发系统设计部分答案:MySQL分库分表+读写分离面试问题如下:MySQL分库分表部分答案:分布式原创 2022-07-09 10:59:56 · 164 阅读 · 0 评论 -
JAVA输入/输出流详细讲解
应用程序经常需要访问文件和目录,读取文件信息或写入信息到文件,即从外界输入数据或者向外界传输数据,这些数据可以保存在磁盘文件、内存或其他程序中。在Java中,对这些数据的操作是通过I/O技术来实现的。所谓I/O技术,就是数据的输入(Input)、输出(Output)技术。本章将对Java的 I/O系统进行讲解,包括I/O的体系结构、流的概念、字节流、处理字节流的基本类InputStream和OutputStream、字符流、处理字符流的基本类Reader和Writer、文件管理、序列化和反序列化等。12.1原创 2022-07-09 10:54:13 · 16975 阅读 · 2 评论 -
JAVA多线程详细讲解
一个程序只有一个从头到尾的执行路径。这样做的优点是易于编程,无需考虑过多的情况。但是,由于单线程需要在上一个任务完成之后才开始下一个任务,所以其效率比较低。在真实的项目运行过程中都具有多任务同时执行的特点,比如项目中用到的数据库连接池,这些任务在执行的时候互不干扰,这就需要多线程技术。14.1 线程概述随着计算机技术的飞速发展,计算机的操作系统一般都是支持多任务的,即在同一个时间内执行多个程序,一般的操作系统都需要引入多进程与多线程技术。14.1.1 进程在学习线程之前,需要先简单了解一下什么是进程。进程是原创 2022-07-08 16:29:05 · 324 阅读 · 0 评论 -
JAVA数组详细讲解
在程序开发过程中,有时候需要存储大量的同类型数据。例如,存储一个班级50名学生的姓名,这时需要定义50个变量来保存姓名数据,但这种做法太繁琐了。那么,如何解决这类问题呢?Java语言提供了数组结构,它类似于一个容器,可以批量存储相同数据类型的元素。因此,对于前述学生成绩统计问题,我们只需要定义一个长度为50的字符串数组就可以解决。本章将对数组的基本概念、定义方式、初始化以及使用等内容展开讲解。4.1 一维数组一维数组的逻辑结构是线性表,它是最简单的数组。使用一维数组时,要先定义,然后做初始化,最后才能使用。原创 2022-07-08 16:21:44 · 2218 阅读 · 0 评论 -
JAVA继承和多态详细讲解
面向对象编程的重要知识:继承和多态。通过类的继承机制,可以使用已有的类为基础派生出新类,无需编写重复的程序代码,很好地实现程序代码复用。多态是面向对象编程中继封装和继承之后的另一大特征,它具体是指同一个行为具有多个不同表现形式或形态的能力。使用多态机制,可以提高程序的抽象程度和简洁性,最大程度地降低类和程序模块间的耦合性,并提高程序的可扩展性和可维护性。从Java语言的底层逻辑上看,封装和继承是为实现多态做准备的。6.1 类的继承继承描述了类的所属关系,多个类通过继承可形成一个关系体系,进而在原有类的基础上原创 2022-07-08 16:03:18 · 3361 阅读 · 1 评论 -
Java语言基础详细讲解
就像人与人之间交流使用的语言需要遵循一定的语法规则一样,Java语言也离不开特定语法的支持,如基本语法、数据类型、变量、常量、运算符与表达式、类型转换和输入输出等,只不过这些语法要比日常生活中语言的语法更加严谨。本章我们先来学习这些基本语法,为后续学习打下扎实的根基。2.1 Java基本语法作为一门流行的编程语言,Java有着它自己特定的语法格式,要想使用Java语言开发出一款功能完善的软件产品,就必须熟练掌握这些基本语法。当然,这些基本语法都是简单易懂的,包括基本格式、关键字、标识符、注释、编程风格等。2原创 2022-07-08 15:51:58 · 2391 阅读 · 0 评论 -
JAVA编码中容易踩坑的十大陷阱 !!!警惕
JAVA编码中存在一些容易被人忽视的陷阱,稍不留神可能就会跌落其中,给项目的稳定运行埋下隐患。此外,这些陷阱也是面试的时候面试官比较喜欢问的问题。本文对这些陷阱进行了统一的整理,让你知道应该如何避免落入陷阱中,下面就一起来了解下吧。遍历List然后对list中符合条件的元素进行删除操作,这是项目里面非常常见的一个场景。先看下两种典型的错误写法:错误写法1:for (User user : userList) { if ("男".equals(user.getSex())) {原创 2022-07-07 15:38:17 · 202 阅读 · 0 评论 -
Java反序列化基础篇-JDK动态代理
先说说什么是代理模式,要说代理模式,得从代理说起。下面一张图中的中介,就是我们所说的代理。1. 静态代理简单理解静态代理想要实现租客找中介租房东,在 Java 中就需要4个文件,分别是房源、房东、中介、租客,其中房源应该是接口,其余三项为类。不明白房源为什么是接口的师傅,这与 Java 编程的设计思想有关,我个人也喜欢把它与 c++ 里面的纯虚函数做类比。可以移步至狂神的视频学习一下静态代理。Rent.javapackage src.JdkProxy.StaticProxy;// 租房的接口publ原创 2022-07-08 10:55:09 · 112 阅读 · 0 评论