自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 求大于等于(小于等于)一个整数最小2次幂算法

给一个整数,如何求得大于等于该整数的最小2次幂呢?最近看ConcurrentHashMap的源码中有这么一段代码,这段代码就是解决这个问题的最好答案。现在我给大家来讲解一下这段代码的意思吧。/** * Returns a power of two table size for the given desired capacity. * See Hackers Delight, sec 3.2 */ private static final int tableSize

2020-10-15 16:08:09 1597 1

原创 了解线程池吗?还不点进来看!

1. 线程池简介简单的理解线程池就是运用了池化的思想将线程的创建与使用都放在线程池中,方便了任务的执行和现成的管理。优点: ①降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的消耗。②提高响应速度,当任务到达时,任务可以不需要等到线程创建就能立即执行。③提高线程的可管理性,线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以对线程进行统一的分配,调优和监控。ThreadPoolExecutor类的继承关系public class ThreadPo

2020-10-15 04:18:38 201 1

原创 快速理解HashMap(哈希表)

一、哈希表哈希表可以简单理解为存储Key-Value(键值对)映射的集合,我们可以通过Key快速找到对应的Value,在jdk1.8(今天只聊jdk1.8)中哈希表采用了数组+链表+红黑树的方式来实现。这是我从网上找的一张图片,先简单大家先直接看图片有个印象,对着图片看以至于不会太抽象。这时可能会有疑惑,哈希表是怎么实现的,为什么搜索效率高,他又用到了那些原理,我们应该怎样使用呢?接下来容我一一道来。二、哈希函数哈希函数我们可以简单理解为一种数据映射的算法,当我们要存入数据的时候我们并不是直接将

2020-10-08 07:09:49 782 1

原创 浅谈String & StringBuffer & StringBuilder的区别

一、String(不可变类)String类是不可变类,一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。每次创建一个String类都会生成一个新的对象,这样极大的浪费了内存空间并且效率低下。二、StringBuffer & StringBuilder(可变类)StringBuffer和StringBuilder对象则代表一个字符序列可变的字符串,所以和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能

2020-08-31 23:58:23 531

原创 [LeetCode]414: 第三大的数(Set+排序)

414: 第三大的数难度 : 简单class Solution(){ public int thridMax(){ } }

2020-08-31 17:16:22 134

原创 排序(四) : 快速排序Ⅱ(填坑法+递归)

快速排序(填坑法+递归)上次已经介绍过快速排序的基本思想所以这次不做赘述。其实基本思想一致只是实现稍有不同而。原数组:挖坑 : 去除left的值作为key填坑 : 因为3<4(key) arr[left] = arr[right];继续填坑 : 因为8>4(key) arr[right] = arr[left];相遇这是一次操作,然后将3设为基准值(key)重复此操作直至数组有序。public static void quickSort(int[] arr,int

2020-08-30 21:50:57 193

原创 MySQL视图(简单介绍和理解)

什么是视图?在数据库中由于很多数据是用表来存的,简单的理解视图就是将多个表的数据进行整合然后构成一个新表,这个新表就是视图。但是视图本质上是一种虚拟表,在物理上是不存在的,其内容与真实的表相似,包含一系列带有名称的列和行数据。所以视图起到一个过滤数据的作用,使开发者是关注自己需要的某些特定数据和所负责的特定任务,只能看到视图中所定义的数据,而不是视图所引用表中的数据,从而提高了数据库中数据的安全性。视图有哪些特点?视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系。视图是由基本表(实表

2020-08-30 20:56:09 468

原创 简述MySQL事务

事物的四大特性(ACID)原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么全部失败;一致性(Consistency): 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;隔离性(Isolation): 并发访问数据库时,一个事务的成功或者失败对于其他的事务是没有影响,两个事务应该相互独立。持久性(Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。什么是脏读

2020-08-27 20:12:30 180

原创 [牛客] 求镜像二叉树(递归)

求镜像二叉树镜像二叉树顾名思义,左变右,右变左,我们利用递归来求解。public class Solution { public void Mirror(TreeNode root) { if(root == null){ return; } TreeNode node = root.left; root.left = root.right; root.right = node;

2020-08-27 17:34:35 107

原创 理解进程和线程的区别

进程和线程的区别进程 :进程是一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程但只要有一个线程。线程 :线程是进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。进程和线程的区别总结 :1:(根本区别)进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。2 :如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,

2020-08-26 00:25:06 595

原创 常见状态码(必须掌握)

常见状态码的含义当我们访问一个网页时,浏览器会向网页所在服务器发出请求,当服务器收到请求后,就会解析请求并做出响应,同时服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。但是这个过程并不百分百成功,并且情况也很复杂,所以状态码就起到至关重要的作用的作用。HTTP状态码分类:HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:1** :信息,服务器收到请求,需要请求者继续执行操作2

2020-08-24 16:44:10 3436 1

原创 [牛客] 年会中奖(错排问题)

年会中奖问题题目描述 :今年公司年会的奖品特别给力,但获奖的规矩却很奇葩:首先,所有人员都将一张写有自己名字的字条放入抽奖箱中;待所有字条加入完毕,每人从箱中取一个字条;如果抽到的字条上写的就是自己的名字,那么“恭喜你,中奖了!”现在告诉你参加晚会的人数,请你计算有多少概率会出现无人获奖?题目链接 :https://www.nowcoder.com/questionTerminal/610e6c0387a0401fb96675f58cda8559?toCommentId=25418

2020-08-24 02:16:59 231

原创 [Leetcode]581.最短无序连续子数组(双指针)

581.最短无序连续子数组难度 : 简单题目描述 : 给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray解题思路 : 采用双指针,right指针从左边开始往右遍历,用max来标记最大值,用right来标记不符合当前值大于之

2020-08-23 14:59:10 186

原创 排序(三) : 快速排序Ⅰ(Hoare法+递归)

快速排序1.原理 :①. 从待排序区间选择一个数,作为基准值(pivot);②. Partition: 遍历整个待排序区间,将比基准值小的(可以包含相等的)放到基准值的左边,将比基准值大的(可以包含相等的)放到基准值的右边;③. 采用分治思想,对左右两个小区间按照同样的方式处理,直到小区间的长度 == 1,代表已经有序,或者小区间的长度0,代表没有数据。...

2020-08-22 18:54:18 256

原创 [Leetcode]328.奇偶链表(链表)

328.奇偶链表难度 : 中等给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/odd-even-linked-list著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2020-08-22 14:57:24 152

原创 [Leetcode]994.腐烂的橘子(广度优先搜索)

994.腐烂的橘子难度 : 中等在给定的网格中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。由题目我们可以知道烂橘子会蔓延,并且是像自己的上下左右四个方向蔓延,蔓延过程中会将新鲜的橘子变为腐烂的橘子。通过这一点我们可以看出这个过程很类似于广度优先搜索,最后是让我们返回直到单元格中没有

2020-08-21 18:36:24 194

原创 [Leetcode]34.在排序数组中查找元素的第一和最后一个位置

34.在排序数组中查找元素的第一和最后一个位置难度 : 中等给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例1输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例2输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1]首先从题目叙述中我

2020-08-21 17:54:53 106

原创 排序(二):希尔排序,堆排序

本次介绍:希尔排序,堆排序(并解决topK问题)一、希尔排序1.原理 : 希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工作。当到达=1时,所有记录在统一组内排好序。① 希尔排序是对直接插入排序的优化。② 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们

2020-08-16 17:57:51 877

原创 排序(一):冒泡排序,插入排序,选择排序

本次介绍 : 冒泡排序,插入排序,选择排序一、冒泡排序1.原理 : 在无序区间,通过相邻数的比较,将最大的数冒泡到无序区间的最后,持续这个过程,直到数组整体有序。2.实现(升序):public static void bubbleSort(int[] array) { for(int i = 0;i < array.length; i++){ for(int j = 0;j < array.length - i - 1; j++){ if(array[j] > arra

2020-08-16 00:02:11 164

原创 内部类简单测试

1.测试内部类注意:若想调用内部类方法在创建内部类对象是需要在new前加上创建的外部类名称+ . 来实现创建内部类对象。//外部类Outerpublic class Outer{ // 内部类Inner,类Inner在类Outer的内部 public class Inner{ // 内部类的方法 public void show(){ System.out.println(...

2019-11-20 15:40:33 642

原创 猜数字游戏,折半查找,密码登录

1.猜数字游戏(C语言版)1.问题分析:首先要有一个与用户交互的菜单,其次生成一个随机数让用户来猜,然后通过用户输入的数字给出提示,是猜高了还是猜低了,最后用户猜对了,程序结束.2.代码://菜单函数int Menu(){ printf("===============\n"); printf("1.开始游戏\n"); printf("0.游戏结束\n"); printf("==...

2019-11-02 16:42:28 445

原创 利用函数实现乘法表,两数交换,判断闰年,判断素数,还有数组的初始化、清空、逆置。

1.实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定问题分析:首先是利用函数来实现乘法表,先设计函数,分析可以知道这个函数是没有返回值的,所以用void,然后实现乘法表则需要两层for循环来实现,外层循环控制行数,里层循环控制每行的列数,来完成函数,然后在获取键盘输入来控制行列数,最后调用函数即可。代码:void MultiplicationTable( int row) { fo...

2019-10-20 23:13:30 343

原创 求出0~999之间的所有“水仙花数”,计算类似2+22+222+2222+22222的前五项累加和,输出最后那个图案

1.求出0~999之间的所有“水仙花数”问题分析:因为是0~999,所以先来一个循环,再进行判断,水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=13+53+3^3,则153是一个“水仙花数”。代码:int main() { int n, m, k,t; for (int i =1; i < 1000; i++) { n = i / 100; ...

2019-10-10 11:21:37 412

原创 数组内容交换;计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值; 1到 100 的所有整数中出现多少次数字9.

1. 将数组A中的内容和数组B中的内容进行交换问题分析:这个问题很简单,仅为数组长度相同所以直接一层循环然后将两个数组的内容逐个交换即可代码: int main(){ int a[5]; int b[5]; int i; int j; int t; printf("请输入a[5]中的元素\n"); for (i = 0; i < 5; i++) { sca...

2019-09-29 17:41:30 264

原创 两数交换的两种方法,求10个数中的最大值,将三个数从大到小排序,求两个数的最大公因数.

1.给定两个整形变量的值,将两个值的内容进行交换问题分析:两个数交换需要一个临时变量作为中间变量,这种方法也比较常用.代码:void main() { int a; int b; int t; printf("请输入a的数值\n"); scanf("%d", &a); printf("请输入b的数值\n"); scanf("%d", &b); printf(...

2019-09-27 23:40:47 487

原创 一次简单的C语言作业

1.打印100~200 之间的素数问题分析:因为要判断100-200之间的素数所以肯定要用到循环,来加以判断,接下来就是判断条件,素数及就是只能被1和他自己整除即为素数,所以要在判断条件里再用一次循环,作为判断是否是素数,最后就是如果是素数就输出这个数。代码:for (int i = 100; i <= 200; i++){ //循环判断100-200之间的所有数for ...

2019-09-23 17:32:01 270

原创 做个勤奋的程序员

这是我的第一篇博客,内容很简单就是来立一个flag,大学毕业之前我要完成我的10W行代码的任务,毕业后成功找到年薪15W+的工作,虽然大学的前两年确实有点荒废,错过了很多东西,但希望我能把剩下的时间充分利用起来,多敲代码少玩耍,我也要向别人一样当大佬,现在flag已立,如果成功普天同庆,如果没有完成,我就3口吃完王致和臭豆腐。希望我能成功,祝我好运。丰德聪.2019/9/20....

2019-09-20 18:42:11 805 7

空空如也

空空如也

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

TA关注的人

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