自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HashMap

HashMap的特点HashMap基于Map接口实现,元素以键值对的方式存储允许使用null键和null值,因为key不允许重复,因此只能有一个键为nullHashMap不能保证放入元素的顺序,它是无序的,和放入的顺序并不能相同HashMap是线程不安全的(多线程环境中推荐ConcurrentHashMap或者通过Collections类的静态方法synchronizedMap获得线程安...

2019-08-31 16:43:34 188

原创 Java线程池

问题引入重复创建和销毁线程的开销很大,可能会超过响应用户的时间Java线程池创建方法newFixedThreadPool(int N)N为线程数newCachedThreadPool()处理大量短时间工作任务的线程池1)试图缓存线程并重要,无缓存线程可用就创建新线程2)如果系统闲置的时间超过阈值,则会被终止并移出缓存3)如果长时间闲置的时候,不会消耗什么资源newSingleTh...

2019-08-30 11:24:27 176

原创 进程与线程(操作系统+java)

进程和线程的由来操作系统的特征:并发,共享,虚拟,异步任务处理方式的历程:串行 》》 批处理 》》 进程 》》 线程注:并行:同一时刻运行并发:同一段时间内同时运行引入进程是为了更好地使多道程序并发执行,提高资源利用率和系统吞吐量(增加并发程度)引入线程的目的是为了减少程序在并发执行时付出的时空开销(提高并发性能)进程所有与进程相关的资源,被记录在PCB中...

2019-08-28 21:52:42 363

原创 GC之垃圾收集器

JVM运行模式Server (启动慢,稳定后快)Client年轻代常见的垃圾收集器Serial收集器(复制算法)单线程收集,进行垃圾收集时,必须暂停所有的工作线程简单高效,Cilent模式下默认的年轻代收集器ParNew收集器(复制算法)多线程收集,其余行为和Serial一样单核执行效率不如Serial,再多核下执行才有优势Parallel Scavenge收集器(复制算法...

2019-08-28 10:48:51 131

原创 Java垃圾回收机制(GC算法简述)

引用计数算法判断对象的引用数量来决定对象是否可以被回收每个对象实例都有一个引用计数器,被引用则+1,完成引用-1任何引用计数为0的对象实例被当作垃圾优点:执行效率高,程序执行受影响小缺点:无法检测出循环引用的情况,导致内存泄漏可达性分析算法判断对象的引用链是否可达来决定对象是否可以被回收(理论基础:离散数学图论)可以作为ROOT的对象虚拟机栈中引用的对象方法区中常量引用的...

2019-08-27 23:12:43 194

原创 面试中的数据库基本知识(数据库概述)

数据库的定义数据库是长期存储在计算机内,有组织,可共享的大量数据集合数据库系统数据库数据库管理员数据库管理系统应用程序数据的独立性物理独立性逻辑独立性用户的应用程序与数据库物理存储和逻辑结构独立(无关),利用数据库系统提供的二级映像功能来提供数据的安全性防止数据泄露防止数据被破坏数据的完整性正确有效相容数据模型(将现实世界抽象为信息世界,再将信息...

2019-08-27 21:32:56 192

原创 Java之内存模型

操作系统之部分内存管理基本知识内存管理的功能内存空间的分配与回收地址转换内存空间扩充存储保护程序装入内存的过程编译链接(将编译后形成的目标模块与库函数链接)装入(绝对装入【逻辑地址=实际地址】,可重定位装入【装入时进行地址转换】,动态重定位【执行时进行地址转换】)扩充内存的技术覆盖(同一进程,已淘汰)交换(不同进程)虚拟(虚拟内存最大容量与计算机地址位数相关)【...

2019-08-27 16:39:30 107

原创 Java之ClassLoader

ClassLoader 的作用负责将 Class 加载到 JVM 中审查每个类由谁加载(父优先的等级加载机制)将 Class 字节码重新解析成 JVM 统一要求的对象格式类的生命周期...

2019-08-26 22:44:44 130

原创 面试中的数据库基本知识(理论范式)

1.关系型数据库和非关系型数据库(1)常见关系型数据库(采用了关系模式来组织的数据库)优点:1、易于维护:都是使用表结构,格式一致;2、使用方便:SQL语言通用,可用于复杂查询;3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。缺点:1、读写性能比较差,尤其是海量数据的高效率读写;2、固定的表结构,灵活度稍欠;3、高并发读写需求,传统关系型数据库来说,硬盘I/...

2019-08-24 18:22:11 346

原创 面试中的数据库基本知识(事务,事务并发,事务隔离)

事务的定义数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成事务的特性(ACID)1:原子性:事务包含的所有操作要么全部成功,要么全部失败回滚;成功必须要完全应用到数据库,失败则不能对数据库产生影响;2:一致性:事务执行前和执行后必须处于一致性状态,例:用户A和用户B的前加起来一共是5000; 无论AB用户之间是如何相互转换的,事务结束后两个用户的钱加起来还是5000...

2019-08-22 20:47:11 266

原创 面试中的数据库基本知识(锁的分类)

Myisam和Innodb的区别1).MyISAM存储引擎的特点是:表级锁(不支持行级锁)、不支持事务和支持全文索引,适合一些CMS内容管理系统作为后台数据库使用,但是使用大并发、重负荷生产系统上,表锁结构的特性就显得力不从心;2).InnoDB存储引擎的特点是:行级锁(也支持表级锁)、事务安全(ACID兼容)、支持外键、不支持FULLTEXT类型的索引(5.6.4以后版本开始支持FULLTE...

2019-08-21 23:48:58 307

原创 面试中的数据库基本知识(索引的分类)

思维导图架构索引索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息目的:(1)提高查询速度(2)确保数据的唯一性(3)可以加速表和表之间的连接,实现表和表之间的参照完整性(4)使用分组和排序子句进行数据检索时,可以减少分组和排序的时间(5)全文检索字...

2019-08-20 21:47:24 564

原创 Java----面试中将用到的网络基础知识(4)

Socket是对TCP/IP的抽象,是操作系统对外开放的接口Socket练习:聊天室的实现

2019-08-18 23:22:04 115

原创 Java----面试中将用到的网络基础知识(3)

HTTP超文本协议http(Hypertext transfer protocol)超文本传输协议,通过浏览器和服务器进行数据交互,进行超文本(文本、图片、视频等)传输的规定。也就是说,http协议规定了超文本传输所要遵守的规则。特点支持客户/服务器模式简单快速灵活无连接无状态(没有记忆能力)请求/响应步骤客户端连接到Web服务器发送HTTP请求服务器接受请求并返回HTTP请...

2019-08-18 23:04:37 103

原创 Java----面试中将用到的网络基础知识(2)

UDP 特点面向非连接不维护连接状态,支持同时向多个客户端传送相同的信息数据包报头只有8个字节,额外开销小吞吐量受限于数据生成速率,传输速率以及机器性能尽最大努力交付(不保证可靠)面向报文,不对报文信息进行合并和拆分TCP和UDP的区别(1)TCP面向连接,UDP面向非连接(2)TCP可靠,UDP不可靠(3)TCP有序(到达不一定有序,但最后会排序),UDP无序(4) TC...

2019-08-17 21:05:59 103

原创 迪杰斯特拉算法(图示+C语言实现)

迪杰斯特拉是单源最短路算法(即只能求一点,到其他任一点的最短路径,但可以加循环得到任意两点间的最短路径),无法处理带负权变的图算法思路图示初始化两个集合S={A}(只包含源点,表示已经确定最短路径的节点,一旦S中包含所有元素那么算法终止)U={B,C,D,E,F,G}初始化,所有距离初始化为无穷大选定点A,更新选定A-B路径(即S集合为{A,B}),考察B的所有邻接点为什么选定...

2019-08-16 22:52:06 8339 1

原创 Java----面试中将用到的网络基础知识(1)

OSI七层网络模型名称功能应用层(Application)直接向用户提供服务,文件传输、电子邮件、文件服务、虚拟终端表示层(Presentation)数据格式化、代码转换、数据加密会话层(Session)在两个会话实体间建立和使用连接、解除连接传输层(Transport)提供可靠的端到端的差错和流量控制,保证报文的正确传输网络层(Network...

2019-08-16 17:06:43 98

原创 Java-----面向面试每日刷10题(31-40)

31、遍历一个List有哪些不同的方式?使用for-each循环,迭代器使用迭代器更加线程安全,因为它可以确保,在当前遍历的集合元素被更改的时候,它会抛ConcurrentModificationExceptionList<String> strList = new ArrayList<>();//使用for-each循环for(String obj : st...

2019-08-16 14:32:37 120

原创 Java-----面向面试每日刷10题(21-30)

21、面向对象和面向过程的区别面向过程:  优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。缺点:没有面向对象易维护、易复用、易扩展面向对象:优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护缺点:性能...

2019-08-15 20:09:13 131

原创 数据结构笔记----哈希表及其在JAVA集合中的应用

哈希表(散列表)的基本概念在线性表和数表中,记录在表中的位置和记录的关键字之间存在不确定关系,他们的查找基于“比较”而哈希表是根据关键字直接访问的数据结构它是一种高效的数据结构,其高效主要体现在把数据的存储和查找时间大大降低,几乎可以看成是常数时间,而代价是消耗比较多的内存,然而在硬件技术越来越发达的今天,用空间换时间的做法在某种意义上是值得的。另外,编码比较容易也是它的特点之一。散列函数...

2019-08-14 21:50:51 212

原创 Java-----面向面试每日刷10题(11-20)

11、什么时候用断言(assert)断言在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。一般来说,断言用于保证程序最基本、关键的正确性。断言检查通常在开发和测试时开启。为了保证程序的执行效率,在软件发布后断言检查通常是关闭的。断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为true;如果表达式的值为false,那么系统会报告一个AssertionError。12、...

2019-08-14 16:10:15 122

原创 Java-----面向面试每日刷10题(1-10)

1、面向对象的特征有哪些方面?抽象,(继承,封装,多态)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。封装:通常认为封装是把数据和操作数据的方法绑定起来,对数...

2019-08-13 22:56:44 158

原创 数据结构与算法笔记----BF算法与KMP算法(图解+C语言实现+代码分析)

BF算法算法思想:比较简单,定义i,和j分别指向主串和字串的头部),依次向后比较,若比较失败,主串和字串都需要回溯(i=比较轮数+1的位置,j回到0位置)元素相同,故i,j均向后移一位元素不同,i退回第二个位置。j变成0元素还是不同,i退到第三个位置结束#include<stdio.h>#include<string.h>bool BF(cha...

2019-08-13 09:30:19 1425

原创 数据结构与算法笔记-----B树,B+树及其应用

学习路径:B树的特点一个M阶的b树具有如下几个特征:(1)定义任意非叶子结点最多只有M个儿子,且M>2;(2)根结点的儿子数为[2, M];(3)除根结点以外的非叶子结点的儿子数为[M/2, M],向上取整;(4)非叶子结点的关键字个数=儿子数-1;(5)所有叶子结点位于同一层,且不带信息(实际上为NULL)(6)k个关键字把节点拆成k+1段,分别指向k+1个儿子,同时满足...

2019-08-11 16:53:06 306

原创 LeetCode4----分石子(博弈类动态规划,C语言实现,难度:中等)

亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] 。游戏以谁手中的石子最多来决出胜负。石子的总数是奇数,所以没有平局。亚历克斯和李轮流进行,亚历克斯先开始。 每回合,玩家从行的开始或结束处取走整堆石头。 这种情况一直持续到没有更多的石子堆为止,此时手中石子最多的玩家获胜。假设亚历克斯和李都发挥出最佳水平,当亚历克斯赢得比赛时返回 true ,当李赢得...

2019-08-11 09:22:32 556

原创 LeetCode3-----除数博弈(分析法+动态规划,C语言实现)

爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:选出任一 x,满足 0 < x < N 且 N % x == 0 。用 N - x 替换黑板上的数字 N 。如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩家都以最佳状态参与游戏。...

2019-08-10 22:37:13 513

原创 Window家庭版一键安装gpedit.msc

云盘里直接下载到桌面,点击等待完成就行,非常方便,亲测有用https://pan.baidu.com/s/1KYGyYjXAKSH4J4uc2gQiqw

2019-08-09 22:11:41 748 1

原创 数据结构与算法笔记-----动态规划简述(以Coin change为例图示+C语言实现)

什么是动态规划动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶...

2019-08-08 15:13:39 347

原创 数据结构与算法笔记----广度优先搜索(BFS图示+C语言实现)

广度优先搜索定义及其性质BFS,其英文全称是Breadth First Search。广度优先搜索算法具有完全性。这意指无论图形的种类如何,只要目标存在,则BFS一定会找到。然而,若目标不存在,且图为无限大,则BFS将不收敛(不会结束)。广度优先搜索的应用(1)寻找连接元件(2)寻找非加权图的两点最短路径(3)检测二分图算法思想将A移出队列将相邻节点依次加入队列(1)将B...

2019-08-07 21:19:41 10988 3

原创 LeetCode2----在自然数组成的串中寻找第n个数字(难度:easy)

在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …中找到第 n 个数字。注意:n 是正数且在32为整形范围内 ( n < 231)。示例 1:输入:3输出:3示例 2:输入:11输出:0说明:第11个数字在序列 123456789101112131415 里是0思路一位数有9个,数字总数为91=9个二位数有90个,数字...

2019-08-07 16:27:53 648

原创 数据结构与算法----深度优先搜索(DFS图示+C语言实现)

深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法,英文缩写为DFS即Depth First Search一,应用(1)拓扑排序(比如,在大学里必须满足一些先决条件才能选的课程)(2)走迷宫和八皇后问题(结合回溯算法)(3)部分和,给出的n个数字中找到m和数字加起来等于sum(4)检验连通性的问题(求联通分量)(5)求无权最短路二,算法思想DFS的操作步骤如下:1、把起始...

2019-08-06 20:10:34 5524 1

原创 数据结构与算法笔记---并查集

并查集是一个树形的结构,用于处理不相交集联合-查找算法(union-find algorithm)定义了两个用于此数据结构的操作Find:确定元素属于哪一个子集。方法就是不断向上查找找到它的根节点,它可以被用来确定两个元素是否属于同一子集。Union:将两个子集合并成同一个集合。用数组能够更好的理解并查集:例如上面这三棵树:(1)P【15】=15,表示15就是15的根(2)P...

2019-08-05 22:59:26 134

原创 数据结构与算法----二叉搜索树(Binary Search Tree)

一,性质(1)二分搜索树是一颗二叉树(但不一定是完全二叉树),满足二叉树的所有定义;(2)二分搜索树每个节点的左子树的值都小于该节点的值,每个节点右子树的值都大于该节点的值。(3)以左右孩子为根的子树仍为二分搜索树二,意义(1)在查找元素时,我们于根节点进行对比后,就能每次近乎一半的去除掉查找范围,这就大大的加快了我们的查询速度,插入元素时也是一样。(2)用来实现字典数据结构(查找表...

2019-08-05 22:07:56 157

原创 LeetCode1----最短无序连续子序列C实现(难度:easy)

给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。说明 :输入的数组长度范围在 [1, 10,000]。输入的数组可...

2019-08-04 21:57:38 706

原创 数据结构与算法笔记----基数排序和计数排序,桶排序

(1)计数排序算法思想伪计数排序(被坑了,乍一看有点计数的思想,但是时间复杂度O(N^2),空间复杂度O(n),真的侮辱智商) 这是某博主的提供的思路【 对每一个输人元素x,确定小于x 的元素个数。 利用这一信息,就 可以直接把x放到它在输出数组中的位置上了。 例如,如果有17个元素小于x,则x就应该在第18个输出位置上。 当有几个元素相同时,这一方案要略做修改。 因为不能把它们放在同一...

2019-08-04 18:10:11 142

原创 数据结构与算法笔记----二叉堆的定义及其基本操作,堆排序(HeapSort)

什么是堆①作为一种数据结构,是完全二叉树在数据结构课本中学习了两种:大根堆,小根堆大根堆,双亲>孩子(可以用作实现优先队列,优先级高的先出)小根堆,双亲<孩子②堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。③堆是应用程序在运行的时候请求操作系统分配给自己内存,一般是申请/给予的过程。④堆是指程序运行时申请...

2019-08-04 08:23:03 250

原创 数据结构与算法笔记----图解归并排序(MergeSort)

(1)算法思路基本操作是:合并两个排序好的表,将输出放在辅助数组里面一次归并的过程,和合并两个有序链表几乎是一样的:初始状态:(1)1<2,那么将A所指元素放入辅助数组,再令A++,C++;(2)13>2,那么将B所指元素放入辅助数组,再令B++,C++;![在这里插入图片描述](https://img-blog.csdnimg.cn/20190802153029830...

2019-08-02 17:00:20 295

原创 数据结构算法笔记---图解快排(QuickSort)

(1)快排的思想实际上每一个step 都是将序列分别为两部分,前半部分小于它,后半部分大于它(图中以5为例,我们考虑增序)然后对前半部分和后半部分进行同样的操作(递归)(注:5是哨兵变量,哨兵变量可以任选,但是哨兵变量可能是最大或者最小的,如果这样,算法的效率会很低,所以选择正确哨兵很重要)下面是详细的步骤:(1)以5作为哨兵变量,令i指向第二个下标,j指向最后一个下标(2)i向后...

2019-08-01 23:36:35 430

原创 初识Hive---大数据分析学习笔记7

Hive数据仓库一,数据仓库和传统关系型数据库的区别与联系:(1)数据库(database):传统的关系型数据库的主要应用(OLTP),主要是基本的、日常的事务处理,例如银行交易。数据仓库(data warehouse):数据仓库系统的主要应用主要是OLAP(On-Line Analytical Processing),支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。(2)...

2019-07-29 21:20:54 137

原创 数据结构笔记----图解插入直接排序算法及其改进形式

insertsort算法思想:将待排序的记录按大小插入已经排序好的子序列中算法分析:时间复杂度O(n^2)空间复杂度O(1)稳定的算法适用于顺序存储和链式存储的线性表特点:可以提前终止循环,在数据基本有序时效率很高应用:在复杂排序中作为一个子过程 来优化void InsertSort(elemtype *a,int n){//逆序 for(int i=1;i<n;i++)...

2019-07-29 15:19:05 202

空空如也

空空如也

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

TA关注的人

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