自定义博客皮肤VIP专享

    *博客头图:

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

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

    博客底图:

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

    栏目图:

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

    主标题颜色:

    RGB颜色,例如:#AFAFAF

    Hover:

    RGB颜色,例如:#AFAFAF

    副标题颜色:

    RGB颜色,例如:#AFAFAF

    自定义博客皮肤

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

    原创 功能测试和性能测试的区别?

    2、功能测试通常包括单元测试、集成测试、系统测试等阶段,每个阶段都针对软件的不同方面进行详细的测试。性能测试的目的是评估软件在各种负载条件下的响应时间、吞吐量、资源利用率等指标,以确保软件能够在不同场景下都能高效地运行。主要目的是评估软件在不同负载条件下的性能和可靠性,确保软件在各种场景下都能高效的运行,包括响应时间、吞吐量、并发用户数、资源利用率等指标。关注点是系统的功能和特性是否符合需求规格说明书中的要求,评估标准是系统的各项功能是否正常、符合预期和符合用户需求,是否存在缺陷或错误。

    2024-08-28 17:51:07 911 1

    原创 详细了解如何设计和实现一个SSO系统?

    1、用户角度:一次登录多次使用,无需记录多套用户名和密码,省事省心。2、系统管理员角度:管理员只需要维护好一个统一的账号中心就可以了,方便3、新系统开发角度:新系统开发时只需直接对接统一的账号中心即可,简化开发流程,省时本篇主要探讨基于Web站点的SSO ,核心包括:单点登录和登出、支持跨域单点登录和登出。

    2024-08-27 20:30:33 396

    原创 基于JWT的身份验证和有关JWT的安全性?

    因为服务端拿到JWT后,会解析出其中包含的Header、Payload以及Signature,服务端会根据Header、Payload、密钥再次生成一个Signature,拿新生成的Signature和JWT中的Signature做对比,如果一样,说明Header和Payload没有被修改。不过,如果服务端的密钥也被泄露的话,黑客就可以同时篡改Signature、Header、Payload了,黑客直接修改了Header和Payload之后,再重新生成一个Signature就可以了。

    2024-07-02 15:09:09 419

    原创 CSRF的其他防范措施?

    一般情况下,我们可以通过各种防护策略来防御CSRF,对于QA、SRE、安全负责人等,我们可以做哪些事情来提升安全性呢?一、CSRF测试CSRFTester是一款CSRF漏洞的测试工具,CSRFTester工具的测试原理大概是这样的,使用代理抓取我们在浏览器中访问过的所有的连接以及所有的表单等信息,通过在CSRFTester中修改相应的表单等信息,重新提交,相当于一次伪造客户端请求,如果修改后的测试请求成功被网站服务器接受,则说明存在CSRF漏洞,当然此款工具也可以被用来进行CSRF攻击。

    2024-06-28 14:39:34 1041

    原创 CSRF防护策略的详细说明

    一、阻止不明外域的访问二、提交时要求附加本域才能获取的信息

    2024-06-28 14:02:19 1162

    原创 如何防止CSRF攻击?

    如上代码所示,可以看到,该页面只要打开,就会向Gmail发送一个post请求,请求中,执行了“Create Filter”命令,将所有邮件转发到“hacker@hakermail.com”,A由于刚刚就登录了Gmail,所以这个请求发送时,携带着A的登录凭证(Cookie),Gmail的后台接收到请求,验证了确实有A的登录凭证,于是成功给A配置了过滤器,黑客可以查看A的所有邮件,包括邮件里的域名验证码等隐私信息,拿到验证码后,黑客就可以要求域名服务商把域名重置给自己。

    2024-06-26 11:13:09 830

    原创 为什么Cookie无法防止CSRF攻击,而Token可以?

    上边提到,进行Session认证的时候,一般是使用Cookie来存储Session,当我们登录后,后端生成一个SessionId放在Cookie中返回给客户端,服务端通过Redis或者其他存储工具记录保存这个SessionId,客户端登录以后每次请求都会带上这个SessionId,服务端通过这个SessionId来标识登录用户这个人,如果别人通过Cookie拿到了SessionId后就可以代替你的身份访问系统了。,那跨站请求伪造是什么意思呢?下一章我们说说如何防止CSRF攻击?,跨站脚本攻击缩写为。

    2024-06-24 15:45:23 455

    原创 有关认证授权的详细理解

    举个例子:假设我们部署了两份相同的服务器A和B,用户第一次登录的时候,Nginx通过负载均衡机制将用户请求转发到A服务器,此时用户的Session信息保存到A服务器,结果,用户第二次登录,Nginx将用户的请求路由到B服务器,而B服务器没有存储用户的Session信息,此时用户需要重新登录。(简单地说就是,一个用户可以拥有多个角色,一个角色可以被分配多个权限,这样就构成了“用户--角色--权限”的授权模式,在这种模型中,用户与角色,角色与权限之间构成了多对多的关系。

    2024-06-22 17:44:41 712

    原创 Jar包部署的三种方式!

    7、启动服务,在“任务管理器”——“服务”中启动服务,服务名称:XXXXXX,如下,在浏览器输入项目访问地址即可。注:要想结束刚刚启动的jar包,新建一个stop.bat,文件内容如下,同理右键该文件以管理员身份运行即可。3、将WinSW.NET4.exe重命名为XXXXXX.exe(注:jar名是XXXXX.jar)3、把文件名改为start.bat,右键start.bat文件“管理员身份运行”二、缺点:每次修改一个地方的代码,都得停止服务,需更新jar包,然后再启动服务。

    2024-06-11 15:09:01 1756 2

    原创 Statement的execute()、executeQuery()、executeUpdate()方法的区别?

    用于执行insert、delete、update等SQL语句,返回值结果为一个int类型的整数,例如create table、drop table等DDL操作,此时该方法的返回值为0。可执行任何SQL语句,该方法返回一个布尔值,表明是否返回一个ResultSet结果集,一般用于执行不知道SQL语句类型的情况下。3、executeUpdate(String sql),可执行SQL的增删改操作,也可执行create table/drop table等DDL操作。该三个方法的使用时取决于SQL内容的实现。

    2023-11-21 15:53:49 1732

    原创 深度理解OSI七层模型

    首先我们需要知道互联网本质是一系列的网络协议,这些协议统称为OSI协议,OSI七层模型它是一个开放式的体系结构,将网络划分为七层,我们这里指的七层实际上并不存在,只是为了方便我们理解,根据功能不同,分工不同,人为的将网络划分为七层。1、我们先来初步了解什么是OSI七层模型。2、快速了解OSI七层模型。3、七层协议,数据传输过程。根据以下这张图更好的理解。

    2023-11-21 15:43:48 133

    原创 对现有IPv4的弹性IP生成一个对应的IPv6地址,提供将IPv6访问流量转换为IPv4流量,具体如何实现?

    NAT64是一种网络设备或服务器,用于将IPv6流量转换为IPv4流量,它具有一个IPv6地址池,用于接收来自客户端的IPv6请求,并将其转换为IPv4请求,然后,这些IPv4请求被发送到后端服务器,后端服务器处理这些请求并将响应发送到NAT64,NAT64再将响应从IPv4转换为IPv6,并将其发送回客户端。弹性IP 是一种动态IP地址分配技术,可以根据用户需求为云服务提供商分配唯一的IP地址,对于IPv4和IPv6,当用户使用弹性IP进行网络访问时,可以根据需求动态的分配或更换IP地址。

    2023-11-21 11:30:11 325

    原创 过滤器和拦截器的区别?

    过滤器和拦截器底层实现不同,过滤器是基于函数回调的,拦截器则是基于Java的反射机制实现的(动态代理),在我们自定义的过滤器中都会实现一个doFilter() 方法,该方法都有一个FilterChain参数,但实际上它是一个回调接口,ApplicationFilterChain是它的实现类,这个实现类内部也有一个doFilter() 方法就是回调方法。最近在做关于用户登录后的权限管理问题,用到了过滤器和拦截器的问题,在这里总结一下两者的区别和使用,以及两者都存在情况下的执行顺序。1、过滤器(Filter)

    2023-11-15 14:14:20 101

    原创 sleep、yield、wait、join的区别?

    用途不同:sleep 和 yield 通常用于线程的控制和时间管理wait、notify、notifyAll、join 用于线程之间的协作和通信。

    2023-09-20 21:38:50 207

    原创 Java创建线程的5种方式

    5、将Future Task作为参数传递到Thread类的构造器中,创建Thread对象,并调用start方法。4、 调用线程池的execute方法,执行某个线程,参数是之前实现runnable或callable接口的对象。6、调用当前线程的run()–>调用了Runnable类型的target的run()2、重写Thread类的run()方法 ----->run()方法里边实现线程操作。4、将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象。使用Callable接口创建线程的好处。

    2023-09-20 20:59:10 120

    原创 什么是序列化和反序列化?

    首先需要创建一个OutputStream对象,将其封装在ObjectOutputStream对象内,这时调用WriteObject()方法,实现对象的序列化,然后将其发送给OutputStream(对象序列化时基于字节的,所以使用的是InputStream和OutputStream继承的类)这时就需要进行序列化和反序列化了,发送方需要将Java对象转化为字节序列,接收方需要将字节序列恢复为Java对象。2、当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化。4、什么场景下需要序列化?

    2023-09-18 22:20:56 182

    原创 hashCode()的全面解析!

    如果两个对象的HashCode值相等,那这两个对象不一定相等(哈希冲突)如果两个对象的HashCode值相等,并且equals()方法也返回true,才认为这两个对象相等如果两个对象的HashCode值不相等,则可以直接认为这两个对象不想等。

    2023-09-17 22:33:26 377

    原创 深拷贝和浅拷贝的区别了解吗?什么是引用拷贝?

    2、引用数据类型的特点:名存在栈内存中,值存在堆内存中,但是栈内存会提供一个引用的地址指向堆内存中的值。:深拷贝会另外创建一个一模一样的对象,新对象跟原对象不共享内存,修改新对象时,不会改变原对象。:浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。1、基本数据类型的特点:名跟值都存储在栈内存中。简单来说就是,两个不同的引用指向同一个对象。3、什么是引用拷贝呢?

    2023-09-17 20:47:01 62

    原创 Java中常用占位符总结

    Java中占位符指的是在字符串中预留一些特殊标记,用于将变量的值动态的插入到字符串中。1、%s : 字符串占位符,用于插入字符串类型的值。4、%b : 布尔值占位符,用于插入布尔值类型的值。2、%d : 整数占位符,用于插入整数类型的值。3、%f : 浮点占位符,用于插入浮点类型的值。

    2023-08-28 20:48:32 11269 4

    原创 Java单例设计模式

    3、直接使用类名.静态方法时,还可以赋值给其他变量,赋值后,相当于new(实例化)了这个类的对象,这个对象,可以访问这个类的其他成员变量(属性、方法)等。在做项目的时候如果希望一个类,只需要一个对象就可以了,那么,我们就使用单例设计模式。2、既然外部不能通过此类创建对象了,我们要用对象,就可以在本类里面创建本类对象。该模式属于创建型模式中的单例设计模式,解决类在内存中只存在一个对象的问题。2、在类里面new的对象,可以设置为私有化或公有化的。1、在类里面,可以new当前类为一个对象。

    2023-08-24 20:36:05 64

    原创 java.lang.String 类的常用方法

    该方法也接受的分隔符参数是一个正则表达式,如果分隔符是特殊字符(如' . ',' | ',' * '等)需要用' \'进行转义,此外split()方法还有一个重载版本,可以指定一个额外的参数limit,用于限制分割次数,例如:若希望只分割前两个子字符串,可以使用str.split(" , ", 2)5、indexOf(String)和lastIndexOf(String) : 返回指定字符或字符串第一次出现的索引和最后一次出现的索引位置 ------返回类型为int。//返回"HELLO WORLD"

    2023-08-23 14:23:33 134

    原创 常用java.util.Object类的用法

    用于比较两个对象的顺序,如果两个对象相等,则返回0;如果第一个对象小于第二个对象,返回负数,如果第一个对象大于第二个对象,返回正数。java.util.Object是Java7中引入了一个实用类工具,提供了一些静态方法,用于处理对象相关的操作。用于比较两个对象是否相等,它处理了空引用的情况,若相等返回true,不相等返回false。,如果为null,则返回true,否则返回false。用于将对象转换为字符串表示,如果对象为null,则。4、toString()方法(带默认值)3、toString()方法。

    2023-08-22 20:28:39 173 1

    原创 什么是ASCII?

    American Standdard Code for Information Interchange简称ASCII。1、0~31,127,(共33个)表示不可见字符。3、97~122,表示26个小写字母a~z。2、65~90,表示26个大写字母A~Z。4、48~57,表示10个数字字符0~9。

    2023-08-22 19:36:57 131 1

    原创 this和super的区别?

    this:引用当前变量的成员变量和方法;在构造函数中调用当前对象的其他构造函数;将当前对象作为参数传递给其他构造函数或者方法。super:访问父类成员变量和方法;在子类构造函数中调用父类构造函数;当同名方法同时出现在当前类和父类中时,this调用的是当前类的方法,super调用的是父类的方法。this指向的是当前对象,super指向的是父类对象,用于访问父类的成员变量和方法或构造函数。this关键字可以在类的任何位置使用,而super关键字主要在子类中使用。3、调用方法的优先级。

    2023-08-22 19:17:35 316 1

    原创 Object类的常用方法

    object类是所有类的父类,在Java中,所有的Java类都直接或间接的继承了java.lang.Object类。关键字修饰的,意味着它们不能被子类重写。然而,子类可以覆盖(override)这些方法,以提供自定义的实现。方法用于线程通信和同步,这些方法通常与 synchronized。还提供了一些其他的方法,如。需要注意的是,Object。

    2023-08-17 23:27:12 56 1

    原创 方法重载与方法重写的区别

    的方法,分别接受两个整数和两个浮点数作为参数。这两个方法的方法名称相同,但参数类型不同。根据传递给方法的实际参数的类型进行方法调用时,编译器将决定调用哪个方法。在运行时,如果调用一个重写的方法,实际执行的是具体子类的方法,而不是父类的方法,这就是多态性的体现。方法重写:指在子类中重写定义父类中已有的方法,以实现子类特有的行为。1、方法名相同,但参数列表不同(参数数量,参数顺序,参数类型)3、重写方法可以抛出与父类方法一样的异常,或者不抛出任何异常。指在一个类中定义了多个同名的方法,但参数列表不同。

    2023-08-17 23:19:49 206 2

    原创 什么是方法重写?

    子类与父类的方法必须同名、同参(参数列表)、同返回类型。子类可以在重写方法中用super关键字调用父类的方法。方法时,输出是父类版本的方法实现。方法时,输出则是子类重写的方法实现。方法重写也就是方法覆盖,叫法不同而已。

    2023-08-17 23:02:09 207 1

    原创 什么是方法隐藏?

    指在子类中定义一个静态方法,该子类的属性或者方法名与父类中的相同,即在子类中调用这个方法时,会优先调用子类中的方法,而不是父类中的方法,此时父类中的方法或属性被隐藏(父类的属性或方法只是形式上不见了,实际还存在)时,输出为 "Hello from parent",因为这是从父类中的静态方法调用的结果。时,输出为 "Hello from child",因为这是从子类中的隐藏方法调用的结果。),调用的依然是父类中的静态方法,因为方法隐藏只在静态绑定时生效,不受动态绑定的影响。的实例,并调用它们的。

    2023-08-17 22:48:09 333 1

    原创 静态成员和实例成员的区别

    生命周期:静态成员的生命周期和类的生命周期一致,即使没有类的实例存在,静态成员也可以被访问和操作。访问限制:静态成员可以访问类内的其他静态成员(包括静态变量和静态方法),以及类外的其他静态成员(通过类名访问)。实例成员可以访问类内的静态成员和实例成员。访问方式:静态成员可以直接通过类名访问,无需创建类的实例,而实例成员需要通过类的实例才能访问。内存分配:静态成员在内存中只有一份拷贝,而实例成员在每个对象实例化时都会有一份独立的拷贝。所属关系:静态成员属于类本身,而实例成员属于类的实例(对象)。

    2023-08-16 21:48:51 714 1

    原创 static关键字

    static关键字还可以用于定义静态块(静态初始化块),静态块在类加载时执行一次,用于进行=类的初始化操作。static关键字还可以用于定义静态内部类,静态内部类不依赖于外部类的实例,可以直接访问外部类的静态成员。使用static修饰的成员属于类本身,而不是类的实例,静态成员在内存中只有一份拷贝,被所有类的实例共享。在Java中,static是一个关键字,用于修饰类的成员(字段和方法),及内部类(静态内部类)静态成员不能直接访问非静态实例成员,因为非静态成员属于对象实例而非类本身。

    2023-08-16 21:36:05 42 1

    原创 访问修饰符

    类的访问修饰符:类成员的访问修饰符:

    2023-08-16 20:57:23 35 1

    原创 Java包的使用

    组织性:包可以将相关的类和接口组织在一起 ,使代码更加结构化和易于维护。当前类要使用到的其他类所在的包,可以使用import关键字将其导入。避免命名冲突:不同包中的类具有不同的命名空间,因此可以避免类名冲突。在Java源文件的开头使用`package`关键字来指定包的名称。代码重用:通过导入其他包中的类,可以轻松重复使用其他包中的代码。封装性:包可以隐藏类的实现细节,只需要暴露对外使用的类和接口。意思是声明当前类所在的包。

    2023-08-16 20:33:13 384 1

    原创 this关键字的使用

    类中的一个方法访问该类里另一个方法或实例变量(对类而言,this是对具体的对象,所以static修饰的方法中不能使用this引用)当一个类的属性名,也即成员变量与访问该属性的方法参数名相同时,则需要使用this关键字来访问。1、this关键字的使用。

    2023-08-16 19:59:17 48 1

    原创 Java排序算法

    一、一个班级有若干学生,每个学生的成绩以整数表示。请实现一个程序,根据学生的成绩对 他们进行排名并输出。public class StudentGradeSorting { public static void main(String[] args) { int[] grades = {80, 75, 90, 85, 70}; // 学生的成绩数组 for (int i = 0; i < grades.length - 1; i++) {

    2023-08-16 16:42:28 69 1

    原创 Java中的数组问题

    2、创建一个长度为6的整数数组,并且随机生成六个[0~100)之间的随机整数存放到数组中,然后计算出数组中所有元素的和并打印。定义一个长度为5的int型数组arr,提示用户输入5个1-60之间的数字作为数组元素。1、定义一个含有五个元素的数组,并为每个元素赋值,求数组中所有元素的最小值。3、定义一个数组,并求出数组中索引与索引对应的元素都是奇数的元素。c. 遍历数组arr,筛选出数组中不是num倍数的元素并输出。b. 生成2-10(范围包含2和10)之间的随机数num。

    2023-08-16 16:37:31 376 1

    原创 Java二维数组

    2. 设计程序,根据学生总成绩进行排序(降序排列),并输出学生姓名、每门课程的名称和 该学生的成绩、该学生的总成绩。

    2023-08-10 14:35:32 430 1

    原创 Java循环结构基础题

    (斐波那契数列:又称黄金分割数列,因数学家莱昂纳多.斐波那契以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34......)4、李四每天跑步,第一周第一天跑一百米,周二到周天每天比前一天多100米,往后每周比前一周周一多100米,请问李四n(控制台输入)天跑了多少米?3、编写一个Java程序,生成一个斐波那契数列,并将前n个数字输出,斐波那契数列的前两个数字是1和1,后续的数字是前两个数字之和。接下来,我们使用一个循环迭代计算数字的每一位,并将其反转。

    2023-08-08 16:54:55 76

    原创 排序算法:冒泡排序

    不使用Arrays.toString()函数,进行冒泡排序(从小到大输出)

    2023-08-08 15:32:38 40

    原创 Java数组练习题

    二、在唱歌比赛中,有6名评委给选手打分,分数范围是[0 - 100]之间的整数。选手的 最后得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算 出选手的得分。一、定义一个数组其中包含多个数字。用自己的方式最终实现,奇数放在数组的左边, 偶数放在数组的右边。(可以创建其他数组,不必须在原数组中改变)三、现有一个int 数组,数组中有十个元素。

    2023-08-08 09:48:42 251

    原创 Java数组基础题

    七、现有一个整数数组,数组中的每个元素都是[0-9]之间的数字,从数组的最大索引位置开始到最小索引位置,依次表示整数的个位、十位、百位.......依次类推。请编写代码,随机生成六个0(包含)-100(不包 含)之间的整数存放到数组中,然后计算出数组中所有元素的和并打印。六、定义一个长度为20的数组,元素为20-40的随机数,要求判断指定元素在数组中出现 的次数,指定元素为键盘录入范围为20-40之间。a. 定义一个长度为5的int型数组arr,提示用户输入5个1-60之间的数字作为数组元素。

    2023-08-07 22:10:24 108

    空空如也

    空空如也

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

    TA关注的人

    提示
    确定要删除当前文章?
    取消 删除
    手机看
    程序员都在用的中文IT技术交流社区

    程序员都在用的中文IT技术交流社区

    专业的中文 IT 技术社区,与千万技术人共成长

    专业的中文 IT 技术社区,与千万技术人共成长

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    客服 返回
    顶部