自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(96)
  • 收藏
  • 关注

原创 什么是RestFul

什么是RestFul什么是rest?当我看到这个词的时候,本意是休息,定是做web开发的和中设计模式好了,就来简单介绍一下restrest即Representational State Transfer,表现层状态转化互联网上资源(是服务)细化理解为一个url,如果访问某个资源通过http url访问。我们把”资源”具体呈现出来的形式,叫做它的”表现层”(Representation)表现层对用户展示的形式:html、json、xml、pdf、图片。。 由于http...

2021-10-11 16:06:40 147

原创 未登陆拦截器

1,创建LoginInterceptorpublic class LoginInterceptor implements HandlerInterceptor { /*** * handler中处理请求的方法,完全执行完毕之后,执行该方法 对handler中的方法进行异常的统一处理 和 进行日志记录 * * **/ @Override public void afterCompletion(HttpServletRequest req, HttpServletResponse resp, Objec..

2021-10-11 16:05:52 121

原创 Spring MVC

概述Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中。Spring MVC主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。他的两个核心是两个核心:处理器映射:选择使用哪个控制器来处理请求视图解析

2021-10-11 16:05:08 128

原创 安全的Java代码

我们一起来看一段不起眼的条件判断代码,这里可能有什么问题吗 // a, b, c 都是 int 类型的数值 if (a + b < c) { // … } 复制代码你可能会纳闷,这是再常见不过的一个条件判断了,能有什么安全隐患?这里的隐患是数值类型需要防范溢出,否则这不仅仅可能会带来逻辑错误,在特定情况下可能导致严重的安全漏洞。从语言特性来说,Java 和 JVM 提供了很多

2021-10-11 16:02:45 336

原创 应用开发中的注入

一起来看看哪些 Java API 和工具构成了 Java 安全基础。很多方面我在专栏前面的讲解中已经有所涉及,可以简单归为三个主要组成部分:第一,运行时安全机制。可以简单认为,就是限制 Java 运行时的行为,不要做越权或者不靠谱的事情,具体来看: 在类加载过程中,进行字节码验证,以防止不合规的代码影响 JVM 运行或者载入其他恶意代码。 类加载器本身也可以对代码之间进行隔离,例如,应用无法获取启动类加载器(Bootstrap Class-Loader)对象实例,不同的类加载器也可以起到

2021-10-11 16:01:05 120

原创 元素的分类

一,元素的分类1,块级元素2,内联元素3,内联块级元素二,块级元素1,常见的块级元素有 div,p,h1-h6,ol,ul,li,table,tr,td,form2,块级元素的特点每个元素都从新的一行开始,并且其后的元素也另起一行 元素的高度,宽度,行高以及顶和底边距都可以设置 元素宽度在不设置的情况下,是它本身父容器的100%(和父元素的宽度一样),除非设定一个宽度3,设置display:block可以将元素显示为块级元素,如下的代码就是将内联元素a转成块级元素.

2021-09-28 17:30:23 742

原创 史上最全Java基础知识点归纳

1. JVM相关(包括了各个版本的特性)对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一个有着3年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的。JVM作为Java运行的基础,很难相信对于JVM一点都不了解的人可以把Java语言吃得很透。我在面试有超过3年Java经验的开发者的时候, JVM几乎就是一个必问的问题了。当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证Java开发能力的高低。在JVM这

2021-09-28 17:29:00 255

原创 css属性单位

长度单位 cm、mm、in、pt、pc等,绝对长度值最好用于打印输出设备,而在仅仅作为屏幕显示用时,绝对长度值并无多大意义。 px、em、ex等。相对长度是指元素尺寸相对于浏览器的系统默认值来相应的缩放。 color:rgb(50%,0,50%) ; 0-255之间的整数值来设置,如color:rgb(128,0,128) ; #fc0eab; #080; aqua,black,blue,fuchsia,gray,green等。单位 URL单位的具体格式是:在“...

2021-09-28 17:28:25 108

原创 AOP开发中的概念

1,JoinPoint(连接点):所谓连接点是指那些被拦截的点,而spring中这些点就是指方法,因为spring只支持方法类型的连接点。2,PointCut(切入点):所谓切入点就是指我们要对那些JoinPoint进行拦截的定义。3,Advice(通知/增强):所谓通知/增强,就是指拦截到JoinPoint后需要完成的事情。他分为前置通知/增强,后置通知/增强,异常通知/增强,最终通知/增强,环绕通知/增强(切面要完成的功能);4,Introduction(引介):引介是一种特殊的Advi

2021-09-28 17:26:10 56

原创 spring

1.控制反转 -->谁控制谁? 控制什么? 为何叫反转(对应于正向)?哪些方面反转了?为何需要反转?  谁控制谁? --> IoC/DI容器控制应用程序  控制什么? --> IoC/DI容器控制对象本身的创建、实例化; IoC/DI容器控制对象之间的依赖关系  为何叫反转(对应于正向)? --> 因为现在应用程序不能主动去获取外部资源了,而是被动等待IoC/DI容器给它注入它所需要的资源,所以称之为反转.  哪些方面反转了? --> 1.创建对象 2.程序..

2021-09-28 17:24:36 76

原创 系统性能分析

系统性能分析中,CPU、内存和 IO 是主要关注项。对于 CPU,如果是常见的 Linux,可以先用 top 命令查看负载状况,下图是我截取的一个状态。可以看到,其平均负载(load average)的三个值(分别是 1 分钟、5 分钟、15 分钟)非常低,并且暂时看并没有升高迹象。如果这些数值非常高(例如,超过 50%、60%),并且短期平均值高于长期平均值,则表明负载很重;如果还有升高的趋势,那么就要非常警惕了。进一步的排查有很多思路,例如,我在专栏第 18 讲曾经问过,怎么找到最耗费 CP

2021-09-28 17:22:48 1936

转载 MySQL基础知识点

数据库的概念 库:将物品有条理的存放 数据库:存放数据的一个仓库2.检测mysql命令行 注释 # select 用户名; 查询当前登录的用户 select now(); 查询当前的时间 show databases; 显示所有数据库 select version(); 检测MySQL安装的版本3.数据库命令 create database 数据库名; 创建数据库 drop database 数据库名; 删除数据库 dro...

2021-09-26 19:02:19 61

转载 2021-09-24

Java面向对象编程三大特征 - 继承 一、思想解读 1. 什么是继承 2. 继承有什么用 3. 继承的限制与规则 4. 如何设计子父类 二、子父类的使用 1. 权限修饰符 2. this与super 3. final修饰符 4. 终极父类:Object // 定义类:学生 public class Student{ // 提取公共的属性 public String name; p...

2021-09-24 09:17:49 88

原创 安全机制。

第一,运行时安全机制。可以简单认为,就是限制 Java 运行时的行为,不要做越权或者不靠谱的事情,具体来看: 在类加载过程中,进行字节码验证,以防止不合规的代码影响 JVM 运行或者载入其他恶意代码。 类加载器本身也可以对代码之间进行隔离,例如,应用无法获取启动类加载器(Bootstrap Class-Loader)对象实例,不同的类加载器也可以起到容器的作用,隔离模块之间不必要的可见性等。目前,Java Applet、RMI 等特性已经或逐渐退出历史舞台,类加载等机制总体上反倒在不断简化。

2021-09-24 09:10:54 331

原创 整体的线程

从操作系统的角度,可以简单认为,线程是系统调度的最小单元,一个进程可以包含多个线程,作为任务的真正运作者,有自己的栈(Stack)、寄存器(Register)、本地存储(Thread Local)等,但是会和进程内其他线程共享文件描述符、虚拟地址空间等。在具体实现中,线程还分为内核线程、用户线程,Java 的线程实现其实是与虚拟机相关的。对于我们最熟悉的 Sun/Oracle JDK,其线程也经历了一个演进过程,基本上在 Java 1.2 之后,JDK 已经抛弃了所谓的Green Thread,也就是用

2021-09-24 08:59:25 79

原创 内建的类加载器

启动类加载器(Bootstrap Class-Loader),加载 jre/lib 下面的 jar 文件,如 rt.jar。它是个超级公民,即使是在开启了 Security Manager 的时候,JDK 仍赋予了它加载的程序 AllPermission。对于做底层开发的工程师,有的时候可能不得不去试图修改 JDK 的基础代码,也就是通常意义上的核心类库,我们可以使用下面的命令行参数。 # 指定新的 bootclasspath,替换 java.* 包的内部实现

2021-09-17 18:55:05 96

转载 java多线程

1、继承Thread类实现多线程继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:在合适的地方启动线程如下:

2021-09-17 18:52:03 80

原创 Executor 框架

掌握 Executor 框架的主要内容,至少要了解组成与职责,掌握基本开发用例中的使用。 对线程池和相关并发工具类型的理解,甚至是源码层面的掌握。 实践中有哪些常见问题,基本的诊断思路是怎样的。 如何根据自身应用特点合理使用线程池。 首先,我们来看看 Executor 框架的基本组成,请参考下面的类图。我们从整体上把握一下各个类型的主要设计目的:Executor 是一个基础的接口,其初衷是将任务提交和任务执行细节解耦,这一点可以体会其定义的唯一方法。 ..

2021-09-17 18:49:09 71

转载 封装,继承

封 装(面向对象特征之一):是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。好处:将变化隔离;便于使用;提高重用性;安全性封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。This:代表对象,就是所在函数所属对象的引用。this到底代表什么呢?哪个对象调用了this所在的函数,this就代表哪个对象,就是哪个对象的引用。开发时,什么时候使用this呢?在定义功能时,如果该功能内部使用到了调用该功能的对象,这时就用this来表示这个对象。this

2021-09-15 14:02:52 69

转载 面向对象:

成员变量和局部变量的区别:1:成员变量直接定义在类中。 局部变量定义在方法中,参数上,语句中。2:成员变量在这个类中有效。 局部变量只在自己所属的大括号内有效,大括号结束,局部变量失去作用域。3:成员变量存在于堆内存中,随着对象的产生而存在,消失而消失。 局部变量存在于栈内存中,随着所属区域的运行而存在,结束而释放。构造函数:用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种。特点:1:该函数的名称和所在类的名称相同。2:不需要定义返回值.

2021-09-15 14:01:54 99

转载 java语法基础

1,语句。  If switch do while while for  这些语句什么时候用?  1)、当判断固定个数的值的时候,可以使用if,也可以使用switch。  但是建议使用switch,效率相对较高。switch(变量){  case 值:要执行的语句;break;  …  default:要执行的语句;  }  工作原理:用小括号中的变量的值依次和case后面的值进行对比,和哪个case后面的值相同了  就执行哪个case后面的语句,如果没有相同的则执行defau..

2021-09-15 13:59:25 49

转载 java语法基础:

1,关键字:其实就是某种语言赋予了特殊含义的单词。保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词。2,标示符:其实就是在程序中自定义的名词。比如类名,变量名,函数名。包含 0-9、a-z、$、_ ;注意:  1),数字不可以开头。  2),不可以使用关键字。3,常量:是在程序中的不会变化的数据。4,变量:其实就是内存中的一个存储空间,用于存储常量数据。  作用:方便于运算。因为有些数据不确定。所以确定该数据的名词和存储空间。  特点:变量空间可以重复使用。...

2021-09-15 13:58:02 43

转载 java概述:

1991 年Sun公司的James Gosling(詹姆斯·高斯林)等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒、PDA等的微处理器;1994年将Oak语言更名为Java;Java的三种技术架构:JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发;JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础;JAVAME:Jav..

2021-09-15 13:56:42 42

原创 线程安全需要保证几个基本特性

线程安全需要保证几个基本特性: 原子性,简单说就是相关操作不会中途被其他线程干扰,一般通过同步机制实现。 可见性,是一个线程修改了某个共享变量,其状态能够立即被其他线程知晓,通常被解释为将线程本地状态反映到主内存上,volatile 就是负责保证可见性的。 有序性,是保证线程内串行语义,避免指令重排等。 可能有点晦涩,那么我们看看下面的代码段,分析一下原子性需求体现在哪里。这个例子通过取两次数值然后进行对比,来模拟两次对共享状态的操作。你可以编译并执行,可以看到,仅仅是两个

2021-09-15 13:54:22 279

原创 2021-09-13

InputStream 是一个抽象类,标准类库中提供了 FileInputStream、ByteArrayInputStream 等各种不同的子类,分别从不同角度对 InputStream 进行了功能扩展,这是典型的装饰器模式应用案例。识别装饰器模式,可以通过识别类设计特征来进行判断,也就是其类构造函数以相同的抽象类或者接口为输入参数。因为装饰器模式本质上是包装同类型实例,我们对目标对象的调用,往往会通过包装类覆盖过的方法,迂回调用被包装的实例,这就可以很自然地实现增加额外逻辑的目的,也就是所谓的“

2021-09-13 17:18:45 37

原创 面向对象设计

谈到面向对象,很多人就会想起设计模式,那些是非常经典的问题和设计方法的总结。我今天来夯实一下基础,先来聊聊面向对象设计的基本方面。我们一定要清楚面向对象的基本要素:封装、继承、多态。封装的目的是隐藏事务内部的实现细节,以便提高安全性和简化编程。封装提供了合理的边界,避免外部调用者接触到内部的细节。我们在日常开发中,因为无意间暴露了细节导致的难缠 bug 太多了,比如在多线程环境暴露内部状态,导致的并发修改问题。从另外一个角度看,封装这种隐藏,也提供了简化的界面,避免太多无意义的细节浪费调用者的精力。

2021-09-13 17:16:24 44

原创 接口和抽象类有什么区别

Java 相比于其他面向对象语言,如 C++,设计上有一些基本区别,比如Java 不支持多继承。这种限制,在规范了代码实现的同时,也产生了一些局限性,影响着程序设计结构。Java 类可以实现多个接口,因为接口是抽象方法的集合,所以这是声明性的,但不能通过扩展多个抽象类来重用逻辑。在一些情况下存在特定场景,需要抽象出与具体实现、实例化无关的通用逻辑,或者纯调用关系的逻辑,但是使用传统的抽象类会陷入到单继承的窘境。以往常见的做法是,实现由静态方法组成的工具类(Utils),比如 java.util.Coll

2021-09-13 17:15:33 41

转载 JAVA中的反射机制和模块化

类加载1.1类加载描述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载,类的连接,类的初始化这三个步骤来对类进行初始化。如果不出现意外情况,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载或者类初始化1.2类的加载 - 就是指将class文件读入内存,并为之创建一个 java.lang.Class 对象 - 任何类被使用时,系统都会为之建立一个 java.lang.Class 对象1.3类的连接 ...

2021-09-07 12:14:30 80

原创 Java应用开发中的注入攻击

注入式(Inject)攻击是一类非常常见的攻击方式,其基本特征是程序允许攻击者将不可信的动态内容注入到程序中,并将其执行,这就可能完全改变最初预计的执行过程,产生恶意效果。下面是几种主要的注入式攻击途径,原则上提供动态执行能力的语言特性,都需要提防发生注入攻击的可能。首先,就是最常见的 SQL 注入攻击。一个典型的场景就是 Web 系统的用户登录功能,根据用户输入的用户名和密码,我们需要去后端数据库核实信息。假设应用逻辑是,后端程序利用界面输入动态生成类似下面的 SQL,然后让 JDBC 执行。

2021-09-07 12:11:28 325

原创 接口和抽象类有什么区别

接口是对行为的抽象,它是抽象方法的集合,利用接口可以达到 API 定义和实现分离的目的。接口,不能实例化;不能包含任何非常量成员,任何 field 都是隐含着 public static final 的意义;同时,没有非静态方法实现,也就是说要么是抽象方法,要么是静态方法。Java 标准类库中,定义了非常多的接口,比如 java.util.List。抽象类是不能实例化的类,用 abstract 关键字修饰 class,其目的主要是代码重用。除了不能实例化,形式上和一般的 Java 类并没有太大区别,可以

2021-09-07 08:54:51 67

原创 Java IO 方式

Java IO 方式有很多种,基于不同的 IO 抽象模型和交互方式,可以进行简单区分。首先,传统的 java.io 包,它基于流模型实现,提供了我们最熟知的一些 IO 功能,比如 File 抽象、输入输出流等。交互方式是同步、阻塞的方式,也就是说,在读取输入流或者写入输出流时,在读、写动作完成之前,线程会一直阻塞在那里,它们之间的调用是可靠的线性顺序。java.io 包的好处是代码比较简单、直观,缺点则是 IO 效率和扩展性存在局限性,容易成为应用性能的瓶颈。很多时候,人们也把 java.net

2021-09-06 08:59:09 96

原创 java的运算符号

运算符号:1)、算术运算符。   + - * / % %:任何整数模2不是0就是1,所以只要改变被模数就可以实现开关运算。   +:连接符。   ++,–2)、赋值运算符。   = += -= *= /= %=3)、比较运算符。  特点:该运算符的特点是:运算完的结果,要么是true,要么是false。4)、逻辑运算符。& | ^ ! && ||逻辑运算符除了 ! 外都是用于连接两个boolean类型表达式。&: 只有两边都为true结果是true。否

2021-09-06 08:34:43 86

原创 java的三种技术架构

Java的三种技术架构:JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发;JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础;JAVAME:Java Platform Micro Edition,开发电子消费产品和嵌入式设备,如手机中的程序;1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具和jre。2,J

2021-09-06 08:30:08 1553

原创 .Java NIO 概览

NIO 的主要组成部分: Buffer,高效的数据容器,除了布尔类型,所有原始数据类型都有相应的 Buffer 实现。 Channel,类似在 Linux 之类操作系统上看到的文件描述符,是 NIO 中被用来支持批量式 IO 操作的一种抽象。 File 或者 Socket,通常被认为是比较高层次的抽象,而 Channel 则是更加操作系统底层的一种抽象,这也使得 NIO 得以充分利用现代操作系统底层机制,获得特定场景的性能优化,例如,DMA(Direct Memory Access...

2021-09-01 15:58:15 75

原创 Java提供了哪些IO方式2

IO 不仅仅是对文件的操作,网络编程中,比如 Socket 通信,都是典型的 IO 操作目标。 输入流、输出流(InputStream/OutputStream)是用于读取或写入字节的,例如操作图片文件。 而 Reader/Writer 则是用于操作字符,增加了字符编解码等功能,适用于类似从文件中读取或者写入文本信息。本质上计算机操作的都是字节,不管是网络通信还是文件读取,Reader/Writer 相当于构建了应用逻辑和原始数据之间的桥梁。 BufferedOutputS..

2021-09-01 15:56:35 48

原创 案例查质数

查质数质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数```javaimport java.util.Scanner;public class HomeWork01 { public static void main(String[] args) { Scanner scan=new Scanner(System.in); System.out.print("请输入查找质数(素数)的范...

2021-08-31 12:02:54 57

原创 随机加法运算器

//随机加法运算器public class Addition { public static void main(String[] args){ Scanner scan = new Scanner(System.in); //(1).2+17=? int score=0; //得分 for(int i=1;i<=10;i++){ //循环10次 int a = (int)(Math.random()*1...

2021-08-31 12:01:32 109

原创 for循环的演示

//for循环的演示public class ForDemo { public static void main(String[] args) { int sum=0; for(int num=1;num<=100;num++){ if(num%10!=3){ sum+=num; } } System.out.println("sum="+sum)...

2021-08-31 12:00:54 142

原创 闰年判断程序

//闰年判断程序public class LeapYear { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入年份:"); int year = scan.nextInt(); boolean flag = (year%4==0 && year...

2021-08-31 12:00:13 118

原创 柜台收银程序

//柜台收银程序public class Cashier { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入单价:"); double unitPrice = scan.nextDouble(); System.out.println("请输入数量:"); do...

2021-08-31 11:59:35 72

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除