自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Executor框架的使用

//为每一个任务创建一个新线程的缺点://①线程的创建与销毁开销很大//②大量的线程将占据大量的资源,比如内存空间,容易造成服务器资源耗尽而崩溃//③可创建的线程数量受到操作系统等因素的限制,如果破坏了这些限制,可能抛出异常//使用Executor将任务的提交与执行解耦,提高程序的并发度,由此获得并发性,并且避免了为每一个任务创建一个新线程产生的问题class ExecutorTest{ private static final Executor executor = Executor

2022-03-17 02:50:39 506

原创 NIO缓冲区

NIO缓冲区概述缓冲区的分类缓冲区的四个重要属性Buffer类的主要API缓冲区的填充和释放缓冲区的压缩缓冲区的比较缓冲区的复制字节缓冲区字节顺序视图缓冲区概述Buffer类位于java.nio包中,Bufffer类及其子类的UML图如下缓冲区的分类操作系统在内存区域中进行I/O操作,由于在操作系统看来内存是一个巨大的字节序列,因此只有字节缓冲区能够参与I/O操作。字节缓冲区要么是直接的,要么是非直接的,如果是直接的,JVM会尽最大努力直接在此缓冲区上进行本机I/O操作,避免用户缓冲区与内核

2022-01-10 07:51:05 331

原创 常见排序算法

常见内部排序算法概述插入类排序直接插入排序折半插入排序希尔排序交换类排序冒泡排序快速排序选择类排序简单选择排序堆排序归并排序基数排序概述插入类排序直接插入排序public class SF{ public int[] sortArray(int[] nums) { for(int i = 1;i < nums.length;i++){ //初始时nums[0]为有序序列,因此从1开始遍历待插入记录 int temp = nums[i]; /

2021-12-31 14:27:26 611

原创 路由选择算法

因特网中的路由选择协议路由选择的工作及路由选择算法的作用路由选择算法的分类路由选择的工作及路由选择算法的作用默认路由器:主机通常直接与一台路由器相连接,该路由器称为主机的默认路由器,又称为该主机的第一跳路由器源路由器 :源主机的默认路由器目的路由器 :目的主机的默认路由器路由选择的工作 :路由选择的工作是确定从源主机到目的主机的路径,可以归结为确定从源路由器到目的路由器的路径路由选择算法的作用 :路由选择算法在网络路由器中运行、交换和计算信息,用这些信息配置路由器的转发表路由选择

2021-12-03 22:40:56 1666

原创 网络层概述

网络层概述网络层的主要功能网络层的类型虚电路网络数据报网络路由器的硬件体系结构网络层的主要功能前面我们了解了运输层协议只在端系统中工作,在发送主机中,运输层协议将来自应用程序的报文移动到网络层;在目的主机中,运输层协议将来自网络层的报文段交付给在主机上运行的适当应用程序进程。而网络层的主要职责就是将报文段从一台主机发送到另一台主机。 为此,网络层需要具备以下两个重要功能转发 :当一个分组到达路由器的一条输入链路时,路由器必须将该分组移动到适当的输出链路。关注的重点是分组在单一的路由器中从一条入链

2021-12-01 01:06:59 1369

原创 具体的运输层协议---UDP和TCP

具体的运输层协议---UDP和TCP概述TCP协议TCP协议概述TCP协议的可靠数据传输(可靠性)三次握手与四次挥手(TCP连接的创建与断开)概述前面我们总体介绍了运输层协议的作用(参考我的另一篇文章运输层协议概述),知道了运输层仅在端系统中工作,而不出现在中间网络元素中(如路由器等),现在我们来具体看两种运输层协议TCP协议和UDP协议TCP协议TCP协议概述TCP是一种面向连接的、可靠数据传输的、具有拥塞控制机制的运输层协议(这三个特点我们稍后一一解释),既然是运输层协议,那么它的职责就是:

2021-11-17 17:59:23 579 1

原创 运输层协议概述

运输层运输层协议的理解多路分解和多路复用具体的运输层协议对应的多路分解和多路复用的区别运输层协议的理解前面我们介绍了应用层协议(HTTP、SMTP等等),应用层的主要作用是定义了运行在不同端系统上的应用程序进程之间如何相互传递报文(主要是定义了应用进程的数据报文类型、语义等等,但是没有定义报文在不同端系统之间如何运输,运输的问题要依靠下层协议来完成)。接下来我们看一下运输层的基本原理为了准确的了解运输层,我们将运输层和网络层对比起来看运输层:为运行在不同主机上的应用进程之间提供了逻辑通信功能(

2021-11-15 14:15:52 2800 1

原创 可靠数据传输原理详细图解

可靠数据传输原理概述rdt1.0rdt2rdt2.0rdt2.1rdt2.2rdt3.0流水线可靠数据传输协议为什么使用流水线流水线对可靠数据传输协议带来的影响流水线协议中恢复差错的两种方法回退N步协议(GBN协议、滑动窗口协议)选择重传协议(SR协议)概述我们都知道TCP协议是一种可靠的运输层协议,它可以保证HTTP报文无差错、无损失且有序地从客户端到达服务器。那么这种可靠性是怎样实现的呢?这便是本文要讨论的重点可靠数据传输(rdt)为其上层提供这样一种服务——数据可以通过一条可靠的信道进行传输

2021-11-13 16:55:39 6404 1

原创 hosts文件

hosts文件前面我们讲解了DNS域名解析的流程以及原理(详见DNS解析),可以了解到DNS服务器最大的作用便是存储着域名到IP地址的映射,以便用户在通过浏览器请求某个页面时,将用户输入的域名解析为对应的IP地址。接下来我们通过一次域名解析的完整流程来认识hosts文件(下图是一次域名解析的完整过程,对[MY PC]框图以外不理解的可以参考DNS解析)接下来我们对上图进行一个较为深刻的解读假定我们在请求www.oracle.com站点当我们在浏览器导航栏输入一条域名并按下回车时,域名解析的过程

2021-11-04 00:39:49 3848 4

原创 HTTP与HTTPS

HTTP和HTTPSHTTP(超文本传输协议)—Web的应用层协议HTTP使用客户-服务器体系结构Web浏览器实现了HTTP的客户端Web服务器(用于存储Web对象)实现了HTTP的服务器端HTTP定义了Web客户向Web服务器请求Web页面的方式,以及Web服务器向Web客户传送Web页面的方式HTTP使用TCP作为它的支撑运输协议,套接字是应用层和运输层之间的接口。也就是说HTTP请求报文由Web浏览器生成,经套接字发向运输层,紧接着HTTP请求报文由TCP传输向Web服务器,Web服

2021-10-25 15:59:29 369

原创 DNS解析

DNS—域名系统前言:人们喜欢用便于记忆的主机名来标识主机,而路由器则喜欢定长的、有着层次结构的IP地址。为了折衷这些不同的偏好,我们需要一种能进行主机名到IP地址转换的目录服务。这就是域名系统DNS的主要任务。DNS的定义DNS是一个由分层的DNS服务器实现的分布式数据库一个使得主机能够查询分布式数据库的应用层协议(DNS协议运行在UDP之上)DNS提供的服务主机别名: 有着复杂主机名的主机可能一个或者多个别名。在有别名的情况下,有一个规范主机名,主机别名一般比规范主机名更加容易记

2021-10-23 14:46:34 2139

原创 JAVA多线程基础--------并发编程三大特性(原子性、可见性、有序性)

并发编程三大特性(原子性、可见性、有序性)并发编程三大特性的定义和由来凡事有因才有果,有果必有因,并发编程的三大特性也如此,人们不会莫名其妙定义出并发编程的三大特性。接下来我们探讨下为什么会有并发编程这三大特性?简单地说,并发编程这三大特性就是为了在多个线程交替执行任务的过程中保证线程安全性(点此跳转)。那么为什么会出现线程不安全的现象呢?接下来我们从这三个特性切入来介绍线程不安全的原因。以下涉及到的主内存和工作内存相当于主存和cpu缓存,详见Java内存模型原子性:一组操作要么全部执行,要

2021-08-16 19:38:11 401 2

原创 JAVA多线程基础--------volatile变量

Java多线程之Volatile变量目录JAVA内存模型(JMM)主内存和工作内存的交互Volatile变量的特性及使用场景Volatile变量两个特性的底层实现原理目录JAVA内存模型(JMM)要想深入地了解Volatile变量必须先了解Java内存模型。因此在介绍volatile变量之前,我们先简单的了解下Java内存模型。在此我们将物理机(共享内存多核系统)的内存模型和JMM对比起来看,因为二者之间有很强的相似性。物理机内存模型我们知道基于高速缓存的存储交互很好的解决了处理器与内存速度之

2021-08-14 16:09:15 425

原创 JAVA多线程基础--------线程安全性

线程安全性一个对象是否需要是线程安全的,取决于它是否被多个线程访问,而不取决于对象要实现的功能什么是线程安全的代码------------------------------------------------------------------------------------------------核心:对 共享的 和 可变的 状态的访问进行管理。防止对数据发生不受控的并发访问。何为对象的状态?状态是指存储在对象的状态变量(例如实例或静态域)中的数据。还可能包括 其他依赖对象 的域。e

2021-08-11 23:19:58 275 1

原创 JSP页面代码到源代码的转换

jsp页面生成的源代码一般是通过浏览器来查看的转换过程中,jsp页面中的html元素在源代码中被原样保留,只有jsp代码会发生改变jsp页面代码<%@ page language="java" import = "java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta char

2021-07-24 18:32:05 1292

原创 JSP运行机制

JSP运行机制JSP页面: JSP页面是对静态页面的扩展,可以包括HTML中定义的所有标签<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- page指令主要用于设置整个JSP页面范围内有效的相关信息,pageEncoding表示jsp文件存储时的编码方式,contentType表示jsp文件生成内容(根据模板生成的HTML部分)的编码方式

2021-07-20 09:12:49 459

原创 基本sql语句及细节记录

基本sql语句及细节记录空了可以慢慢看use Testgo--创建基本表--实体完整性create table student( sno char(9) primary key, --列级实体完整性 sname char(20) not null, sex char(2), sage smallint, sdept char(20));create table sc( sno char(9) not null, cno char(4) not null,

2021-07-11 03:59:00 160 1

原创 继承/动态绑定/继承中的构造方法/常见修饰符的常见用法

继承定义: 子类从它的父类中继承 可访问 的数据域和方法,还可以添加新的数据域和方法,即对父类进行扩展。关键字: extendsclass SuperA{..........}class A1 extends SuperA{..........}class A2 extends SuperA{..........}java不允许多继承(eg:A extends SuperA1 && A extends SuperA2)定义中说到 可访问的 ,那么子类到底继

2021-03-03 12:19:53 280 3

原创 面向对象/传值和传引用/java字符串长度限制因素

一.面向对象程序设计定义:把现实世界中的事物抽象为 “对象” 进行程序设计面向过程到面向对象的转变:编程的终极目标是解决问题,解决现实生活中的问题,人们一开始编程是对 基本数据类型 进行操作,但是有时候需要将几个数据项进行统一操作,例如一个学生的姓名,学号等数据,人们希望对每个学生的姓名学号进行统一操作,于是出现了C语言中的结构体,这相对于单纯的操作基本数据类型方便了许多,但是这还不够方便,人们不但把多个数据项集成在一起,而且还把对这些数据项的操作结合起来,这样极大的提高了代码的可重用性,也极大地降低了

2021-03-01 17:36:32 388 7

原创 矩阵快速幂<leetcode笔记>

矩阵快速幂问题描述: 爬楼梯需要n阶可爬到楼顶,每次只能爬1或2阶,问共有多少种爬法。动态规划: 由于每次只能爬1或2阶,故阶数为n的总方案数为最后一步爬1阶(即阶数为n-1阶的总方案数)加上最后一步爬2阶(即阶数为n-2阶的总方案数)。可得,状态转移方程: f(n) = f(n - 1) + f(n -2); <斐波那契数列>边界条件: f(0) = 1,f(1) = 1;对此状态转移方程,可使用递归或迭代法:递归:class Solution{ //超出时间.

2021-02-08 13:26:21 262

原创 初识线段树<leetcode笔记>

初识线段树问题描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。我的思路:枚举数组中所有的连续子数组,找出所有连续子数组和的最大值。缺点:时间复杂度较高o(n^2);class Solution{ public int maxSubArray(int[] nums) { int max = Integer.MIN_VALUE; for(int i = 0;i < nums.length;i+

2021-02-06 13:21:12 129

原创 双指针法<leetcode笔记>

双指针法–需要删除元素较少时问题描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。我的思路:设置两个指针,快指针在每次遍历是自增,慢指针只在数组元素不等于val时自增,遍历完成时慢指针的值即为函数的返回值。缺点:若数组中和val相等的元素较少,会导致大量无用的复制,从而降低程序的运行效率

2021-02-05 16:52:29 70

原创 合并K个有序链表<Leetcode从简单到困难的递进>

合并K个有序链表<Leetcode从简单到困难的递进>看到合并K个有序链表,我们首先想到的是两个有序链表的合并(后附合并两个有序链表的代码)。算法过程:遍历链表数组,将链表数组中第一个链表和第二个链表进行合并,然后将合并后的结果与链表数组中的第三个链表进行合并,以此类推。 范式:res = helper(res,lists[i]);(注意res初始值应置空)合并k个有序链表的代码实现合并两个有序链表的代码实现...

2021-01-31 13:36:28 115

原创 逻辑运算符的“短路”举例

逻辑运算符的“短路”错误代码:错误分析:如果s1是s2的子集或者s2是s1的子集,那么index就会自增到s1.length()或者s2.length()。这样在最后一次判断循环条件时便会出现越界访问现象。正确代码:这段代码仅仅调换了由&&连接的三个条件的顺序,其原理是利用逻辑运算符的“短路”,即便index自增到s1.length()或s2.length(),一旦前边两个条件运算结果为假,就不再进行s1.charAt(index) == s2.charAt(index),.

2021-01-30 22:56:47 758

原创 最长公共前缀

**最长公共前缀(Leetcode.14<简单>)**我的思路:首先遍历字符串数组,获取字符串数组中最短字符串的长度min,然后以min作为外循环的边界条件,内循环遍历每个字符串的第i个字符是否全部相等,若不相等标记量flag置为false,否则为true。若flag为true,将该字符加入结果,否则跳出外循环。错点:1.没有考虑数组引用为空和数组长度为0的情况;2.没有考虑flag == false 时应跳出外循环,eg:car cir...

2021-01-30 18:48:01 76

空空如也

空空如也

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

TA关注的人

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