秋招后知识点查漏补缺

Java中object类中的常见方法

  • hashCode()
    首先这个方法的返回值是int类型,所以hashcode算出来的hash值都是int范围内的值:-2^31 ~ 2^31 - 1
    默认的hashCode是将内存地址转换为hash值,重写过后才会是自定义的计算方式

  • equals(Object obj)
    默认的equals方法和==的功能是一样的,==比较的是两个对象的地址是否相同。
    为什么要重写呢?
    因为如果不重写equals方法,当将自定义对象放到map或者set中时;如果这时两个对象的hashCode相同,就会调用equals方法进行比较,这个时候会调用Object中默认的equals方法,而默认的equals方法只是比较了两个对象的引用是否指向了同一个对象,显然大多数时候都不会指向,这样就会将重复对象存入map或者set中。这就破坏了map与set不能存储重复对象的特性,会造成内存溢出。

  • clone()
    克隆(复制),他有浅克隆和深克隆,如果一个类的属性只有基本类型,那深克隆和浅克隆是一样的,如果有引用类型,就能体现出他们的不同,看着下面代码理解深克隆和浅克隆的概念:
    浅克隆:拷贝的是引用。
    深克隆:新开辟内存空间,进行值拷贝。

java中==和equals和hashCode的区别

  • =
    如果比较的是两个基础数据类型,则比较的是两个值
    如果比较的是两个引用数据类型,则比较的是他们的内存地址

  • equals
    equals()方法是用来判断其他的对象是否和该对象相等。其再Object里面就有定义,所以任何一个对象都有equals()方法。区别在于是否重写了该方法。
    很明显Object定义的是对两个对象的地址值进行的比较(即比较引用是否相同)。但是为什么String里面调用equals()却是比较的不是地址而是堆内存地址里面的值呢。这里就是个重点了,像String 、Math、Integer、Double等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法。
    需要注意的是当equals()方法被override时,hashCode()也要被override。按照一般hashCode()方法的实现来说,相等的对象,它们的hashcode一定相等。

  • hashCode
    举例说明下:如果你想查找一个集合中是否包含某个对象,那么程序应该怎么写呢?不要用indexOf方法的话,就是从集合中去遍历然后比较是否想到。万一集合中有10000个元素呢,累屎了是吧。所以为了提高效率,哈希算法也就产生了。核心思想就是将集合分成若干个存储区域(可以看成一个个桶),每个对象可以计算出一个哈希码,可以根据哈希码分组,每组分别对应某个存储区域,这样一个对象根据它的哈希码就可以分到不同的存储区域(不同的区域)。
    所以再比较元素的时候,实际上是先比较hashcode,如果相等了之后才去比较equal方法。

在这里插入图片描述
一个对象一般有key和value,可以根据key来计算它的hashCode值,再根据其hashCode值存储在不同的存储区域中,如上图。不同区域能存储多个值是因为会涉及到hash冲突的问题。简单如果两个不同对象的hashCode相同,这种现象称为hash冲突。简单来说就是hashCode相同但是equals不同的值。对于比较10000个元素就不需要遍历整个集合了,只需要计算要查找对象的key的hashCode,然后找到该hashCode对应的存储区域查找就over了。
在这里插入图片描述

最左匹配原则

  • 联合索引
    所谓的联合索引就是指,由两个或以上的字段共同构成一个索引。
    我们现在的业务需求经常要通过学生的年龄(student_age)和学生的家庭住址(student_addr)来同时筛选学生
SELECT * FROM tb_student WHERE student_age = 20 AND student_addr = '北京';

那此时我们就最好在 student_age 和 student_addr 这两个字段上同时设置索引

  • 最左前缀匹配
explain select * from tb_student where student_age = 10 and student_addr = '北京';

使用了索引

explain select * from tb_student where student_addr = '北京' and  student_age = 10;

使用了索引

explain select * from tb_student where student_age = 10;

使用了索引

explain select * from tb_student where student_addr = '北京';

没有使用索引

MySQL 建立联合索引的规则是这样的,它会首先根据联合索引中最左边的、也就是第一个字段进行排序,在第一个字段排序的基础上,再对联合索引中后面的第二个字段进行排序,依此类推。

综上,第一个字段是绝对有序的,从第二个字段开始是无序的,这就解释了为什么直接使用第二字段进行条件判断用不到索引了(从第二个字段开始,无序,无法走 B+ Tree 索引)!这也是 MySQL 在联合索引中强调最左前缀匹配原则的原因。

HTTPS(来源于图解HTTP一书)

HTTP缺点:

  • 通信使用明文(不加密),内容可能会被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装
  • 无法证明报文的完整性,所以有可能已遭篡改

HTTPS主要是针对上述缺点进行改善:

  • 通过SSL进行通信加密。用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS ( HTTP Secure,超文本传输安全协议)或HTTP over SSL。

常用加密方法:
对称加密和非对称加密

  • 通过证书手段进行验证双方身份。虽然使用HTTP协议无法确定通信方,但如果使用SSL 则可以。SSL不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定方。证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。
  • 虽然有使用HTTP协议确定报文完整性的方法,但事实上并不便捷、可靠。其中常用的是 MD5和 SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。

事实上,HTTP+通信加密+证书+完整性保护=HTTPS

拓展

  • web攻击技术:简单的HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象。应用 HTTP协议的服务器和客户端,以及运行在服务器上的 Web应用等资源才是攻击目标。
  • 攻击模式:主动攻击(SQL注入),被动攻击
  • SQL注入攻击:SQL注入(SQL Injection)是指针对 Web应用使用的数据库,通过运行非法的SQL而产生的攻击。该安全隐患有可能引发极大的威胁,有时会直接导致个人信息及机密信息的泄露。
    Web应用通常都会用到数据库,当需要对数据库表内的数据进行检索或添加、删除等操作时,会使用SQL语句连接数据库进行特定的操作。如果在调用SQL语句的方式上存在疏漏,就有可能执行被恶意注入( Injection)非法SQL语句。
  • DoS攻击:让运行中的服务呈停止状态的攻击
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lhj_loveFang_1105

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值