- 博客(39)
- 收藏
- 关注
原创 HashMap实现原理, 扩容机制,面试题和总结
1.讲下对HashMap的认识2.HashMap的一些参数3.为什么HashMap的长度必须是2的n次幂?4.HashMap 为什么在获取 hash 值时要进行位运算5.HashMap在JDK1.7和JDK1.8中有哪些不同? HashMap的底层实现6.HashMap的put方法的具体流程?7.HashMap 的 get 方法的具体流程?8.HashMap的扩容操作是怎么实现的?JDK1.7扩容JDK1.8扩容9.HashMap 在扩容时为什么通过位运算 (e.hash & oldCa
2022-08-13 17:37:02
21146
8
原创 Java中double类型大小比较的五种方法
1.使用BigDecimal2.使用包装类Double3.在误差范围内运行相等4.转换成字符串5.使用doubleToLongBits()方法在Java中int类型数据的大小比较可以使用双等号,double类型则不能使用双等号来比较大小,如果使用的话得到的结果将永远是不相等,即使两者的精度是相同的也不可以。下面介绍几种比较double数据是否相等的方法,前三种可以比较正负数,后两种方法只能用于比较两数是否想等以及正数的大小。
2022-05-25 18:43:11
38305
3
原创 【Java】为什么线程是不安全的?(原子性,可见性,顺序性)
1️⃣观察线程不安全2️⃣线程安全的概念3️⃣当前线程不安全的原因1.站在开发者角度2.系统角度4️⃣线程安全需满足的条件1.原子性(atomic)2.内存可见性3.代码顺序性5️⃣解决之前的线程不安全问题
2022-05-09 15:41:24
826
1
原创 【Java】多线程入门,看这篇就够了
1️⃣观察多线程现象2️⃣多线程的优势-增加运行速度3️⃣创建线程方法一:继承 Thread 类方法二:实现 Runnable 接口其他变形4️⃣Thread 类及常见方法1.Thread 的常见构造方法2.Thread 的几个常见属性3.启动一个线程-start()4.中断一个线程5.等待一个线程-join()6.获取当前线程引用7.休眠当前线程8.yield关键字5️⃣线程的状态和状态转移......
2022-05-06 14:24:13
668
1
原创 确定不进来学点 操作系统、进程和线程
1️⃣操作系统1.基本特征(1)并发性(2)共享性(3)虚拟性(4)异步性2.系统调用(1)什么是系统调用(2)系统调用作用(3)系统调用的分类(4)系统调用的级别2️⃣进程1. 进程的基础知识2.进程控制块抽象3.进程调度4.进程的状态5.进程上下文切换6.虚拟内存7.进程资源的分配8.进程间通信3️⃣线程1.什么是线程2.为什么要有线程3.进程与线程的关系4.进程和线程的区别5.线程的优缺点6.进程和线程的选择7.Java 的线程 和 操作系统线程
2022-05-04 13:45:00
583
原创 MySQL表的设计(三大范式,表的关系,ER图)
什么是主键?外键?1.主键:主键是表的一个特殊字段,可以唯一地标识表中的每条信息。比如:身份证号。一个表中可以有一个或多个主键。 作用:唯一标识、快速查找 2.外键:如果表B的一个字段(外键)依赖于表A的主键。则成表A为父表,表B为子表。 原则:外键必须依赖于数据库中已经存在的父表的主键,外键可以为空 作用:建立该表与父表的关联关系使用外键了解背景创建三个表:分别为借阅者、书籍信息和借阅记录。
2022-05-02 13:43:08
5797
原创 MySQL表的增删改查(基础)
文章目录1️⃣增加(Create)1. 单行数据 + 全列插入2.多行数据 + 指定列插入2️⃣ 查询(Retrieve)1.全列查询2.指定列查询3.查询字段为表达式4.别名5.去重:DISTINCT6.排序:ORDER BY7.条件查询:WHERE8.分页查询:LIMIT3️⃣修改(Update)4️⃣删除(Delete)
2022-04-30 15:03:20
1610
1
原创 第二届排序算法性能大赛(决赛:希尔排序,堆排序,快速排序,归并排序)
1️⃣参赛选手总览2️⃣特性总结3️⃣性能比较4️⃣全部源码1️⃣参赛选手总览前四组参赛选手:👉第一组:插入排序,希尔排序👉第二组:选择排序,堆排序👉第三组:冒泡排序,快速排序(划重点)👉第四组:归并排序前面几篇博客重点讲解了以下的排序的内容,以及优化过程和性能分析。到这里,有四位参赛选手最后进入总决赛。他们分别是希尔排序 堆排序 快速排序 归并排序。后面分析总结他们的特性,比较他们的性能。
2022-04-18 14:10:07
298
原创 【Java】归并排序(动图详解,性能分析,外排序实现的思想)
前三组参赛选手:👉第一组:插入排序,希尔排序👉第二组:选择排序,堆排序👉第三组:冒泡排序,快速排序(划重点)文章目录1️⃣必备排序常识2️⃣归并排序1.排序原理和过程2.递归实现写法一:每次归并开辟空间写法二:直接开辟一样大的空间3.非递归实现4.特性总结5.用归并排序实现外排序6.性能比较
2022-04-16 13:31:36
943
原创 【Java】冒泡排序,快速排序(单路,双路,三路,挖坑,Hoare,快慢指针)
前两组参赛选手:👉第一组:插入排序,希尔排序👉第二组:选择排序,堆排序文章目录1️⃣必备排序常识2️⃣冒泡排序性能比较3️⃣快速排序1.单路快排性能分析,发现快排的缺陷优化方式一:选择合适的的基准值优化方式二:在小区间上使用插排优化方式三:使用二路快排2.二路快排3.三路快排4.挖坑法5.前后指针法(Hoare版本)6.快慢指针法7.非递归实现快排8.特性总结9.几种快排的总结
2022-04-14 08:17:43
328
1
原创 MySQL数据库基础(数据类型,表的结构,约束)
这里操作mysql使用的是命令行和workbench 5.7版本的图形化界面的客户端。文章目录1️⃣预备知识2️⃣数据库的基本操作1.显示当前数据库2.创建数据库3.使用数据库4.删除数据库3️⃣常用数据类型1.数值类型2.字符串类型3.日期类型1️⃣预备知识SQL中不区分大小写。库名、表名、列名建议不要使用中文,表中的数据可以使用中文。区分三种引用符:反引号( ` ),在库名、表名、列名上使用。一般不用反引号,但是名称和关键字重复了就必须带上。单引号( '),双引号( " ),在数据上使用
2022-04-13 09:26:51
469
原创 MySQL中varchar和char的区别以及和text的关系
关于varchar(n)n表示什么?varchar最大长度可以是多少?varchar(n)能存储多少字符,每个字符占用几个字节?varchar和char的区别区别一:定长和变长区别二:存储容量不同varchar和text的关系和区别除此之外,二者还有以下的区别
2022-04-11 15:45:41
1782
1
原创 【Java】选择排序,堆排序(动图详解和性能比较)
上一组参赛选手:👉插入排序,希尔排序文章目录1️⃣必备排序常识2️⃣选择排序1.单路选择排序2.双路选择排序3.性能比较3️⃣堆排序性能比较1️⃣必备排序常识稳定性:在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求能在内存和硬盘(外部存储器)之间移动数据的排序。时间复杂度:一个排序算法在执行过
2022-04-11 08:57:06
590
2
原创 MySQL的认识和基础概念
文章目录1️⃣什么是数据库2️⃣数据库的分类3️⃣数据库的基本结构4️⃣理解计算机和数据库的三个层面5️⃣关于SQL1️⃣什么是数据库数据库管理系统(DataBase Management System),简称数据库(DBMS)。但是,如果是存储数据的话,使用硬盘和文件存储数据不好吗?
2022-04-09 10:01:25
317
1
原创 【Java】插入排序、希尔排序详解
1️⃣必备排序常识2️⃣插入排序1.直接插入排序2.优化后的插入排序3.折半插入排序4.性能比较3️⃣希尔排序性能比较1️⃣必备排序常识稳定性:在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求能在内存和硬盘(外部存储器)之间移动数据的排序。时间复杂度:一个排序算法在执行过程中所耗费的时间
2022-04-08 08:55:53
941
原创 【java】认识异常,理解异常,掌握异常
文章目录1️⃣异常的背景1.认识异常2.避免异常的两种方式2️⃣异常的基本用法1.基本语法2.多个 catch 块3.使用共同父类 Exception 捕获异常4.关于异常的错误输出5.关于异常的调用链6.关于 finally 代码块7.使用 try 回收资源8.一组关键字:throw 和 throws9.异常处理流程总结3️⃣异常体系结构受查异常4️⃣自定义异常类
2022-03-31 08:00:10
769
14
原创 【java】泛型(与内部类的关系以及上下限通配符的使用)
泛型作为程序的守门员,能在编译期间就能检查发现问题,是一颗语法糖,能很大程度上帮助程序员写出正确高效的代码。文章目录1️⃣泛型的引入2️⃣泛型的基础使用1.语法2.使用3️⃣泛型方法,泛型接口1.泛型方法2.泛型接口4️⃣泛型和内部类5️⃣通配符1.使用通配符2.上限通配符3.下限通配符6️⃣类型擦除
2022-03-28 15:30:18
677
2
原创 【java】学习笔记3(三大特殊类:String,Object,包装类)
1️⃣String类2️⃣Object类3️⃣包装类1.基本类型和包装类2.装箱和拆箱3.自动拆装箱4.包装类和String5.编译期的自动拆装箱
2022-03-26 22:45:05
680
2
原创 【java】堆和优先级队列(PriorityQueue)
JDK中优先级队列就是基于堆的实现,所以率先学习堆。文章目录1️⃣堆(基于二叉树)1.概念和特点2.存储结构3.代码实现2️⃣优先级队列1.概念2.基本类型的使用3.自定义类型的使用
2022-03-10 20:06:15
829
1
原创 【Java】快速带你掌握String类
1️⃣创建字符串2️⃣字符串比较相等1.使用==比较字符串2.使用equals方法比较字符串3️⃣字符串常量池1.直接赋值2.采用构造方法4️⃣字符串的不可变性1.理解不可变性2.修改字符串5️⃣字符, 字节与字符串1.字符和字符串2.字节与字符串3.总结6️⃣字符串的常用方法1.字符串比较2.字符串查找3.字符串替换4.字符串拆分5.字符串截取6.其他方法7️⃣StringBuffer 和 StringBuilder
2022-02-15 16:56:13
401
6
原创 【java】类和对象(代码块,内部类)
1️⃣认识类和对象2️⃣类和类的实例化3️⃣类的成员1.字段/属性/成员变量2.普通方法和构造方法3.this关键字4.static关键字修饰字段和方法4️⃣封装1.private实现封装2.getter和setter方法5️⃣代码块1.什么是代码块2.普通代码块3.构造代码块4.静态代码块6️⃣内部类1.成员内部类2.静态内部类3.方法内部类4.匿名内部类7️⃣补充说明1.toString方法2.匿名对象
2022-02-09 22:34:32
1119
3
原创 【Java】入门学习笔记2(输入输出,方法和数组)
文章目录1️⃣输入和输出1.输出到控制台2.从键盘输入3.关闭输入的注意事项2️⃣方法的使用1.方法的基本用法2.方法调用的执行过程3.实参和形参的关系(重要)4.方法重载5.方法递归3️⃣数组的定义和使用1.数组的基本用法2.数组作为方法的参数3.数组作为方法的返回值4.数组的实用方法5.二维数组
2022-01-27 23:56:43
1439
2
原创 汉诺塔(苦口婆心版,是真的很详细了)
整体规律就是如果将盘子从一个柱子移动到另一个柱子,就先需要利用另一个柱子辅助,先将n - 1个盘子暂存到辅助柱上,暂存的过程时,目标柱暂时作为辅助。暂存完毕后,将最大的盘子移动到目标柱上后,再次调用函数递归,将n - 1个盘子移到目标柱上,此过程和暂存过程类似。
2022-01-27 15:39:10
5812
原创 【Java】面向对象编程(包,继承,组合,多态,抽象类,接口)
文章目录1️⃣包(package)导入包中的类静态导入包的访问权限控制常见的系统包2️⃣继承语法规则protected 关键字final 关键字3️⃣组合4️⃣多态向上转型动态绑定方法重写(Override)理解多态向下转型super 关键字5️⃣抽象类语法规则抽象类的作用6️⃣接口语法规则实现多个接口接口使用实例接口间的继承
2022-01-21 14:42:22
793
原创 【Java】入门学习笔记1
☀️写在前面最近刚开始学习Java,有些东西和c的差别还是挺大的,还有些新知识,借此写篇博客记录总结过渡一下。文章目录1️⃣初识Javamain方法Java程序的结构运行Java程序2️⃣变量与类型八大基本类型字符串类型3️⃣变量的命名规则4️⃣常量5️⃣理解类型转换5️⃣理解数值提升6️⃣int 和 String 之间的相互转换7️⃣运算符8️⃣注释9️⃣关键字
2021-11-21 16:55:02
1068
2
原创 结构体进阶(深入理解:内存对齐,位段,枚举,联合)
☀️写在前面本篇文章主要讲解结构体的内存对齐知识和其他几种自定义类型的使用和特点,内存对齐部分较难,建议可以仔细阅读,好好消化。如果需要学习结构体的基础知识,下面的传送门已为您打开????。????结构体初阶传送门????文章目录1️⃣结构体内存对齐为什么存在内存对齐内存对齐如何计算设计结构体的技巧修改默认对齐数2️⃣位段什么是位段?位段大小的计算位段的内存分配位段的跨平台问题位段的应用3️⃣枚举枚举的定义枚举的优点枚举的使用4️⃣联合(共用体)联合类型的定义联合的特点联合大小的计算1️⃣结构体内存
2021-10-31 08:42:33
1111
5
原创 指针进阶(深入理解:函数指针&回调函数)
本篇文章主要讲解函数指针和回调函数的理解和使用,属于较难的指针指针知识。如果想要学习指针简单和数组的相关知识,可以进入下面的传送门。????指针初阶知识传送门????☀️数组知识传送门☀️下来就是文章内容了,端上小板凳开始阅读吧 ????文章目录字符指针函数指针函数指针数组回调函数指针笔试题(夯实基础)
2021-10-28 14:35:06
2603
18
原创 第一届排序算法性能大赛(上万字激烈解说)
写在前面最近学到了一些重要的排序,并且取巧地测了一下各种排序算法在不同的算法实现、优化以及递归和非递归下的运行速度,想着写篇文章记录学习成果,同时分享给大家。本文一共提及了以下几种常用到的排序,其他排序使用场景较少,便没有提及。 并且本文的全部代码实现均为通俗易懂的c语言,希望能够得到大家的认可和支持,如果觉得本文不错的话,欢迎三连哦。好了,接下来就是文章本章了。文章目录一、必备排序常识一、必备排序常识稳定性:在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,
2021-10-21 14:50:51
17128
32
原创 整型、浮点型在内存中的存储
一、数据类型在c语言中有整型、浮点型、构造类型、指针类型等。而类型的意义在于:使用不同的类型决定了开辟空间的大小决定了如何使用内存空间二、整型在内存中的存储知道了一个变量的类型,就知道可以开辟的空间的大小。那例如int型具体是如何在内存中进行存储的呢?需要了解下面的概念:1.原码、反码、补码计算机中的有符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位三种表示方法各不相同。原码直接将二进制按
2021-09-27 20:20:34
1832
24
原创 结构体的基础和使用
文章目录结构体类型的声明结构体变量的定义和初始化结构体成员的访问结构体传参结构体类型的声明结构体的基础知识数组是一组相同类型元素的集合.结构体是一些值的集合,这里面包含数组,而这些值称为成员变量。结构的每个成员可以是不同类型的变量。成员可以是标量、数组、指针,甚至是其他结构体。结构体的声明结构体内部必须得要一个成员struct tag{ member_list;//成员列表}variable_list;//变量列表例如描述一个学生的结构体:struct Stu{ ch
2021-09-13 21:49:52
821
1
原创 c语言—指针详解
文章目录一、指针是什么二、指针和指针变量1.左值与右值2.两者的区别1.指针2.指针变量3.如何使用三、指针和指针类型一、指针是什么指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。指针就是地址,地址就是指针。使用指针的目的是提高使用效率二、指
2021-08-04 17:54:09
25195
1
原创 深入理解隐式类型转换
文章目录一、隐式类型转换1.转换的原因2.转换的意义3.如何进行转换4.整型提升的例子二、算术转换1.如何进行转换2.例题3.总结三、操作符的属性1.操作符2.问题表达式一、隐式类型转换1.转换的原因C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。2.转换的意义表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CP
2021-08-01 15:46:11
10504
1
原创 【c语言】操作符详解
分类:文章目录算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式特殊操作符算术操作符操作符功能+加-减*乘/除%取余(两个整数)除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。对于/操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。%操作符的两个操作数必须为整数。返回的是整除之后的余数。移位操作符操作符功能<<左移
2021-07-31 17:26:15
478
2
原创 c语言—数组详解(建议收藏)
文章目录一、一维数组1.一维数组的创建和初始化(1).数组的创建(2).数组的初始化2.一维数组的使用3.一维数组在内存中的存储二、二维数组1.二维数组的创建和初始化(1).二维数组的创建(2).二维数组的初始化2.二维数组的使用3.二维数组在内存中的存储三、数组作为函数参数1.一维数组2.二维数组四、数组指针和指针数组1.指针数组2.数组指针一、一维数组1.一维数组的创建和初始化(1).数组的创建数组是一组相同类型元素的集合。 数组的创建方式:type_t arr_name [const
2021-07-06 21:33:19
159485
55
原创 c语言—实现扫雷游戏
文章目录什么是扫雷游戏一、实现思路二、头文件三、主函数文件1.菜单函数2.主函数三、游戏文件1.地图初始化2.展示地图3.埋雷函数4.判断该位置附近雷的个数5.主游戏函数四.代码运行展示1.开始界面2.游戏开始3.游戏结束五、游戏原码什么是扫雷游戏基于百度百科的解释为:《扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。一、实现思路扫雷的地图大小不定,埋的雷个数也不一定。地图越大,雷的个数越多越
2021-07-01 21:18:41
623
15
原创 c语言—实现三子棋
什么是三子棋基于百度百科的解释为:是黑白棋的一种。三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。但是,有很多时候会出现和棋的情况。具体实现一、实现思路三子棋一共有九个可以落子的空间,所以用二维数组比较方便。后面每一步进行后都通过数组保存状态,最后判定数组里的棋子情况便可知晓玩家输赢。使用多文件能够比较好的实现解耦,调用起来比较方便,同时也很好维护。头文件:在头文件中对三子棋
2021-06-02 15:44:18
397
6
原创 c语言—函数以及递归
函数是什么数学中我们常见到函数的概念。但是你了解C语言中的函数吗? 百度百科中对函数的定义:C程序是由一组变量或是函数的外部对象组成的。函数是一个自我包含的完成一定相关功能的执行代码段。我们可以把函数看成一个“黑盒子”,你只要将数据送进去就能得到结果,而函数内部究竟是如何工作的,外部程序是不知道的。外部程序所知道的仅限于输入给函数什么以及函数输出什么。函数提供了编制程序的手段,使之容易读、写、理解、排除错误、修改和维护。打个比方来理解函数:在一个饭店里面,顾客点了一盘菜后,服务员把该菜的名字给
2021-05-26 21:29:31
1099
27
原创 c语言—分支语句和循环语句详解
文章目录什么是语句分支语句一、if语句1.语法结构2.悬空else二、switch语句1.语法结构2.default语句循环语句一、while循环1.语法结构2.break在while循环中的作用3.continue在while循环中的作用二、for循环1.语法结构2.while循环与for循环比较3.break和continue在for循环中三、do...while循环1.语法结构2.do语句的特点3.do while循环中的break和continue什么是语句c语言中由一个分号;所隔开的就是一条语
2021-05-25 21:45:50
663
6
原创 指针和指针变量的区别
首先引入一些概念内存内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小都是一个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。为什么存在地址?为了提高效率,快速标识与定位。左值与右值 空间 对应 左值 例:(对a来说) a = 20; //当把值赋给a时,是给a的空间写入20。 内容 对应 右值 例:(对a来说)
2021-05-13 00:08:35
10065
9
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人