- 博客(35)
- 收藏
- 关注
原创 并发与并行,线程与进程如何理解
????一、前言二、进程1、程序与进程2、进程的调度与时间片三、线程1、有了进程为什么还要线程2、什么时候使用多线程四、并发与并行一、前言1、冯诺依曼体系结构我们所认识的计算机,都是有一个个的硬件组件组成输入单元:包括键盘,鼠标,扫描仪,写板等;中央处理器(CPU):含有运算器和控制器等;输出单元:显示器,打印机等关于冯诺依曼,必须强调几点:这里的存储器指的是内存,不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备),外设(输入或输出设备)要输入或者输出数据,也只能
2020-08-24 16:12:36 1260
原创 浅谈MySQL数据库的索引与事务
????一、索引1、什么是索引2、为什么用索引①、无索引②、有索引③、优点和缺点④、使用场景⑤、为何不采用Hash方式?⑥、索引的分类3、如何使用二、事务1、什么是事务2、为什么用事务3、并发事务处理带来的问题4、事务隔离级别一、索引1、什么是索引MYSQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构,所以说索引的本质是:数据结构索引的目的在于提高查询效率,可以类比字典、 火车站的车次表、图书的目录等 。可以简单的理解为“排好序的快速查找数据结构”,数据本身之外,
2020-08-21 23:00:57 598
原创 MySQL数据库查询的最全面总结
????一、DDL1、create2、drop二、DML1、INSERT2、SELECT3、UPDATE4、DELETE5、聚合查询1、COUNT2、GROUP BY6、联合查询1、内连接2、外连接3、自连接4、子查询5、合并查询三、常见问题1、三大范式2、char 和 vchar的区别3、null关键字4、数据类型4、数据库的约束一、DDLDDL数据定义语言,用来维护存储数据的结构- create database | table xxx 创建- drop database | ta
2020-08-21 16:38:28 2198 2
原创 泛型教程
????1、泛型语法2、泛型的意义 :3、泛型的坑:4、泛型是如何编译的5、泛型类的边界6、通配符7、泛型总结在看泛型之前,我们来思考一个问题,此时我手里有一个存储int类型的ArrayList,我想把它改造为一个通用的容器,可以实现double、float、String等各种类型的存储,这时你会怎么做。首先要做到满足各种类型,我又想到了Object类型是所以类型的默认父类,所以可以考虑将ArrayList的底层数组设计为Object类型,这样就实现了通用public class MyArrayList
2020-08-19 14:36:10 323
原创 匿名内部类、实例内部类、静态内部类的使用
????一、实例内部类二、匿名内部类三、静态内部类一、实例内部类实例内部类看作是一个普通的实例数据成员如果内部类与外部类没有同名方法或属性,内部类可以直接调用外部类的方法和字段如果内部类有同名方法或属性,必须使用"外部类名.this.方法名/属性"格式调用内部类实例化不同于普通类,普通类可以在任意需要的时候实例化,而内部类必须在外层类实例化以后方可实例化,并与外部类建立关系。因此在外部类中的非static方法中,是可以实例化内部类对象访问内部类的属性和方法,一般通过外部类名.内部类名 对
2020-08-19 11:02:54 615
原创 二叉树中为什么n(0) = n(2) +1
????一、什么是二叉树二、n(0) = n(2) +1三、前中后遍历一、什么是二叉树1、二叉树基本形态一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。二叉树的特点:每个结点最多有两棵子树,即二叉树不存在度大于 2 的结点。二叉树的子树有左右之分,其子树的次序不能颠倒,因此二叉树是有序树。2、两种特殊的二叉树满二叉树: 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,
2020-08-17 18:57:30 1915
原创 Java的异常:Error与Exception-------异常体系详细梳理总结
????一、 什么是异常二、为什么用使用异常三、异常体系1、Throwable2、Error3、非受查异常4、受查异常5、自定义异常四、使用方式1、try catch 异常捕获2、finally的坑一、 什么是异常所谓异常指的就是程序在运行时出现错误时通知调用者的一种机制。有些错误是这样的, 例如将 System.out.println 拼写错了, 写成了system.out.println就会报错,这属于语法上的错误。而运行时指的是程序已经编译通过得到 class 文件了, 再由 JVM 执行过程中
2020-08-15 16:02:58 782
原创 Java中String类型不可变、String在内存的位置、StringBuffer和StringBuild,equals、==、comparTo区别等常见陷阱详解
????一、String类型不可变1、什么是不可变2、为什么不可变3、不可变的好处①字符串常量池的需要②更加安全的③String存缓HashCode二、String对象在内存中位置三、String、StringBuffer、StringBuild区别四、equals、==、comparTo的区别一、String类型不可变1、什么是不可变 String str = "hello" ; str = str + " world" ; str += "!!!" ;
2020-08-14 21:46:32 830
原创 java中永远都是值传递,没有引用传递对吗?
????1、基本数据类型参数传递2、引用数据类型参数传递3、"传引用"一定能成功修改值吗?错误理解①:值传递和引用传递,区分的条件是传递的内容,如果是个值,就是值传递。如果是个引用,就是引用传递。错误理解②:Java是引用传递。错误理解③:传递的参数如果是普通类型,那就是值传递,如果是对象,那就是引用传递。基本数据类型: byte char short int long float double boolean引用数据类型: 接口类型(List) 、类类型(ArrayList) 、数组(int
2020-08-14 12:26:22 397
原创 Java中this和super、final和static、abstract和interface关键字的用法详细总结
????一、this二、super三、final四、static五、抽象类和接口的异同点一、thisthis是代表当前对象的引用我们会发现在构造函数的内部,我们可以使用this关键字,构造函数是用来构造对象的,对象还没有构造好,我们就使用了this,那this还代表当前对象吗?当然不是,this代表的是当前对象的引用。一个对象的产生分为几步? ①为对象分配内存 ②调用合适的构造方法。(构造方法不止一个)那么既然对象产生分两步,必须把两步骤完成,第二步走完之后才会产生对象,而产生对象的过程中就用th
2020-08-12 20:32:29 753
原创 面向对象的三大基本特征是什么?------通过代码讲解
????一、封装二、继承三、多态一、封装封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别,通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。对象是封装类的实例,比如张三是人,人是一个封装类,张三只是对象中的一个实例、一个对
2020-08-12 14:32:53 634
原创 ArrayList和LinkedList最全面的异同点比较
????1、存储方式2、接口实现3、时间复杂度4、扩容方式5、线程安全吗6、使用场景1、存储方式首先,两个属于线性表。而ArrayList在底层是一个顺序表,采用数组的方式进行数据的存储,物理地址是连续的。LinkedList在底层是一个双向链表,物理存储结构是非连续的,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。2、接口实现ArrayList继承了AbstractList抽象类,实现了List、Connection、Iterable等接口;同时LinkedList也做到了,并且实现了De
2020-08-10 20:06:26 1132
原创 Integer和int的区别你真的知道吗?
.一、什么是包装类型二、如何操作三、Integer和int易错点------必看一、什么是包装类型Java 是一个近乎纯洁的面向对象编程语言,但8种基本数据类型不是对象。为了解决这个问题, 能够将这些基本数据类型当成对象操作,Java 为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从JDK 1.5 开始引入了自动装箱/拆箱机制,使得二者可以相互转换。原始数据类型和java泛型并不能配合使用。因为java的泛型某种程度上可以算作伪泛型,它完
2020-08-09 22:37:13 389
转载 CSDN写博客设置(字体颜色、大小)
原文链接点我:https://blog.csdn.net/malele4th/article/details/79223381 内嵌HTMLmarkdown里面
2020-08-09 01:27:05 794 1
原创 深拷贝与浅拷贝之Java数组的四种拷贝方式
四种方式1、for循环手动拷贝2、Arrays.copyOf( )3、System.arraycopy()4、源数组名.clone() 数组的深拷贝: 当数组的内容是简单类型,例如int之类的,拷贝过去的只是简单类型的值,在拷贝完成后修改Array2内的元素,不会影响原数组Array1里面的内容。因为通过的是Array2的引用修改的是自身的值,所以Array1中的内容不受到影响 数组的浅拷贝: 当数组中存放的是引用类型(地址),进行拷贝后,原数组中存放的地址被一同拷贝到新数组中,此时相当于两个相同的
2020-08-09 01:20:31 829
原创 java main函数为什么是静态的,其中args参数什么意思
一、staticpublic static void main(String[] args) {}java中这句话是大家最熟悉的,那为什么main方法必须是静态的呢JVM会查找类中的public static void main(String[] args),如果找不到该方法就抛出错误NoSuchMethodError:main,程序终止。由于main方法是静态的,JVM调用这个方法就不需要创建任何包含这个main方法的实例。如果main方法不声明为静态的,JVM就必须创建main类的实例,
2020-08-08 20:05:58 718
原创 Java Filter过滤器------对未登录用户访问地址的控制
.一、什么是Filter过滤器二、 为什么要用Filter过滤器三、如何使用1. 重写过滤器的三个方法2.使用案例一、什么是Filter过滤器顾名思义,过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应。它是对web服务器管理的所有web资源,例: 静态图片文件、静态html文件、Servlet、Jsp等进行拦截,从而,实现一些特殊的功能。filter主要是用来对
2020-08-07 23:29:27 2603
原创 IP地址计算---子网掩码确定和子网划分等详解 (附常见相关习题)
.一、 Ip地址1、什么是IP地址2、什么是子网掩码3、ip地址的两种表示方式3、特殊的一类IP地址二、常见IP相关计算1、网络号2、主机号3、广播地址4、可用IP地址范围5、子网数目三、子网划分四、子网掩码如何确定一、 Ip地址1、什么是IP地址IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。按照CP/IP协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节。包括主机地址和网络地址两部分。如11000000 10101000 000000
2020-08-06 21:10:47 101353 26
原创 HashMap 中数组的 size 为什么必须是 2 的整数次幂?(index如何确定和高16bit ^ 低16bit)
.一、HashMap put操作的时候,index下标如何确定二、为什么要 高16位 ^ 低16位三、为什么数组的长度是2^n一、HashMap put操作的时候,index下标如何确定HashMap<String,Integer> map = new HashMap<>();map.put(“book”,1);HashMap为k-v模型,put的过程中,计算下标时,分为两步,首先对 key 进行 hash 操作,其次再通过hash值和数组长度-1进行&运算得到
2020-08-05 16:56:29 1258 3
原创 Java多线程中画图带你理解CAS和ABA问题
CAC和ABA一、CAS问题1、什么是CAS2、为什么会有CAS机制的出现3、CAS执行后的结果二、ABA问题1、什么是ABA2、如何解决ABA问题一、CAS问题1、什么是CASCAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换。CAS 算法它包含3 个参数:CAS(V,A,B)①V表示要更新的变量(内存值)②A表示预期值(旧的)③B表示要修改的新值当且仅当V等于于A值时,才会将V的值设为B如果V 值和A值不同,则说明已经有其他线程做了更新,则当前线程
2020-08-05 00:33:10 930 2
原创 多线程——这些锁策略(乐观悲观锁、读写锁、自旋锁、可重入锁、公平非公平锁)了解吗?
锁策略一、乐观锁 VS 悲观锁二、读写锁 VS 一把大锁三、用户态自旋锁 VS 内核态重量级锁四、可重入锁五、公平锁 VS 不公平锁一、乐观锁 VS 悲观锁1. 乐观锁:乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。java 中的乐观锁基本都是通过CAS 操作实现
2020-08-04 17:14:44 454
原创 可能是Windows下最简单java环境配置和jenkins安装教程 (详细版)
详细步骤一、下载链接二、java环境配置安装环境配置三、jenkins安装一、下载链接百度网盘:链接:https://pan.baidu.com/s/1rH594_8hYQYKKDuT2VpDgw 提取码:k0n1Jenkins是一个开源的软件项目,是基于java开发的一种持续集成工具。所以在安装之前需要配置java环境。若jdk已经安装过,可以直接略过第二步二、java环境配置安装1. 执行安装包jdk-8u111-windows-x64.exe,出现如下图界面,点击下一步2.
2020-08-01 13:47:30 2641
原创 Python安装包下载、环境配置与工具包安装教程(详细版)
一、安装包下载网盘:链接:https://pan.baidu.com/s/1FrFj8Flcwr_ZJH91OxoF5A 提取码:2442二、环境配置1、下载完解压后双击 python-3.8.0a4-amd64.exe,注意:一定勾选Add Python 3.8 to PATH, 会自动配置环境变量 2、在cmd中输入python 验证是否安装成功三、工具包下载1、安装pip,首先进入cmd命令是:pip install pip查看是否安装成功命令: == pip show pi
2020-07-31 17:50:45 10793 7
原创 手把手教你禅道的下载和安装教程(详细版本)
一、下载方式官网:禅道官网链接百度网盘:链接:https://pan.baidu.com/s/1z7OaiOJMhaQL7ADDEocPhA提取码:0xal二、安装步骤:点击解压后如下,切记解压后的.exe移动到根目录下确保在根目录下,双击exe可执行程序后,再点击Extract会在根目录下获得一个xampp目录双击start.exe之后,点击服务–>查看服务开始配置非常重要:apache端口号:一定改为非80端口,否则由于web应用占用80端口,导致禅道启动不了
2020-07-31 16:46:47 21778 17
原创 数据结构---二叉搜索树---Java二叉搜索树删除图示详解与创建增删查等操作(含详细源代码与图示注释)
二叉搜索树(Binary Search Tree)二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树注意:二叉搜索树中没有重复的元素BSTree的实现主要有如下3种方法:public boolean insert ( int val ) 参数:待插入元素val,功能:将元素插入到二叉树中构成二叉搜索树public
2020-05-29 18:04:54 570 1
原创 数据结构---单链表和双向链表----Java实现单链表及双向链表的创建与增删查改等9种操作(含详细源代码与注释)
单链表与双向链表单链表双向链表概念链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的。分类实际中链表的结构非常多样,以下情况组合起来就有8种链表结构:单向、双向带头、不带头循环、非循环尽管以上情况组合起来非常之多,但是我们主要讨论的是两种:1、无头单向非循环链表2、无头双向非循环链表单链表单链表的实现主要有如下9种方法public void addFirst(int data) 参数:插入数据data。功能:头插法插入datap
2020-05-21 17:38:03 632
原创 Java重载(overload)和重写(override)区别分不清楚?来这只看一遍就能解答你的疑惑
1重载(overload)规则方法名相同方法的参数不同(参数个数或者参数类型)方法的返回值不做要求,可以相同也可以不同重载的方法在同一个类当中若几个方法满足了上面的条件,那么他们就构成了重载的关系。举个例子class Person { private int age; private String name; private String sex; ...
2020-05-03 22:33:36 420
原创 不理解Java中类与对象(封装+构造法方法+代码块)等的意义?看完这篇秒懂
类与对象一.类与对象的认识二.类的成员三.封装四.构造方法五.认识代码块六.匿名对象一.类与对象的认识什么是类?在现实世界中,真实存在的东西,比如吉普车,卡丁车,货车。我们在认识它的时候就会在脑海中将它抽象为一种类别叫做车。 好了,那再计算机世界中,它同样的也会这样做 。举个例子:八月十五吃月饼,生产月饼会用模具,通过模具生产出各种甜月饼、咸月饼。那么在计算机世界中,模具就称为类,甜...
2020-05-02 19:07:51 654
原创 数据结构---顺序表----Java实现顺序表的创建与增删查改等9种操作(含详细源代码与注释)
线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存...
2020-04-21 11:08:17 3706
原创 [剑指Offer]---面试题15---二进制中1的个数
题目:请实现一个函数, 输入一个整数, 输出该数二进制表示中1的 个数。例如,把9表示成二进制是1001, 有2位是1。因此,如果输入9, 则该函数输出2。方法1我们知道如果两个整数按位与运算,其实在内部的执行方式是按照32个二进制位按位与。1&1=1,1&0=0, 0&0=0。这就为我们提供了思路,如果使用一个1按位与这个整数,得到的结果是1,那么原整数二进制序...
2020-04-14 13:08:53 385
原创 Java递归与迭代求斐波那契数列
Fibonacci 数列:指的是这样一个数列:1、1、2、3、5、8、13、21、34……即从第三项开始,每一项等于它的前两项之和。递归程序调用自身的编程技巧称为递归。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要...
2020-04-13 15:28:06 1423
原创 c语言打印菱形与指定的乘法口诀表
打印菱形通过观察我们发现菱形是有规律的,如果把星星最多的行定位参考值line,此处的line=3。那line行之前是个正三角形,往后是倒三角形。那问题就转换为打印两个三角形。打印上三角形第一行= line-1 个 空格 + 1 个 星星第二行= line-2 个 空格 + 3 个 星星第三行= line-3 个 空格 + 5 个 星星打印下三角形第四行...
2020-04-07 16:14:32 689
原创 c语言实现扫雷小游戏和扫雷源代码
扫雷小游戏首先我我们分析一下扫雷的玩法,点中格子,有炸弹游戏结束,没有炸弹需要提示这个格子的四周一圈又多少个雷,并且把这个数字写在格子里。最后排出所有雷,游戏胜利。需要创建的文件有test.c : 用来书写主函数和开始的选择菜单部分game.c:函数的实现放在此处game.h :函数的声明和需要引用的头文件游戏实现思路创建两个二维数组,来模拟两个棋盘,第一个mine棋盘11x...
2020-03-28 22:22:07 5882 5
原创 闰年的判定方法与闰年查询后的输出方法
首先了解闰年的判定方式年份能被4整除但是不能被100整除年份能被400整除满足上面其中一条就判定为闰年。流程图如下输入一个年份,查询是否为闰年#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h> int main(){ printf("输入年份来查询是否是闰年\n" ); int year = 0; scanf...
2020-03-24 23:30:33 827
原创 Visual Studio 2017中C语言使用scanf函数时运行报错解决方法
Visual Studio 2017中C语言使用scanf函数时运行报错解决方法出现的问题在使用Visual Studio2017运行一个简单的程序,其中使用了scanf函数。scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里。但是编译运行时候会报错。它告诉scanf此函数可能不安全。考虑改用scanf_s。若要禁止,请使用“CRT_SECU...
2020-03-12 23:05:56 3514 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人