自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java常见的八大排序算法介绍

总结一下常用的排序八大算法:时间复杂度、空间复杂度及稳定性介绍:1、冒泡排序2、选择排序3、插入排序4、快速排序5、归并排序6、希尔排序7、堆排序8、基础排序

2021-11-04 17:51:56 438 1

原创 Java中的包及各自的作用

在Java中有很多自带的原生包,下面来说一下Java中常用的包及其作用1、java.lang:java的语言包,是核心包,默认导入到用户程序,包中有object类,数据类型包装类,数学类,字符串类,系统和运行时类,操作类,线程类,错误和异常处理类,过程类。如Object、String、Integer、String、StringBuffer、StringBuilder、Thread类等2、java.io:包含提供多种输出输入功能的类。如Serializable、InputStreamReader

2021-11-03 20:19:21 1727

原创 JUC 包中的Atomic类(原⼦类)

基本类型使⽤原⼦的⽅式更新基本类型AtomicInteger :整形原⼦类AtomicLong :⻓整型原⼦类AtomicBoolean :布尔型原⼦类这几个类的用法基本一致,这里以AtomicInteger为例总结常用的方法addAndGet(int delta) :以原子方式将输入的数值与实例中原本的值相加,并返回最后的结果;incrementAndGet() :以原子的方式将实例中的原值进行加1操作,并返回最终相加后的结果;getAndSet(int newValue):将实例中的值更

2021-09-14 15:13:52 224

原创 用户态与内核态

为什么要分用户态和内核态CPU将指令分为特权指令和非特权指令对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令特权指令——在系统态时运行的指令对内存空间的访问范围基本不受限制,不仅能访问用户存储空间,也能访问系统存储空间,特权指令只允许操作系统使用,不允许应用程序使用,否则会引起系统混乱。非特权指令——在用户态时运行的指令一般应用程序所使用的都是非特权指令,它只能完成一般性的操作和任务,不能对系统中的硬件和软件直接进行访问,其对内存的访问范

2021-09-08 23:57:59 476

原创 操作系统常见的五种IO模型

操作系统常见的五种IO模型如下:阻塞式IO模型非阻塞式IO模型IO多路复用模型信号驱动IO模型异步IO模型下面是详细介绍。阻塞IO所谓阻塞IO就是当应用B发起读取数据申请时,在内核数据没有准备好之前,应用B会一直处于等待数据状态,直到内核把数据准备好了交给应用B才结束。术语描述:在应用调用recvfrom读取数据时,其系统调用直到数据包到达且被复制到应用缓冲区中或者发送错误时才返回,在此期间一直会等待,进程从调用到返回这段时间内都是被阻塞的称为阻塞IO;非阻塞IO所谓非阻塞IO就是

2021-09-08 23:56:17 906

原创 select、poll 和 epoll 之间的区别

(1)select:时间复杂度 O(n)select 仅仅知道有 I/O 事件发生,但并不知道是哪几个流,所以只能无差别轮询所有流,找出能读出数据或者写入数据的流,并对其进行操作。所以 select 具有 O(n) 的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll:时间复杂度 O(n)poll 本质上和 select 没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个 fd 对应的设备状态, 但是它没有最大连接数的限制,原因是它是基于链表来存储的。(3)epoll:时

2021-09-08 23:51:52 372

原创 虚拟内存及其实现方式

这篇文章来探讨什么是虚拟内存,以及虚拟内存的实现方式有哪些。为什么要使用虚拟内存?对于传统的内存存储管理方式的特征有如下两个:1)一次性作业必须一次性全部装入内存后,方能开始运行。这会导致两种情况发生:当作业很大,不能全部被装入内存时,将使该作业无法运行;当大量作业要求运行时,由于内存不足以容纳所有作业,只能使少数作业先运行,导致多道程序度的下降。2)驻留性作业被装入内存后,就一直驻留在内存中,其任何部分都不会被换出,直至作业运行结束。运行中的进程,会因等待I/O而被阻塞,可能处于长期等

2021-09-08 23:50:16 2842

转载 页面替换算法有哪些?

地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。1.最佳置换算法(OPT)(理想置换算法)从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。最佳置换算法可以用来评价其他算法

2021-09-07 10:17:26 1721

原创 什么是交换空间?

操作系统把物理内存(physical RAM)分成一块一块的小内存,每一块内存被称为页(page)。当内存资源不足时,Linux把某些页的内容转移至硬盘上的一块空间上,以释放内存空间。硬盘上的那块空间叫做交换空间(swap space),而这一过程被称为交换(swapping)。物理内存和交换空间的总容量就是虚拟内存的可用容量。用途:物理内存不足时一些不常用的页可以被交换出去,腾给系统。程序启动时很多内存页被用来初始化,之后便不再需要,可以交换出去。...

2021-09-07 10:03:21 2775

原创 分页与分段的区别

分页把内存空间划分为大小相等且固定的块,作为主存的基本单位。因为程序数据存储在不同的页面中,而页面又离散的分布在内存中,因此需要一个页表来记录映射关系,以实现从页号到物理块号的映射。访问分页系统中内存数据需要两次的内存访问 (一次是从内存中访问页表,从中找到指定的物理块号,加上页内偏移得到实际物理地址;第二次就是根据第一次得到的物理地址访问内存取出数据)。分段分页是为了提高内存利用率,而分段是为了满足程序员在编写代码的时候的一些逻辑需求(比如数据共享,数据保护,动态链接等)。分段内存管理当中,地

2021-09-07 10:02:37 3076

原创 进程有哪些状态?

进程一共有5种状态,分别是创建、就绪、运行(执行)、终止、阻塞。运行状态就是进程正在CPU上运行。在单处理机环境下,每一时刻最多只有一个进程处于运行状态。就绪状态就是说进程已处于准备运行的状态,即进程获得了除CPU之外的一切所需资源,一旦得到CPU即可运行。阻塞状态就是进程正在等待某一事件而暂停运行,比如等待某资源为可用或等待I/O完成。即使CPU空闲,该进程也不能运行。运行态→阻塞态:往往是由于等待外设,等待主存等资源分配或等待人工干预而引起的。阻塞态→就绪态:则是等待的条件已满足,只需分

2021-09-07 09:41:47 6484

原创 进程调度策略有哪几种?

进程调度策略主要包括:先来先服务短作业优先最短剩余时间优先时间片轮转优先级调度先来先服务非抢占式的调度算法,按照请求的顺序进行调度。有利于长作业,但不利于短作业,因为短作业必须一直等待前面的长作业执行完毕才能执行,而长作业又需要执行很长时间,造成了短作业等待时间过长。另外,对I/O密集型进程也不利,因为这种进程每次进行I/O操作之后又得重新排队。短作业优先抢占式的调度算法,按估计运行时间最短的顺序进行调度。长作业有可能会饿死,处于一直等待短作业执行完毕的状态。因为如果一直有短作业到来,

2021-09-07 09:34:08 1085

原创 什么是死锁?死锁产生的条件?如何处理死锁问题?

什么是死锁在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗的讲就是两个或多个进程无限期的阻塞、相互等待的一种状态。死锁产生的四个必要条件(有一个条件不成立,则不会产生死锁)互斥条件:一个资源一次只能被一个进程使用请求与保持条件:一个进程因请求资源而阻塞时,对已获得资源保持不放不剥夺条件:进程获得的资源,在未完全使用完之前,不能强行剥夺循环等待条件:若干进程之间形成一种头尾相接的环形

2021-09-07 08:55:15 941

原创 什么是临界区,如何解决冲突?

什么是临界区,如何解决冲突?每个进程中访问临界资源的那段程序称为临界区,一次仅允许一个进程使用的资源称为临界资源。解决冲突的办法:如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入,如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待;进入临界区的进程要在有限时间内退出。如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。...

2021-09-07 08:50:55 1137

原创 线程的分类?内核级线程与用户级线程

从线程的运行空间来说,分为用户级线程(user-level thread, ULT)和内核级线程(kernel-level, KLT)内核级线程:这类线程依赖于内核,又称为内核支持的线程或轻量级进程。无论是在用户程序中的线程还是系统进程中的线程,它们的创建、撤销和切换都由内核实现。比如英特尔i5-8250U是4核8线程,这里的线程就是内核级线程用户级线程:它仅存在于用户级中,这种线程是不依赖于操作系统核心的。应用进程利用线程库来完成其创建和管理,速度比较快,操作系统内核无法感知用户级线程的存在。..

2021-09-07 08:49:34 462

原创 进程/线程同步的方式有哪些?

进程/线程同步的方式主要有临界区、互斥量、信号量、事件四种方式临界区通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。互斥量为协调共同对一个共享资源的单独访问而设计的。互斥量跟临界区很相似,比临界区复杂,互斥对象只有一个,只有拥有互斥对象的线程才具有访问资源的权限。优点:

2021-09-07 08:46:40 323

原创 进程之间的通信方式有哪些?

进程之间的通信方式进程之间的通信方式主要有如下几种:管道、命名管道、信号、信号量、消息队列、共享内存、套接字socket管道管道这种通讯方式有两种限制,一是半双工的通信,数据只能单向流动,二是只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。管道可以分为两类:匿名管道和命名管道。匿名管道是单向的,只能在有亲缘关系的进程间通信;命名管道以磁盘文件的方式存在,可以实现本机任意两个进程通信。信号信号是一种比较复杂的通信方式,信号可以在任何时候发给某一进程,而无需知道该进程的状态。

2021-09-07 00:03:13 1621

原创 查找字符串的最长公共前缀

查找字符串的最长公共前缀此算法题来自竞技世界笔试真题【题目描述】编写一个函数来查找字符串数组中的最常公共前缀,如果不存在公共前缀,则返回空字符串 “”。【同源链接】【思路】首先判断传入的字符串是否为空串然后取字符串数组中的某一个数组作为参照,这里直接取第一个字符串遍历整个String数组,将数组中其他字符串与第一个字符串的长度作比较,找到其中长度比较小的,然后遍历字符串,找最大的公共长度将最大的公共长度赋值给参照长度,继续遍历最后得到最大的公共长度,返回子串即可【代码】imp

2021-09-06 23:44:13 994

原创 将给定非负整数数组中的数字排列成最大数字

将给定非负整数数组中的数字排列成最大数字题目来自竞技世界笔试题题目简介编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。思路:类似冒泡排序的思想,将数组中的数化为字符串然后两两组合再将组合得到的数转化为整数将这两个整数比较,因为要得到最大的数,所以需要把较大的数左移最后循环结束得到的数组就是我们要的排列顺序将数组中的数进行字符串拼接即可此处以如下数组为例:Integer[] num=new Integer[]{

2021-09-06 23:31:36 1217

原创 什么是面向对象和面向过程?

众所周知,Java 是面向对象的语言,那这个面向对象是怎么来的呢?与之相对的面向过程又是什么呢?下面我说大家分享一下自己的看法:面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把问题中的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。通俗点说就是:如果要你去设计一个棋局的话,面向对象可能是这样的:黑棋和红棋对象:负责棋子的走向,两者行为相同棋盘系统:通过黑棋和红棋对

2021-07-20 11:12:08 4565

原创 JVM的架构模型&基于栈式的指令集架构与基于寄存器式的指令集架构的区别

Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。举个最简单的例子,分别使用这两种指令集计算“1+1”的结果//基于栈的指令iconst_1iconst_1iaddistore_0//基于寄存器指令mov eax,1add eax,1基于栈的指令集主要的优点就是可移植, 缺点是执行速度慢,相同操作指令数要多很多。寄存器由硬件直接提供,程序直接依赖这些硬件寄存器则不可避免地要受到硬件的约束。虽然栈架构指令集的代码非常紧凑,但是完

2021-05-12 18:45:32 351

原创 什么是虚拟机?什么是Java虚拟机?

什么是虚拟机?什么是Java虚拟机?虚拟机介绍虚拟机,就是虚拟的计算机,可以执行一系列虚拟计算机指令,大体上可以分为 系统虚拟机 和 程序虚拟机。它们运行时,都会受到虚拟机提供的资源的限制。系统虚拟机:仿真模拟系统的,比如Visual Box,VMware。程序虚拟机:为执行单个计算机程序设计的,比如Java虚拟机。JAVA虚拟机Java虚拟机是一台执行字节码的虚拟机计算机,但是字节码不一定是由Java语言编译而成。只要使用这一套虚拟机规则的语言,就可以享受到跨平台,垃圾收集以及可靠的即时编译器

2021-05-12 13:57:19 189

原创 Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error:

背景创建好项目使用swagger做前端测试的时候,发现出现了如下异常:.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error:在网上查找了一些资料,发现是数据类型转换的问题。尝试着把一些不必要测试的字段删掉,发现只是报的异常信息改变了,异常种类不变,后来仔细检查,发现是前端发送的请求

2021-04-17 14:41:09 13165 1

原创 第一次使用Markdown

正常文本一级标题二级标题…六级标题斜体粗体粗斜体插入网址http:www.baidu.com插入图片脚注1引用段落二级段落代码块代码区块按tab键也可以显示代码区块代码区块分割线,使用三个*、-或者_删除线,文字前后加上两个波浪线我不想考试无语列表,文字前面加上*、-或者+无序列表有序列表,文字前面加上数字+.+空格有序列表多级列表,加号前面加上两个空格,每一级增加两个空格一级二级三级列表表头1

2021-04-05 23:28:29 56

原创 Java中的Math.round()方法使用

今天看到一个Java基础题,如下:Math.round(11.5)的结果是( ),Math.round(-11.5)的结果是多少?A:11,-11B:12,-11C:11,-12D:12,-12借此引入Math.round()方法的使用:方法:public static int round(float a)返回最接近参数的 int。结果将舍入为整数:加上 1/2,对结果调用 floor 并将所得结果强制转换为 int 类型。换句话说,结果等于以下表达式的值:(int)Math.floor

2021-04-05 15:05:29 570

原创 JDK1.8新特性

JDK1.8新特性(stream、lambda表达式、接口default方法)答:Java8(又称JKD1.8)是Java语言开发的一个主要版本。Oracle 公司于2014年3月18日发布 Java 8 。企业开发一般选择的是最稳定的版本而不是最新的,所以JDK1.8目前在企业中应用的非常多,面试中问到这类问题也就不奇怪了!新增特性:(1)支持Lambda表达式(2)函数式接口(3)新的Stream API(4)新的日期(5)API其他特性

2021-03-16 21:56:05 281 1

原创 设计模式之单例模式

设计模式类型设计模式分为三种类型,共23种:1:创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式。2:结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。3:行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)。设计模式–创建型模式–单例模式...

2021-03-12 10:56:58 56

原创 设计模式--UML类图中类与类的关系

UML类图基本介绍UML(Unified Modeling Language),即统一建模语言。是一种用于软件系统设计和分析的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果。UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等。画UML图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理,UML图分类:1)用例图(use case)2)静态结构图:类图、对象图、包图、

2021-03-11 21:48:40 115

原创 Java春招面试题第一篇

京东Java开发一面作者:offer快来到碗里链接:https://www.nowcoder.com/discuss/611079?type=0&order=1&pos=8&page=1&channel=-1&source_id=discuss_center_0_nctrack来源:牛客网介绍一下怎么防止发生超卖解释:背景:如果是MySQL数据库,可以使用它自带的锁机制很好的解决问题,但是,在大规模并发的场景中,是不推荐使用MySQL的。秒杀和抢购的场

2021-03-11 12:09:30 114

原创 设计模式七大原则小记(单一原则、接口隔离原则、依赖倒转原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则)

设计模式设计模式是为了让程序(软件)具有更好的:代码重用性,即相同功能的代码,不用多次编写;可读性,即编程规范性,便于其他程序员的阅读和理解可扩展性,即当需要增添其他新功能的时候,非常的方便;可靠性,即添加了新的功能之后对原来的功能没有影响;使程序呈现高内聚、低耦合的特性。设计模式七大原则设计模式原则,其实就是程序员在编程时,应该遵守的原则,也是各种设计模式的基础。设计模式常用的七大原则有:单一职责原则;接口隔离原则;依赖倒转原则;里氏替换原则;开闭原则;迪米特法则;合

2021-03-09 19:43:55 215

空空如也

空空如也

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

TA关注的人

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