- 博客(86)
- 资源 (1)
- 收藏
- 关注
原创 刷题-java
1. 在JAVA编程中,Java编译器会将Java程序转换为(字节码)解释:编译器将Java源代码编译成字节码class文件 类加载到JVM里面后,执行引擎把字节码转为可执行代码 执行的过程,再把可执行代码转为机器码,由底层的操作系统完成执行2.执行语句“int a=’2’”后,a的值是(50 )a是int类型,单引号是字符型 记住0是48 A是65常用...
2019-03-18 15:38:31 5759 1
原创 JAVA基础知识总结4——IO
输出和输入都是以程序为中心获取用键盘输入常用的的两种方法方法1:通过 ScannerScanner input = new Scanner(System.in);String s = input.nextLine();input.close();方法2:通过 BufferedReaderBufferedReader input = new BufferedReader...
2018-11-16 19:55:06 148
原创 异常
异常:异常类(Exception 类)有两个主要的子类:IOException 类和 RuntimeException 类。 检查性异常:不处理的话,程序是不能被编译的。 运行时异常:运行时异常程序员可以不去处理,当异常出现时,虚拟机会处理。常见的运行时异常有空指针异常。 非检测型异常:异常 ...
2018-11-08 21:29:22 114
原创 JAVA基础知识总结3——常用类
常用类:ObjectObject类: 所有java类的根基(父)类toString方法:属于Object类里面的方法,其功能为返回对象的哈希code码(对象地址字符串) public class TestToStringDemo2 { public static void main(String[] args) { ...
2018-11-01 21:38:51 197
原创 JAVA基础知识总结2——异常、数组、字符串、包装类
异常、数组、字符串、包装类1.异常:运行期出现的错误,观察错误的名字和行号最重要异常处理:try{可能出现异常的语句}catch(异常类型 对象){异常处理} 先逮小的异常,再逮大的异常 重写方法需要抛出与原方法所抛出异常类型一致或不抛出异常finally:异常的统一出口,不管是否出现异常,都执行统一的代码 t...
2018-11-01 19:48:13 276
原创 JAVA基础知识1——堆栈、引用传递、static、多态、继承、接口
1.JVM(java虚拟机): Java编译器会将java程序(高级语言)经过编译会形成hello.class文件(字节码文件),类加载到JVM里面后,JVM读取并处理class文件,执行引擎把字节码转为可执行代码(机器码),执行的过程,再把可执行代码转为机器码,由底层的操作系统完成执行。针对于不同的操作系统平台,有不同版本的Java虚拟机,一个Java虚拟机实例在运行过程中有三个子...
2018-11-01 10:20:48 222
原创 数据结构的对比
数组和链表的优缺点,: 数组的内存空间是连续的,链表的内存结构是不连续的内存空间 数组: 优点:数组支持随机访问,根据下标随机访问的时间复杂度为O(1), 缺点: 1)插入、删除的时间复杂度是O(n) 2)若申请内存空间很大,比如100M,但若内存空间没有100M的连续空间时,则会申请失败,尽管内存可用空间超过100M。...
2019-09-11 09:52:08 343
原创 mysql数据库总结
数据库: 索引:底层结构就是B+树 1.添加PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引) ALTER TABLE `table_name` ADD UNIQUE ( `column` ) ...
2019-09-11 09:51:07 275
原创 linux常用命令
ls 查看目录中的文件find / -name file1 从 '/' 开始进入根文件系统搜索文件find /home/user -name \*.bin 在目录 '/home/user' 中搜索带有'.bin' 结尾的文件进程查看ps aux | grep redis删除文件rm -f file1 删除一个叫做 'file1' 的文件'删除目录并同时删除其内容rm -rf d...
2019-09-11 09:50:10 280
原创 19. 红黑树(上):为什么工程中都用红黑树这种二叉树
我们依次讲了树、二叉树、二叉查找树。二叉查找树是最常用的一种二叉树,它支持快速插入、删除、查找操作,各个操作的时间复杂度跟树的高度成正比,理想情况下,时间复杂度是O(logn)。不过,二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大于log2n的情况,从而导致各个操作的效率下降。极端情况下,二叉树会退化为链表,时间复杂度会退化到O(n)。我上一节说了,要解决这个复杂度退化的问题,我们需...
2019-08-29 11:48:17 182
原创 BFS和DFS
一、前言我们首次接触 BFS 和 DFS 时,应该是在数据结构课上讲的 “图的遍历”。还有就是刷题的时候,遍历二叉树我们会经常用到BFS和DFS。二、区别广度优先搜索算法(Breadth-First-Search,缩写为 BFS),是一种利用队列实现的搜索算法。简单来说,其搜索过程和 “湖面丢进一块石头激起层层涟漪” 类似。深度优先搜索算法(Depth-First-Search,缩...
2019-08-29 10:20:05 234
原创 18. 二叉树(下):二叉查找树与散列表的优缺点
二叉查找树(Binary Search Tree)二叉查找树是二叉树中最常用的一种类型,也叫二叉搜索树。顾名思义,二叉查找树是为了实现快速查找而生的。不过,它不仅仅支持快速查找一个数据,还支持快速插入、删除一个数据。它是怎么做到这些的呢?这些都依赖于二叉查找树的特殊结构。二叉查找树要求,在树中的任意一个节点,其左子树中的每个节点的值,都要小于这个节点的值,而右子树节点的值都大于这个节点的值...
2019-08-28 16:09:25 3336
原创 16. 哈希算法(下):哈希算法在分布式系统中的应用
1.负载均衡1.1.需求如何实现一个会话粘滞(session sticky)的负载均衡算法?也就是说,在一次会话中的所有请求都路由到同一个服务器上。1.2.解决方案通过哈希算法对客户端IP或会话ID计算哈希值,将取得的哈希值与服务器列表的大小进行取模运算,最终得到的值就是应该被路由到的服务器编号。这样,就可以把同一个IP过来的请求都路由到同一个后端服务器上。2.数据分片2.1.如何统...
2019-08-27 18:46:45 180
原创 15. 哈希算法(上):如何防止数据库中的用户信息被脱库
1.如何防止数据库中的用户信息被脱库?2.你会如何存储用户密码这么重要的数据吗?仅仅 MD5 加密一下存储就够了吗?3.在实际开发中,我们应该如何用哈希算法解决问题?一、什么是哈希算法?1.定义将任意长度的二进制值串映射成固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。2.如何设计一个优秀的哈希算法?①单向哈希:从哈希值不能反向推...
2019-08-27 18:44:12 313
原创 14. 散列表(下):为什么散列表和链表经常会一起使用
1.为什么散列表和链表经常放在一起使用?2.散列表和链表如何组合起来使用?一、为什么散列表和链表经常放在一起使用?1.散列表的优点:支持高效的数据插入、删除和查找操作2.散列表的缺点:不支持快速顺序遍历散列表中的数据3.如何按照顺序快速遍历散列表的数据?只能将数据转移到数组,然后排序,最后再遍历数据。4.我们知道散列表是动态的数据结构,需要频繁的插入和删除数据,那么每次顺序遍历之前都需...
2019-08-27 18:21:53 153
原创 13. 散列表(中):如何打造一个工业级水平的散列表
面试题目:如何设计一个工业级的散列函数?思路:何为一个工业级的散列表?工业级的散列表应该具有哪些特性?结合学过的知识,我觉的应该有这样的要求:1.支持快速的查询、插入、删除操作;2.内存占用合理,不能浪费过多空间;3.性能稳定,在极端情况下,散列表的性能也不会退化到无法接受的情况。方案:如何设计这样一个散列表呢?根据前面讲到的知识,我会从3个方面来考虑设计思路:1.设计一个合适的...
2019-08-27 16:12:49 219
原创 12. 散列表(上):Word文档中的单词拼写检查功能是如何实现的
一、散列表的由来?1.散列表来源于数组,它借助散列函数对数组这种数据结构进行扩展,利用的是数组支持按照下标随机访问元素的特性。2.需要存储在散列表中的数据我们称为键,将键转化为数组下标的方法称为散列函数,散列函数的计算结果称为散列值。3.将数据存储在散列值对应的数组下标位置。二、如何设计散列函数?总结3点设计散列函数的基本要求1.散列函数计算得到的散列值是一个非负整数。2.若key1...
2019-08-27 15:13:29 186
原创 11. 跳表 为什么Redis一定要用跳表来实现有序集合
一、什么是跳表?为一个值有序的链表建立多级索引,比如每2个节点提取一个节点到上一级,我们把抽出来的那一级叫做索引或索引层。如下图所示,其中down表示down指针,指向下一级节点。以此类推,对于节点数为n的链表,大约可以建立log2n-1级索引。像这种为链表建立多级索引的数据结构就称为跳表。二、跳表的时间复杂度?1.计算跳表的高度如果链表有n个节点,每2个节点抽取抽出一个节点作为上...
2019-08-27 11:45:42 641
原创 10. 二分查找(下) 二分查找的四种变形问题
一、四种常见的二分查找变形问题1.查找第一个值等于给定值的元素 //查找a里面第一个等于value的元素的位置 public static int bsearch2(int[] a, int n, int value) { int low = 0; int high = n - 1; while (low <= high)...
2019-08-27 11:35:10 189
原创 10. 二分查找(上) 如何用最省内存的方式实现快速查找功能
一、什么是二分查找?二分查找针对的是一个有序的数据集合,每次通过跟区间中间的元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间缩小为0。二、时间复杂度分析?1.时间复杂度假设数据大小是n,每次查找后数据都会缩小为原来的一半,最坏的情况下,直到查找区间被缩小为空,才停止。所以,每次查找的数据大小是:n,n/2,n/4,…,n/(2^k),…,这是一个等比数列。当n/(2...
2019-08-27 11:30:55 131
原创 9.排序(上) 如何用快排思想在O(n)内查找第K大元素
高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放...
2019-08-27 11:18:24 239
转载 GC自动回收机制
2,GC简单的了解 GC :Garbage Collections 字面意思是垃圾回收器,释放垃圾占用的空间。让创建的对象不需要像c、c++那样delete、free掉 。对于c、c++的开发人员来说内存是开发人员分配的,也就是说还要对内存进行维护和释放。对于Java程序员来说,一个对象的内存分配是在虚拟机的自动内存分配机制的帮助下,不再需要为每一个new操作去写配对的delete/free...
2019-08-26 10:07:58 365
原创 HashMap的底层数据结构和源码分析
HashMap 的数据结构HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。数组是用来确定桶的位置,利用元素的key的hash值对数组长度取模得到。链表是用来解决hash冲突问题,当出现hash值一样的情形,就在数组上的对应位置形成一条链表。从上图中可以看出,HashMap 底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个 HashMap 的时候,就会...
2019-08-21 15:59:32 424
原创 git常用命令
创建一个仓库mkdir nnn //创建仓库git init //初始化仓库(要在目录内)touch readme.txt //创建文件cat readme.txt 查看文件git status //查看仓库状态git add readme.txt //添加文件至暂存区git commit -m "hhh" //把暂存区的提交到仓库 "hhh"是备注(可以有多次add,但只...
2019-08-16 16:47:29 104
原创 8. 排序(上):为什么插入排序比冒泡排序更受欢迎
一、几种经典排序算法及其时间复杂度级别二、如何分析一个排序算法?1.学习排序算法的思路?明确原理、掌握实现以及分析性能。2.如何分析排序算法性能?从执行效率、内存消耗以及稳定性3个方面分析排序算法的性能。3.执行效率:从以下3个方面来衡量1)最好情况、最坏情况、平均情况时间复杂度2)时间复杂度的系数、常数、低阶:排序的数据量比较小时考虑3)比较次数和交换(或移动)次数4.内存消耗:...
2019-08-06 19:20:20 250
原创 7. 递归:如何用三行代码找到“最终推荐人”
一、什么是递归?1.递归是一种非常高效、简洁的编码技巧,一种应用非常广泛的算法,比如DFS深度优先搜索、前中后序二叉树遍历等都是使用递归。2.方法或函数调用自身的方式称为递归调用,调用称为递,返回称为归。3.基本上,所有的递归问题都可以用递推公式来表示,比如f(n) = f(n-1) + 1;f(n) = f(n-1) + f(n-2);f(n)=n*f(n-1);二、为什么使用递归...
2019-08-02 15:44:17 162
原创 6. 队列:队列在线程池等有限资源池中的应用
一、什么是队列?1.先进者先出,这就是典型的“队列”结构。2.支持两个操作:入队enqueue(),放一个数据到队尾;出队dequeue(),从队头取一个元素。3.所以,和栈一样,队列也是一种操作受限的线性表。二、如何实现队列?1.队列APIpublic interface Queue<T> {public void enqueue(T item); //入队publi...
2019-08-02 10:35:18 103
原创 5. 栈:如何实现浏览器的前进和后退功能
一、什么是栈?1.后进者先出,先进者后出,这就是典型的“栈”结构。2.从栈的操作特性来看,是一种“操作受限”的线性表,只允许在端插入和删除数据。二、为什么需要栈?1.栈是一种操作受限的数据结构,其操作特性用数组和链表均可实现。2.但,任何数据结构都是对特定应用场景的抽象,数组和链表虽然使用起来更加灵活,但却暴露了几乎所有的操作,难免会引发错误操作的风险。3.所以,当某个数据集合只涉及在...
2019-08-01 10:13:15 182
原创 4. 链表(下):如何优雅的写出链表代码?6大学习技巧
一、理解指针或引用的含义1.含义:将某个变量(对象)赋值给指针(引用),实际上就是就是将这个变量(对象)的地址赋值给指针(引用)。2.示例:p—>next = q; 表示p节点的后继指针存储了q节点的内存地址。p—>next = p—>next—>next; 表示p节点的后继指针存储了p节点的下下个节点的内存地址。二、警惕指针丢失和内存泄漏(单链表)1.插入节点...
2019-07-31 10:02:24 113
原创 3. 链表(上) : 如何实现LRU缓存淘汰算法
链表底层的存储结构:一、什么是链表?1.和数组一样,链表也是一种线性表。2.从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构。3.链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next。二、为什么使用链表?即链表的特点1.插入、删除数据效率高O(1)级别(只需更改指针指向...
2019-07-30 20:36:09 126
原创 2. 数组:为什么很多编程语⾔中数组都从0开始编号
数组(Array) 是⼀种线性表数据结构。 它⽤⼀组连续的内存空间, 来存储⼀组具有相同类型的数据。线性表(Linear List):线性表就是数据排成像⼀条线⼀样的结构。 每个线性表上的数据最多只有前和后两个⽅向。 其实除了数组, 链表、 队列、 栈等也是线性表结构。⾮线性表, ⽐如⼆叉树、 堆、 图等。 之所以叫⾮线性, 是因为, 在⾮线性表中, 数据之间并不是简单的前后关系。连续的内存空间和...
2019-07-30 19:53:46 149
原创 解决maven 在intellij IDEA 下载依赖包速度慢的问题
右键项目选中maven选项,然后选择 “create settings.xml”,然后把如下代码粘贴进去就可以了。重启IDE。<?xml version="1.0" encoding="UTF-8"?><settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://w...
2019-07-18 11:40:47 5617 3
转载 javabean
一、 javabean 是什么?Bean的中文含义是“豆子”,顾名思义,JavaBean是指一段特殊的Java类,就是有默然构造方法,只有get,set的方法的java类的对象.专业点解释是:JavaBean定义了一组规则JavaBean就是遵循此规则的平常的Java对象满足这三个条件:1.执行java.io.Serializable 接口2.提供无参数的构造器3.提供...
2019-07-12 13:45:09 160
原创 Spring-1对Spring的IoC和DI的理解
1、 认识 Spring 框架Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (Inversion of Control,控制反转) 和 AOP(Aspect Oriented Programming,面向切面编程)。1.1 什么是 Spring:Spring 是一个轻量级的 DI / IoC 和 AOP 容器的开源框架,来源于...
2019-07-11 13:49:22 335 1
转载 TCP的三次握手与四次挥手
转载原文:https://blog.csdn.net/qq_38950316/article/details/81087809 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。 确认号ack:占4...
2019-06-28 20:20:00 95
转载 OSI七层协议
HTTP协议对应于应用层,TCP协议对应于传输层,IP协议对应于网络层,HTTP协议是基于TCP连接的,三者本质上没有可比性。 TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议HTTP连接...
2019-06-16 10:53:59 1834
原创 安装jdk配置完环境变量后,java和java -version都可以成功,javac失败
如果确定环境变量配置的没问题,javac.exe也存在,尝试以下:请把path中%JAVA_HOME%\bin写到最前面,应该是ORACLE影响了
2019-06-09 11:10:36 3608 2
原创 用HashMap求最长子串
HashMap的底层数据结构和源码分析见https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/collection/HashMap.md用HashMap实现滑动窗口,求一个字符串中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc"...
2019-05-24 11:07:55 285
原创 求组合数:求n个数(1...n)中k个数的组合
如:combination(5,3)要求输出:543,542,541,532,531,521,432,431,421,321递归,当k等于1的时候进行输出,当第一个数选的5,则从剩下的4321中选2个数,即combination(4,2) 第二个数选的4,则从剩下的321中选1个数,即combination(3,1),输出543,542,541 第二个数选的3,则从...
2019-05-21 21:28:19 1665
原创 A. Letter Combinations of a Phone Number
Given a string containing digits from2-9inclusive, return all possible letter combinations that the number could represent.A mapping of digit to letters (just like on the telephone buttons) is giv...
2019-05-21 11:04:44 116
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人