自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 c语言中 if(x) 、if(0) 、if(1)该如何理解?

c语言中 if(x) 、if(0) 、if(1)该如何理解?if (表达式) { 语句... }在执行if语句时,首先会计算表达式的值,如果表达式的值为0,语句不会执行,若非0,则执行语句。由此可见if (0) 表示不执行,if (1)表示要执行。if (x)根据x的值是否为0来决定是否执行.总之,在C语言了里,像if,for,while这些语句本质上都是通过求出括号里表达式的是否为0来决定运行流程的,所以像if(scanf("%d",&a))这种代码也是可以理解的。...

2022-05-02 11:21:40 8757 4

转载 memset()函数和sizeof关键字

​数组初始化的时候常用for()循环,不过如果考虑效率的话,最好用memset(),下面简单介绍以下memset()。函数原型:void *memset(void *s, int ch, size_t n)函数解释:将s中前n个字节替换为ch并返回s;memset:它包含在<memory.h>或者<string.h>中。作用是在一段内存块中填充某个给定的值,它的操作对象为单个字节,是对较大的结构体或数组进行清零操作的一种最快方法。提到memset()就不得不提到sizeo

2022-05-02 10:32:17 456

原创 初识C语言

初识C语言一、C语言发展史C语言是一门功能强大,灵活多变的语言。它深受职业程序员和业余编程爱好者的喜爱。C语言是由肯•汤普逊(Ken Thompson)和丹尼斯•里奇(D.M.Ritchie)合力开发的。最初只是用来编写UNIX操作系统,但后来扩展到了诸如微型计算机,嵌入式处理器等领域。下面来简单回顾一下C语言的发展历程。1.ALGOL 60 语言C语言最早的原型是ALGOL 60语言,它也称A语言 ,全称Algorithmic Languagelo,ALGOL 60语言是世界最早的高级语言之一,他

2022-04-16 10:52:59 320

原创 Java包、访问权限修饰符的区别与作用

Java包、访问权限修饰符的区别与作用Java语言的访问权限修饰符Java语言的访问权限修饰符有四个,它们的区别如下表:修饰符publicprotecteddefault(默认)private同类√√√√同包√√√不同包子类√√不同包其他类√在这里我们来谈一下Java的package包package包的作用解决类名冲突问题控制不同包之间的访问权限划分项目权限,便于按照不同的功能管理包类的地址全类名 =

2022-03-10 10:45:05 129

原创 简单了解前后端分离架构(MVVM)

Vue的搭建第一个Vue程序导入开发版本的 Vue.js创建 Vue 实例对象,设置 el 属性和 data 属性使用简洁的模板语法把数据渲染到页面上Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统:<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title></title> <!-- 先导入Vue.

2022-03-02 21:12:26 3183

原创 五分钟带你了解面向对象的四大基本特征

面向对象的四大基本特征首先,我们来聊一聊什么是Java语言的特征?开源跨平台的JVM面向对象多线程自动垃圾回收(这个也属于是JVM部分的)支持网络安全的那么Java语言如何实现跨平台呢?Java语言的流行离不开它的跨平台性,而该特性是由JVM实现的。Java语言为不同的操作系统开发了不同的JDK(继承开发环境 打包工具,编译工具) JRE(运行时环境String util)JVM。那么谈谈你对面向对象的认识和理解原文章地址http://t.csdn.cn/T4VRa首先,我

2022-02-27 12:24:57 2437

原创 简单冒泡排序详解和优化版

数组排序冒泡排序选择排序插入排序希尔排序快速排序

2022-02-27 11:00:30 83

原创 Leecode——数组中的问题(上)

数组中的问题常见的数组问题有:排序:选择排序、插入排序、堆排序、快速排序、归并排序。二分查找法数据结构:栈、队列、堆(底层实现都是数组)…经典数组Leecode题(1)283.移动零...

2022-02-24 21:05:44 268

原创 MySQL高级(下)

MVCCMVCC(多版本并发控制 Multi-Version Concurrent Control),是 MySQL 提高性能的一种方式,配合 Undo log 和版本链,替代锁,让不同事务的 读-写、写-读操作可以并发执行,从而提升系统性能。一般在使用 读已提交 (READ COMMITTED)和 可重复读(REPEATABLE READ)隔离级别的事务 中实现。...

2022-02-23 18:08:11 362

原创 MySQL高级(上)

MySQL高级(上)视图什么是视图?视图是基于查询的虚拟表。通俗的理解,视图就是一条 SELECT 语句执行后 返回的结果集。SELECT 语句所查询的表称为视图的基表,而查询的结果集称为虚拟表,视 图本身并不存储具体的数据,视图的数据存在于视图的基表中,基本表数据发生了改变,视图的数据也会跟着改变、为什么使用视图?使用视图是为了方便复杂的查询语句。基本思路是将复杂的查询语句定义在 视图内部,然后对视图进行查询,从而简化复杂的查询语句。定义视图CREATE VIEW 视图名 AS SELEC

2022-02-22 11:25:33 487

原创 Java并发编程(下)

JUC 常用类Java 5.0 在 java.utilconcurrent 包中提供了多种并发容器类来改进同步容 器的性能.ConcurrentHashMapConcurrentHashMap 同步容器类是 Java 5 增加的一个线程安全的哈希 表。对与多线程的操作,介于 HashMap 与 Hashtable 之间。内部采用“锁分 段”机制(jdk8 弃用了分段锁,使用 cas+synchronized)替代 Hashtable 的独 占锁。进而提高性能。放弃分段锁的原因:加入多个分段锁浪费

2022-02-21 10:40:47 141

原创 Java并发编程(上)

Java并发编程Java并发编程Java并发编程首先来回顾线程的基本内容让我们来了解一下并发编程是什么?并行与并发多线程多线程优点多线程问题那么多线程会带来什么问题呢?Java内存模型(JMM)速度排序:CPU-->内存-->I/O设备JMMJVM主内存与工作内存并发编程核心问题--可见性,原子性,有序性可见性原子性有序性volatile 关键字如何保证原子性?锁JUC--原子变量原子类原子类原理(AtomicInteger 为例)CAS首先来回顾线程的基本内容程序: 静态代码 安装在硬

2022-02-20 23:01:12 243

原创 Java的设计模式

Java 设计模式(java design patterns)设计模式,是一被反复使用、多数知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题法人解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。设计模式:https://www.runoob.com/design-pattern/design-pattern-tutorial.ht

2022-02-17 17:50:01 2153

原创 Java注解和对象克隆

注解什么是注解?Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同, Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌 入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注。内置的注解@Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有 该方法时

2022-02-16 19:49:08 292

原创 面向对象设计原则和建模语言

建模语言**建模语言(Unified Modeling Language,UML)**是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标准.建模语言能为软件开发的所有阶段提供模型化和可视化支持。而且融入了软 件工程领域的新思想、新方法和新技术,使软件设计人员沟通更简明,进一步缩 短了设计时间,减少开发成本。1、类是指具有相同属性、方法和关系的对象的抽象,它封装了数据和行为,是面向对 象程序设计(OOP)的基础,具有封装性、继承性和多态性等三大

2022-02-15 12:10:33 625

原创 idea中查看类关系图

直接选中该类,右键如下单击,即可也可以查看它的上下层继承关系或实现子类

2022-02-13 20:19:04 1197

原创 带你深入了解spring框架

spring首先,带大家回顾一下spring。spring复习spring是一个轻量级的,非侵入式的,IOC,AOP,一站式的,简化企业级开发而生的。它的核心包非常小。业务代码中不侵入框架代码。IOC:控制反转。 将生成对象的权利反转给了spring框架 依赖注入DI为属性注入值AOP:面向切面编程,将一些与业务代码无关的公共部分抽取出来,使用时,通过代理对象调用,从而达不修改源代码的基础上增加功能,代码的耦合度降低。一站式框架:数据持久层,web控制层…那

2022-02-13 19:55:48 648

原创 五分钟带你了解垃圾回收器

垃圾回收器1.垃圾回收器概述如果说收集算法是内存回收的方法论,那么收集器就是内存回收的实践者.垃圾收集器没有在 java 虚拟机规范中进行过多的规定,可以由不同的厂商、 不同版本的 JVM 来实现。由于 JDK 的版本处于高速迭代过程中,因此 Java 发展至今已经衍生了众多 的 GC 版本。从不同角度分析垃圾收集器,可以将 GC 分为不同的类型。2.垃圾回收器分类按线程数分,可以分为串行垃圾回收器和并行垃圾回收器串行回收指的是在同一时间段内只允许有一个 CPU 用于执行垃圾回收操作,

2022-02-12 18:41:27 686

原创 垃圾回收相关概念

3.1 System.gc()的理解在默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显示触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(不能确保立即生效)。JVM实现者可以通过System.gc()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动运行的,无需手动触发,否则就太过于麻烦了。在一些特殊情况下,我们可以在运行之间调用S

2022-02-12 17:53:58 138

原创 智慧数Java版

智慧数《关于当代大学生被一道初中数学题难住所得灵感写的一道Java版智慧数》题目是这样的:一个正整数如果能表示成了两个正整数的平方差,则称这个数为“智慧数”,比如16就等于5的平方减去3的平方,所以16就是一个智慧数,从1开始的自然数列中,将“智慧数”从小到大编号为1,2,3,„„,n。现输入一个正整数n,求第2006个“智慧数”。输入3输出7输入4输出8这道题我是根据纯数学理论所做,如果有大佬有更好的方法,请在评论里指点我一下。 //函数体 public int num

2022-02-11 18:25:58 364

原创 垃圾回收相关算法之垃圾回收阶段算法

2、垃圾回收阶段算法当成功区分出内存中存活对象和死亡对象后,GC接下来的任务就是执行垃圾回收,释放掉无用对象所占用的内存空间,以便有足够的可用内存空间为新对象分配内存。目前在JVM中比较常见的三种收集算法是:(1)标记-清除算法(Mark-Sweep)(2)复制算法(Copying)(3)标记-压缩算法(Mark-Compact)2.1标记-清除算法执行过程当堆中的有效内存空间(available memory)被耗尽时 ,就会停止整个程序(也被称为 stop the world),然后进行两

2022-02-11 16:52:06 146

原创 数据结构——数组

数据结构首先,我们来了解一下什么是数据结构?为什么要学习数据结构?一、什么是数据结构?1、是一门基础学科2、它研究的是数据如何在计算机中进行组织和存储,使得我们可以高效的获取数据和修改数据3、数据结构可以分为三类:线性结构:数组、队列、栈、链表、哈希表…树形结构:二叉树、二分搜索树、AVL树、红黑树、堆、Trie树、线段树、并查集…图结构:邻接矩阵、邻接表4、为什么要学习数据结构?根据不同的应用,灵活选择最合适的数据结构数据结构+算法=程序5、使用环境IDEA、JDK8+二、

2022-02-11 13:16:53 592

原创 垃圾回收相关算法之垃圾标记阶段算法

垃圾回收相关算法1.垃圾标记阶段算法1.1标记阶段的目的垃圾标记阶段:主要是为了判断对象是否存活(1)在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为已经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。(2)那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。(3)判断对象存活一般有两种方式

2022-02-11 11:56:06 421

原创 如何理解垃圾回收呢?

1、垃圾回收概述概述(1)Java和C++语言的区别,就在于垃圾收集奇数和内存动态分配上,C++语言没有垃圾收集技术,需要程序员手动的收集。(2)垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。(3)关于垃圾收集有三个经典问题:1、哪些内存需要回收?2、什么时候回收?3、如何回收?(4)垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,J

2022-02-10 20:56:21 297

原创 本地方法接口、执行引擎

本地方法接口、执行引擎一、本地方法接口1、 什么是本地方法简单来讲,一个 Native Method 就是一个 java 调用非 java 代码的接口,一个 Native Method 是这样一个java 方法:该方法的底层实现由非 Java 语言实现, 比如 C。这个特征并非 java 特有,很多其他的编程语言都有这一机制在定义一个 native method 时,并不提供实现体(有些像定义一个 Java interface),因为其实现体是由非 java 语言在外面实现的。关键字 native

2022-02-10 13:22:10 248

原创 JVM运行时数据区之Java方法区

JVM运行时数据区之Java方法区1、方法区的基本理解方法区,是一个被线程共享的内存区域。其中主要存储加载的类字节码、 class/method/field 等元数据、static final 常量、static 变量、即时编译器编译 后的代码等数据。另外,方法区包含了一个特殊的区域“运行时常量池”。 Java 虚拟机规范中明确说明:”尽管所有的方法区在逻辑上是属于堆的一部分,但 对于 HotSpotJVM 而言,方法区还有一个别名叫做 Non-Heap(非堆),目的就是 要和堆分开.所以,方法区看做

2022-02-09 20:30:46 928

原创 JVM的运行时数据区之Java堆

JVM的运行时数据区之Java堆and本地方法栈一、本地方法栈 (Native Method Stack)1、java虚拟机栈管理java方法的调用,而本地方法栈用于管理本地方法的调用。2、本地方法栈也是线程私有的。3、允许被实现成固定或者是可动态扩展的内存大小。内存溢出方面也是相同的。如果线程请求分配的栈容量超过本地方法允许的最大容量则会抛出StackOverflowError异常,这个在概述里面提到过。4、本地方法是用C语言写的。5、它的具体做法是在Native Method Stack栈中

2022-02-08 17:24:15 416

原创 新年第一更(Java虚拟机栈),祝大家新年快乐

JVM运行时数据区之Java虚拟机栈新年第一更,祝大家新年快乐,万事如意,心想事成!1、虚拟机栈出现的背景前面已经讲过,由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台的CPU架构不同,所以不能设计为基于寄存器的。基于栈的指令设计优点是跨平台的,指令集小,编译器容易实现,缺点是性能下降,实现同样功能需要更高的指令集,。简而言之,java为了移植性好(跨平台)所以将运行程序的设计架构为栈结构运行,而不是依赖于CPU的寄存器架构。2、分清堆和栈栈是运行时的单位(加载方法运行),而堆是

2022-02-01 10:30:02 200

原创 JVM运行时数据区之程序计数器

1、概述JVM中的程序计数寄存器(Program Counter Register)中的Register命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。2、作用程序计数器用来存储下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条指令。1)它

2022-01-30 11:20:28 557

原创 JVM的运行时数据区之运行时数据区概述

JVM的运行时数据区之运行时数据区概述堆、方法区(元空间) 主要用来存放数据是线程共享的。程序计数器、本地方法栈、虚拟机栈是运行程序的,是线程私有的。JVM的运行时数据区,不同虚拟机实现可能略微有所不同,但都会遵从java虚拟机规范,java 8 虚拟机规范规定,java虚拟机所管理的内存将会包括一下几个运行时数据区域:1、程序计数器 (Program Counter Register)程序计数器(Program Counter Register)是一块较小的内存空间,它可以看 作是当前线程所执

2022-01-30 10:55:41 1066 2

原创 JVM结构—类加载

JVM结构——类加载类加载子系统作用:类加载器子系统负责从文件系统或者网络中加载 class 文件。只负责加载类,至于它是否可以运行,则由执行引擎(Execution Engine)执行,存放在方法区(元空间)。它扮演的是一个快递员的角色。类加载的角色1、class file存在于硬盘上,可以理解为设计师画在纸上的模板,而最终这个模板在执行的时候是要加载到JVM中来,根据这个模板实例化出n个一模一样的实例。2、class file加载到JVM中,被称为DNA的元数据模型,放在方法区中。3

2022-01-28 21:32:00 270

原创 JVM概述

JVM概述1.1 为什么学习JVM?面试的需要​ 学过Java的程序员对JVM应该并不陌生。程序员为什么要学习JVM呢,其实不懂JVM也可以照样写出优质的代码,但是不懂JVM有可能被面试官虐的体无完肤。中高级程序员必备技能​ 项目管理,性能调优。1.2 虚拟机 所谓虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。 大名鼎鼎的 VMware 就属于系统虚拟机,它是完全对物理计算机的仿真

2022-01-27 17:08:52 111

原创 泛型(学习补充)

泛型 (学习补充)在集合中,泛型可以把它当做参数传进去,当然,也可以不定义类型,此时它的存储默认的就是object类型的,然而在你取出它的时候需要注意:它需要进行一个向下转型操作。首先,我们提出一个问题:为什么要使用泛型?早期的object类型可以接收任意的对象类型,但是在实际的使用中,会存在类型转换的问题。也就存在着隐患,所以java语言提供了泛型来解决这个安全问题。什么是泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。参数化类型,就是将类型由

2022-01-26 14:56:48 388

原创 Java8 Stream

Java8 Stream什么是Stream?Stream是java8的新特性,它允许你以声明式处理数据集合,可以把它作是遍历数据集的高级迭代器。此外与stream与lambda表达式结合后编码效率大大提高。要澄清的是 java8 中的 stream 与 InputStream 和 OutputStream 是完全不同的概念.案例: class Apple { private int num; private String name; private String colo

2022-01-24 17:13:03 95

原创 Java 8 Lambda 表达式

Java 8 Lambda 表达式1、出现的背景java是一流的面向对象语言,除了部分简单数据类型,java中的一切都是对象,即使数组也是一种对象,每个类创建的实例也是对象。在java中定义的函数或方法不可能完全独立,也不能将方法作为参数或返回一个方法给实例。在Java8以前,如果我们想把某些功能传递给某个方法,总要去写匿名内部类,代码示例:/*lambda 语法 : (参数) ->{函数体} 是匿名函数.一般在方法的参数为接口时来代替之前所写的匿名内部类 (a,b)

2022-01-23 19:20:33 121

空空如也

空空如也

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

TA关注的人

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