2 JohnArchie

尚未进行身份认证

我要认证

努力努力再努力

等级
TA的排名 7w+

设计模式:单例模式介绍及8种写法(饿汉式、懒汉式、Double-Check、静态内部类、枚举)

单例模式0、介绍一、饿汉式(静态常量)二、饿汉式(静态代码块)三、懒汉式(线程不安全)四、懒汉式(线程安全,同步方法)五、懒汉式(同步代码块)六、 双重检查Double Check七、静态内部类八、枚举九、总结十、单例模式在JDK里的应用0、介绍单例模式,就是采用一定方法,保证整个软件系统里,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(这种方法一般是静态的)。单例模式在实际开发中有 5 种写法+加 3 种。饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒

2020-08-09 16:40:54

设计模式七大原则及代码示例

七大原则:单一职责原则;接口隔离原则;依赖倒转原则;里氏替换原则;开闭原则ocp;迪米特法则;合成复用原则。设计模式其实包含了面向对象的精髓,封装、继承、多态。

2020-08-08 11:07:18

IP协议、IP数据报格式、DNS、DNS劫持、NAT网络地址转换

一、IP协议1.1 背景网络层一般有两种服务:一种是面向连接的虚电路服务,能够保证可靠通信,建立虚电路连接,然后通过这个连接发送分组,完了后释放虚电路。另一种是无连接的数据包服务,走什么路经都随便,但是为了到达目的地必须携带目的主机的地址,虽然如此,发送的分组还是可能误码、丢失、重复或者乱序。因为第二种做法不用提供可靠传输服务,网络中的路由器就比较价格低,而且易于维护,因特网采用的就是这种服务,它采用的就是IP协议。这种服务的好处是节省成本,那么复杂的网络处理功能都交给了更上一层的运输层,他

2020-08-06 17:23:13

HTTP协议,http1.0,1.1,2.0区别,http和https的区别、cookie和session

一、HTTP定义HTTP是Hyper Text Transfer Protocol 超文本传输协议 的缩写。用于从WWW服务器传输超文本到本地浏览器的传送协议,是一个无状态的协议。通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。默认HTTP的端口号为80,HTTPS的端口号为443。一般情况:HTTP协议永远都是客户端发起请求,服务器回送响应,客户端将内容拿到之后就和服务器断开来连接。这就决定了,如果客户端没有发起请求,服务器是没法推送数据

2020-08-05 16:26:04

打家劫舍问题1、2、3(动态规划、递归)

一、打家劫舍1你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1] 输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:

2020-08-05 12:21:44

快速排序partition写法(一道力扣题目引出的Lomuto和Hoare的partition方法区别)

做力扣的一道题目:169 多数元素的时候,用到了快速排序,所以复习了一下快排。一、快排快排思想就是:选定一个哨兵元素pivot;把小于pivot的元素放在pivot左边,大于pivot的放在右边,这样,划分完后pivot就在自己最终应该在的位置了;对于pivot位置的左边和右边,递归进行 1、2 的过程。其中,quickSort就是主方法,是分支递归的过程,2的步骤就是核心的partition方法,他进行划分,使得每一轮用 O(n) 的时间确定了一个元素的位置。因此快速排序的渐近时间复

2020-08-03 16:01:43

TCP粘包、服务器TIME-WAIT过多的问题

一、粘包TCP是基于字节流传输的,只维护发送出去多少,确认了多少,没有维护消息与消息之间的边界,因而可能导致粘包和拆包问题。粘包问题分为两种:发送方产生粘包采用 TCP 协议传输数据的客户端与服务器经常是保持一个长连接的状态,双方在连接不断开的情况下,可以一直传输数据。(一次连接发一次数据不存在粘包)但当发送的数据包过于小,那么 TCP 协议默认的会将这些较小的数据包进行合并发送(缓冲区数据发送堆压);(如果过大,取的时候纷乱了,就是拆包。)这个合并过程就是在发送缓冲区中进行的,也就是说数据

2020-07-30 11:00:28

UDP协议、UDP和TCP优缺点对比

一、定义UDP 全称 User Datagram Protocol, 用户数据报协议。和TCP协议一样,也处于计算机网络的运输层(传输层)。但是UDP是一种不可靠的协议,正如名字,他是无连接的、面向应用报文的协议。无连接:不同于TCP的三次握手建立连接、四次挥手释放连接,UDP协议的通信双方随时可以互相发送数据;面向应用报文:对于应用层的报文,不拆、不合,保留他们的边界进行传输。(不同于TCP面向字节流、会将他们都看成连续的字节流放入自己的发送缓存,每次拿一部分组成报文)支持单播、多播、广播。

2020-07-29 16:38:21

TCP协议、TCP报文首部格式、三次握手四次挥手、流量控制、拥塞控制、滑动窗口

一、定义背景:TCP协议工作在运输层,下层的网际层,核心是IP协议,是一个不可靠的协议,因为他只是保证了数据能正确从源主机到达唯一的确定目的主机,但是传输的内容是不是被破坏,是不是按照正确顺序,没有进行处理,所以运输层的TCP协议在使用网际层的IP协议提供的服务同时,还要解决这个不可靠的问题。TCP协议,Transmission control protocol,传输控制协议。是一种可靠的运输层协议:他是面向连接的、基于字节流的协议。基于字节流:TCP协议将应用层的数据只看成一连串的字节流,

2020-07-29 10:24:42

计算机网络复习总结:什么是OSI7层模型、5层模型、TCP/IP 4层模型,各层协议导航

个人总结整理相关计算机网络知识点,出发点是各类问题以及比较重要的部分。一、OSI 七层模型OSI 的七层模型从上到下依次是:应用层表示层会话层运输层网络层数据链路层物理层七层模型开始是某美国组织定的标准,强调的是理论,各个层需要完成的功能都很清晰,实现起来麻烦。如果一开始只是两个物理机器在通信,显然物理层就足够了,但是会出现一系列的问题,逐渐发展,计算机的最终目的已经发展到应用层,就催生了一层一层的累加,所以就需要进行区分,产生了分层,以及每一层的功能重点。各层的功能:1

2020-07-28 12:17:34

leetcode 力扣 658 找到 k 个最接近的元素

题目:给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。如果有两个数与 x 的差值一样,优先选择数值较小的那个数。示例 1: 输入: [1,2,3,4,5], k=4, x=3输出: [1,2,3,4]示例 2: 输入: [1,2,3,4,5], k=4, x=-1输出: [1,2,3,4]说明:k 的值为正数,且总是小于给定排序数组的长度。数组不为空,且长度不超过 104数组里的每个元素与 x 的绝对值

2020-07-25 14:07:23

leetcode力扣 34题 在排序数组中查找元素的第一个和最后一个位置

题目:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums =[5,7,7,8,8,10], target = 6输出: [-1,-1]第一个出现的位置:左边不是target右边是target。最

2020-07-25 13:45:01

leetcode 力扣 35.搜索插入位置

题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1: 输入: [1,3,5,6], 5 输出: 2示例 2: 输入: [1,3,5,6], 2 输出: 1示例 3: 输入: [1,3,5,6], 7 输出: 4示例 4: 输入: [1,3,5,6], 0 输出: 0一、采用模板 2需要查看 当前位置 和 右边位置,采用模板 2 ,因为如果不存在,要插入的位置是尽量靠右的。另

2020-07-25 12:26:18

leetcode力扣 278.第一个错误的版本

题目:你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。示例: 给定 n = 5,

2020-07-25 11:55:33

leetcode 力扣 162.寻找峰值

题目:峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。示例 1: 输入: nums = [1,2,3,1]输出: 2解释: 3 是峰值元素,你的函数应该返回其索引 2。示例 2: 输入:nums = [1,2,1,3,5,6,4]输出: 1 或 5解释: 你的函数可

2020-07-25 11:48:38

leetcode力扣153题.寻找旋转排序数组中的最小值

题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1: 输入: [3,4,5,1,2]输出: 1示例 2: 输入: [4,5,6,7,0,1,2]输出: 0分析:可以用的方法有三种:无脑遍历;排序;二分。显然时间复杂度最小的就是二分法。一、使用模板的写法模板总结以及解释链接:二分查找简介、二分查找的三类

2020-07-25 11:03:34

leetcode力扣33.搜索旋转排序数组

题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2: 输入: nums = [4,5,6,7,0,1,2], tar

2020-07-25 10:52:11

leetcode力扣 374 猜数字大小

题目:我们正在玩一个猜数字游戏。 游戏规则如下:我从 1 到 n 选择一个数字。 你需要猜我选择了哪个数字。每次你猜错了,我会告诉你这个数字是大了还是小了。你调用一个预先定义好的接口 guess(int num),它会返回 3 个可能的结果(-1,1 或 0):-1 : 我的数字比较小1 : 我的数字比较大0 : 恭喜!你猜对了!示例 :输入: n = 10, pick = 6输出: 6除了调接口,这就是一个标准的基础二分查找。使用模板一。模板来源:二分查找简介、二分查找的三类

2020-07-24 22:12:49

leetcode力扣69. x 的平方根

题目:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。题目意思很简单,调库函数肯定不行,那么就能想到二分。因为我们要的结果总是左边界意思就是比如 5 的开方,2平方小,3平方大了,我们希望要的结果是 2 ,那么就是总要在左半部分更新答案

2020-07-24 22:07:31

二分查找简介、二分查找的三类模板总结,以及对应类型的算法题练习合集

声明:模板的内容来源于力扣的探索章节,加上了自己的理解后的修改以及注释0、介绍二分查找是一种在每次比较之后将查找空间一分为二的算法。每次需要查找集合中的索引或元素时,都应该考虑二分查找。如果集合是无序的,我们可以总是在应用二分查找之前先对其进行排序。二分查找一般由三个主要部分组成:预处理 —— 如果集合未排序,则进行排序。二分查找 —— 使用循环或递归在每次比较后将查找空间划分为两半。后处理 —— 在剩余空间中确定可行的候选者。先来看一个最基本的二分查找题目:给定一个 n 个元素有

2020-07-24 21:48:04

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到达人
    签到达人
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 分享小兵
    分享小兵
    成功上传3个资源即可获取