Java关于继承
本篇文章的主要内容为Java的继承。
主要内容包括:
三个概念:类、超类、子类,这是继承与被继承的主体。
Object:所有类的超类。
泛型数组列表:关于泛型这个类的详细内容后面再总结,放在这里是因为它的参数是一个类型,实现了动态数组。
继承设计技巧:《Java核心技术卷》中的忠告。
类、超类、子类关键字extends表示继承。格式为:
123class Manager extands Employee{ 添加方法和域}
超类就是已存在的类,这里是Employee。子类就是新类,这里是Manager。
通用的方法应该放进超类,特殊用途的方法应该放进子类。
override & super覆盖(override):超类中的方法对子类不适用的时候,就应该适用覆盖。(比如Employee的getSalary() 就是月薪,而Manager的getSalary() 就是月薪+奖金)。
super关键字:调用超类方法。比如我们要覆盖Employee的getSalary() ,实现Manager的getSalary() 。那么我们首先要获得月薪,月薪这个概念定义在 ...
代码随想录-背包问题
01背包问题 : 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。
二维数组解法动规五部曲 :
确定dp数组以及下标的含义
dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。
确定递推公式
dp[i] [j] = max(dp[i - 1] [j], dp[i - 1] [j - weight[i]] + value[i]);
dp数组如何初始化
1234567for (int j = 0 ; j < weight[0]; j++) { dp[0][j] = 0;}// 正序遍历for (int j = weight[0]; j <= bagweight; j++) { dp[0][j] = value[0];}
确定遍历顺序 (两种)
上面是对于dp[i] [j]的一个图。可以看到,i是代表从下标为0~i的物品里随便取,j是背包重 ...
Java面向对象
面向对象程序设计(object oriented programming,opp)已经是当前程序设计的主流。
本文章讲述Java对象与类相关知识。
在OPP中,不必关心对象的具体实现,只要能满足用户的需求即可。
在OPP中 ,数据被放在第一位。
在实现OPP时,不同于面向过程程序设计要从编写main函数开始,而是应该从设计类开始。
关于OPP,相信参与过中大型系统开发的同学都有自己的理解,这里就不再赘述。
本篇文章核心的内容为 Java的OPP,主角为Java而非opp。
类类(class) —–> 由类构造对象 (construct) ——–> 构造结果(新对象) : 类的实例 (instance)
类的特点 继承 、封装 、多态。
继承 (inheritance): 类可以通过扩展另一个类来建立,扩展后的新类具有所拓展类的全部方法和属性。(Java所有的类都源于超类Object)
封装(encapsulation,数据隐藏):将数据和方法组合在一个包中,对使用者隐藏数据实现方式。对象中的数据称为实例域(instance fields),每个对象都有一组实 ...
HTTPS与TLS
HTTPS&SSL/TLS HTTP 有一些缺点,无状态,明文,不安全。
其中的“无状态”在加入 Cookie 后得到了解决。
而另两个缺点——“明文”和“不安全”仅凭 HTTP 自身是无力解决的,需要引入新的 HTTPS 协议。
而由于其不安全的特性,引入了HTTPS 。
由于 HTTP 天生“明文”的特点,整个传输过程完全透明,任何人都能够在链路中截获、修改或者伪造请求 / 响应报文,数据不具有可信性。
比如,“代理服务”。它作为 HTTP 通信的中间人,在数据上下行的时候可以添加或删除部分头字段,也可以使用黑白名单过滤 body 里的关键字,甚至直接发送虚假的请求、响应,而浏览器和源服务器都没有办法判断报文的真伪。
因此HTTP不安全,HTTPS为其增加了安全的特性。
安全的定义首先什么样的通信过程才是安全的呢?
通常认为,如果通信过程具备了四个特性,就可以认为是“安全”的,这四个特性是:机密性、完整性,身份认证和不可否认。
机密性(Secrecy/Confidentiality)是指对数据的“保密”,只能由可信的人访问,对其他人是不可见 ...
代码随想录-动态规划基础
动态规划五部曲1.确定dp数组以及下标的含义
2.确定递推公式
3.dp数组如何初始化
4.确定遍历顺序
5.举例推导dp数组
509.斐波那契数
动规解法
12345678910111213141516171819202122232425262728293031323334/** * @param {number} n * @return {number} *//*** 动态规划五部曲1.确定dp数组以及下标的含义dp[i]的定义为:第i个数的斐波那契数值是dp[i]2.确定递推公式题目已经把递推公式直接给我们了:状态转移方程 dp[i] = dp[i - 1] + dp[i - 2];3.dp数组如何初始化dp[0] = 0;dp[1] = 1;4.确定遍历顺序从递归公式dp[i] = dp[i - 1] + dp[i - 2]中可以看出,dp[i]是依赖 dp[i - 1] 和 dp[i - 2],那么遍历的顺序一定是从前到后遍历的5.举例推导dp数组0 1 1 2 3 5 8 13 21 34 55 */var fib = functi ...
代码随想录-栈与队列
目前本内容用Java实现
232.用栈实现队列
用栈实现队列: 在存的时候正常存,出的时候用栈存两边就和队列出的一样了
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566/**Java标准库中 : 栈 :Stack push:往栈顶添加元素(存) pop:从栈顶移除元素(获取的是最后一个存的东西) peek:获取栈顶元素,并不做任何添加删除操作 队列 : Quene offer:入队 poll:出队 peek:获取队头元素,并不做任何添加删除操作 用栈实现队列 实现MyQueue.offer 也就是存(存在最后一位) 实现MyQuene.pop/peek 也就是获取第一个存的东西 */class MyQueue { /** Initialize y ...
HTTP数据、连接与缓存
HTTP的实体数据TCP协议是传输层的协议,所以TCP只关心文件是否送达,而不关心内容是什么。
对于HTTP而言,由于他说应用层协议,所以必须要关系传输内容,从而告诉上层应用这是什么数据。
同样的,上层应用也应该告诉HTTP协议,他能接受什么内容。
因此,我们一起来关心HTTP body 数据。
在HTTP body 数据中,HTTP 协议为此定义了两个 Accept 请求头字段和两个 Content 实体头字段,用于客户端和服务器进行“内容协商”。也就是说,客户端用 Accept 头告诉服务器希望接收什么样的数据,而服务器用 Content 头告诉客户端实际发送了什么样的数据。
如下图:
Accept 字段标记的是客户端可理解的 MIME type,可以用“,”做分隔符列出多个类型
Accept-Encoding 字段标记的是客户端支持的压缩格式,例如上面说的 gzip、deflate 等,同样也可以用“,”列出多个
同理,Content-Type和Content-Encoding是发送端的相应信息。
MIME 主要有八大类,每个大类下再细分出多个子类,形式是“type ...
代码随想录-双指针
27.移除元素
12345678910111213141516171819/** * @param {number[]} nums * @param {number} val * @return {number} */var removeElement = function(nums, val) { //双指针 let slow = 0 ,fast = 0; //这里不减一 for(fast = 0 ; fast < nums.length ; fast++ ){ if(nums[fast] != val){ nums[slow] = nums[fast] slow ++ } } //为什么返回slow ? //slow储存的是不存在val的前n个值的数组下标,根据题目要求,slow后面的不需要考虑 return slow};
344.反转 ...
HTTP概览
据 NetCraft 公司统计,目前全球至少有 16 亿个网站、2 亿多个独立域名,而这个庞大网络世界的底层运转机制就是 HTTP(HyperText Transfer Protocol。)。
起源1989 年,任职于欧洲核子研究中心(CERN)的蒂姆·伯纳斯 - 李(Tim Berners-Lee)发表了一篇论文,提出了在互联网上构建超链接文档系统的构想。这篇论文中他确立了三项关键技术。
URI:即统一资源标识符,作为互联网上资源的唯一身份;
HTML:即超文本标记语言,描述超文本文档;
HTTP:即超文本传输协议,用来传输超文本。
这三项技术在如今的我们看来已经是稀松平常,但在当时却是了不得的大发明。基于它们,就可以把超文本系统完美地运行在互联网上,让各地的人们能够自由地共享信息,蒂姆把这个系统称为“万维网”(World Wide Web),也就是我们现在所熟知的 Web。所以在这一年,我们的英雄“HTTP”诞生了,从此开始了它伟大的征途。
HTTP/0.920 世纪 90 年代初期的互联网世界非常简陋,计算机处理能力低,存储容量小,网速很慢,还是一片“信息荒漠 ...
代码随想录-字符串
344.反转字符串
双指针完事
123456789101112/** * @param {character[]} s * @return {void} Do not return anything, modify s in-place instead. */var reverseString = function(s) { // 双指针交换字符 let a = -1,b = s.length while(++ a < --b){ [s[a], s[b]] = [s[b], s[a]] } return s};
541.反转字符串Ⅱ
与1的区别在于,先分割,再反转
123456789101112131415161718192021/** * @param {string} s * @param {number} k * @return {string} */var reverseStr = fun ...