聊一下你对拦截器、过滤器的认识-编程思维

Java 中的拦截器和过滤器都是常见的用于拦截和处理系统请求的技术手段,它们的主要作用是在系统的关键点上增加通用的处理逻辑,以达到代码的复用和系统的解耦等目的。 相同点:- 都可以对请求进行拦截和处理,增加通用的处理逻辑。- 都可以实现系统的安全控制、日志记录、性能优化、缓存控制等功能。- 都可以通过配置来使用,灵活性高,易于维护和扩展。 不同点:- 拦截器通常针对于应用程序级别的请求处理,例如

java 自增自减运算符和移位运算符介绍-编程思维

摘自 JavaGuide (「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!) 自增自减运算符 在写代码的过程中,常见的一种情况是需要某个整数类型变量增加 1 或减少 1,Java 提供了一种特殊的运算符,用于这种表达式,叫做自增运算符(++)和自减运算符(--)。 ++ 和 -- 运算符可以放在变量之前,也可以

oracle jdk 和 openjdk 有什么区别?-编程思维

摘自 JavaGuide (「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!) 可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。那么 Oracle JDK 和 OpenJDK 之间是否存在重大差异?下面我通过收集到的一些资料,为你解答这个被很多人忽视的问题。 对于 Java 7,没什么关键

那些年那些神码-编程思维

首先说明一下什么是神码?神码就是神奇代码的意思(也是糟糕的意思),在这里是为了表达引以为戒! 往事不堪回首!想当年(2017年)公司技术团队新组建,系统新搭建。为了赶工期,一切以快速为目标,快速试错,快速交付上线。项目管理规范被忽视和技术规范管控没有及时跟上,工程师们交付的代码质量非常的糟糕。产生了不少严重的生产故障,后果比较严重,教训惨痛! 当年虽是架构师岗位,但却像是救火队员。毫不夸张地说是

java stream sorted自定义排序规则实现多字段排序-编程思维

  Stream 提供了丰富的操作(中间操作和终端操作)集合元素的轮子,但Stream流操作不影响原始集合数据,执行结果是一个新的集合对象。在《Java stream sorted使用 Comparator 进行多字段排序》中,小编Wiener介绍了使用Java Stream流排序器Comparator对List集合进行多字段排序的方法,包括复杂实体对象多字段升降序排序方法,本文介绍两个新的排序

深入理解threadlocal-编程思维

在java的多线程模块中,ThreadLocal是经常被提问到的一个知识点 ,因此只有理解透彻了,不管怎么问,都能游刃有余。 本文主要从以下几个角度来分析理解 1、ThreadLocal是什么 2、ThreadLocal怎么用 3、ThreadLocal源码分析 4、ThreadLocal内存泄漏问题 以下源码均基于jdk1.8。 1. ThreadLocal是什么? 从名字我们就可以看到T

java的注释和标识符-编程思维

java 的注释规则 1. 单行注释 语法:// 描述://用于当行注释,与JavaScript一样 //这是一个代码注释 2. javadoc注释 语法: /** *注释内容 / 描述:多行注释中可以用“@参数” /** *@Descript:这是一个注释 *@Author:主旋律世界 */ 3. 多行注释 语法: /* */ /* 内容1 内容2 。。。。。 */ 标识符和数据类型 1

【spring基础补充】 注解补充(二)-编程思维

@Scope和@Lazy @Scope 根据源码中描述,作用域一共有四个。SINGLETON、PROTOTYPE、REQURST、SESSION 目前主要应用的是前两个: SINGLETON:表明当前bean是单例的,每次获取到的对象都是同一个。 PROTOTYPE:表明当前bean是原型的,每次获取到的对象都不是同一个。 @Scope("prototype")注解也会导致延迟加载 @L

java基础-跳出循环的4种方式-编程思维

摘要:介绍4种跳出循环的方式,尤其是其中的break 标签,有时候真的会成为工作中的秘密武器。   在实际编程中,有时需要在条件语句匹配的时候跳出循环。在 Java 语言里,由关键词 break 和 continue 控制。Java跳出for或者while循环的四种方式:   continue:跳出当前层循环的当前语句,执行当前层循环的下一条语句。   break:跳出当前层循环。   brea

类加载器和双亲委派机制-编程思维

类加载器 类加载器可以分为三种: 引导类加载器(根加载器 Bootstrap ClassLoader): 负责加载jre/rt.jar核心类库 它本身不是java代码实现的,也不是ClassLoader的子类,获取该对象往往返回null 拓展类加载器(Extension ClassLoader JDK9之前) 它负责加载jre/lib/ext拓展库 它是根加载器的子类 Ja

linux 安装jdk(保姆级教程)-编程思维

Linux配置Java环境,至少需要5步 1、获取jdk包 方便大家下载:我已传至网盘: 链接:https://pan.baidu.com/s/1HApeGyDjlo74hY3d81a29g 提取码:6xiw 2、上传至服务器 我使用的事服务器厂商自带文件传输助手:   3、解压 3-1、解压 刚才我上传到了/var/tmp 目录下,现在移动到/usr/local 下 mv jdk-8

【数据结构和算法】001 单链表 linkedlist-编程思维

   小朋友,你是否有很多问号?为什么?别人都在看漫画,而我在学画画,对着钢琴说话...         一、单链表(LinkedList)介绍和内存布局 链表是有序的列表,它在内存中的实际存储结构如下:          看上去虽然无序,但ta是靠每个链表节点元素的   地址  和  next域  来分清首尾相连的顺序,如下图所示,由头指针指向第一个元素,进而第二个、三个...     

java基础(三):流程控制-编程思维

顺序结构 Java的执行过程就是顺序结构,除非说明,不然都是一句接一句执行。 选择结构 if选择结构 if(布尔表达式1){ //布尔表达式1为true执行 } else if(布尔表达式2){ //布尔表达式2为true执行 } else if(布尔表达式3){ //布尔表达式3为true执行 } else{ //布尔表达式123为false执行 }

java基础(四):方法-编程思维

方法 方法是解决一类问题的步骤的有序组合 包含于类/对象中 设计原则 方法的原子性:一个方法只实现一个功能 定义与调用 方法的组成: 方法的调用 若方法返回值为空 System.out.println("Hello!"); 若方法返回值不为空 int a = sum(b,c); 方法重载 在同一个类中,有相同名称,因参数不同,而有不同的实现,称为重载。 如: pa

java基础(五):数组-编程思维

概述 数组是相同类型数据的有序集合 可以是任何类型 每一个数据被称为该数组的一个数组元素,可以使用下标访问每一个元素 下标从0开始,按顺序递增 数组长度是固定的,创建后不可改变 数组属于引用类型 声明、内存、初始化和使用 声明 可以使用 Type[] arr;//常用 或者 Type arr[]; 使用new操作符-动态初始化 Type[] arr = new Type[siz

java基础(六):面向对象-编程思维

面向对象 面向对象:以类的方式组织代码,以对象组织数据 特性: 封装 继承 多态 类:抽象概念 对象:具体事物 面向对象是java学习的重中之重,毕竟java就是一个面向对象的语言~ 类 = 属性+方法 面向对象的概念适合复杂系统、多人协作 从宏观上来说,java是面向对象的,但在微观上是面向过程的 创建 对象的创建 使用new实例化一个对象,如 Student student = n

通俗易懂的理解java泛型-编程思维

泛型是JAVA 1.5版本之后引入的一个新特性,它允许在定义类、接口和方法的时候使用类型参数,这些类型参数将在使用时确定。泛型的引入,使得JAVA具有了更好的代码复用性,更好的类型安全性,更好的可读性。泛型的引入,使得JAVA具有了更好的代码复用性,更好的类型安全性,更好的可读性。 JAVA泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数

java线程基础-编程思维

一、 为什么要多线程 CPU和IO设备之间的速度存在很大的差异,提高CPU利用率 提高服务端并发量 线程安全问题: 有共享数据的情况下使用多线程可能会导致线程安全问题 原子性:时间片轮转导致 可见性:CPU和内存之间有缓存/工作内存和主内存 有序性:指令重排序 实现线程安全的方法: 互斥同步:悲观 非阻塞同步:乐观 无同步方案:避免共享数据 二、Java线程的实现 HotSpot的每