自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hestyle的博客

hestyle便涨红了脸,额上的青筋条条绽出,争辩道,“Ctrl+C+V不能算抄…Ctrl+C+V!…程序员的事,能算抄么?”接连便是难懂的话,什么“移花接木”,什么“借鉴”之类,引得众人都哄笑起来。

  • 博客(1066)
  • 收藏
  • 关注

原创 Java容器之PriorityQueue源码分析(附堆的调整图解)

  PriorityQueue容器,也就是我们日常所称的优先队列,也有小伙伴称堆。优先队列的作用是将队列中的元素最小值放到堆顶(默认小顶堆,最小的元素在顶端,你也可以修改comparator,使之变成大顶堆,最大的元素在顶端)。每当我们插入、删除元素,都是从堆顶进行,优先队列会自动重新调整堆,将最小的元素值调整到堆顶。  本篇博客将从源码的角度并结合相应的图解,对Java中的PriorityQu...

2020-04-27 11:05:52 894

原创 Java容器之HashSet、LinkedHashSet、TreeSet源码分析(不敢称东半球最好,只称东半球最好理解)

  前面分析了Java中的常见五大map容器,Java中的Set容器是对Map容器的封装,今天就结合源码分析一下Java中常见的三大Set容器。注明:以下源码分析都是基于jdk 1.8.0_221温馨提示:\color{red}温馨提示:温馨提示:请先阅读一下我之前写的HashMap、LinkedHashMap、TreeMap源码分析博客,Java中的Set就是把Map改了个名字,这里不会再...

2020-04-24 11:44:37 468

原创 Java中的常见五种map容器源码分析总结(HashMap、Hashtable、ConcurrentHashMap、LinkedHashMap、TreeMap)

  断断续续写了半个月,今天终于把TreeMap容器中的红黑树搞定了,现在来水一篇又快又短的Java Map容器总结博客 ????????。注明:本篇博客不会涉及容器的源码什么的,主要是总结各个map容器的底层实现特点、主要运用场景。如果你需要详细了解更多关于Java中的map容器实现的细节,文末会提供我前面写的源码分析的博客链接,欢迎阅读。Java中的常见五种map容器源码分析总结目录一、`Java`中...

2020-04-23 22:08:21 1051

原创 Java容器之TreeMap源码分析(附红黑树调整图解,全网最详细、图解最全,不服来辩)

  在之前分析HashMap、ConcurrentHashMap容器的源码实现时,反复提及到JDK 1.8的版本中,HashMap、ConcurrentHashMap两个容器都引入了红黑树来解决hash冲突问题(在之前的版本只有链表,现在hash桶的实现可有链表、红黑树进行转换),但是JDK中的红黑树到底是如何实现的呢?Java容器之TreeMap源码分析目录一、`TreeMap`容器概述二、`...

2020-04-23 16:45:42 559

原创 数据结构之红黑树(还在为看不懂红黑树而烦恼吗?别再翻了,此篇足矣~)

  红黑树,非常经典的数据结构,主要用于一些容器中,比如C++语言中的map、Java语言中的TreeMap(后面会写源码分析博客)。红黑树能保持高效的查找,一般取时间复杂度为O(log2n),由于高效,这个结构也比较复杂,所以很多人(包括我自己)都一直搞不懂红黑树到底是怎么插入、删除节点的。此篇博客,博主将图文并茂的一层一层揭开红黑树神秘面纱。  温馨提示:\color{red}温馨提示:温馨...

2020-04-18 17:31:23 1386

原创 Java容器之LinkedHashMap源码分析(看看确定不点进来?进来真不点?)

  前面几篇博客Java容器之Hashtable源码分析、Java容器之HashMap源码分析分别分析了HashMap、Hashtable的源码,此篇博客我们分析一下LinkedHashMap容器,看看它又有什么花样。注明:以下源码分析都是基于jdk 1.8.0_221LinkedHashMap源码分析目录一、`LinkedHashMap`容器概述(==一图以蔽之==)1、`LinkedHa...

2020-04-16 17:49:42 1192 4

原创 Java容器之ConcurrentHashMap源码分析(JDK 1.7与JDK 1.8对比)

  在前面两篇博客 Java容器之HashMap源码分析、Java容器之Hashtable源码分析分别对JDK1.8中的HashMap、Hashtable的源码进行一些分析,在本篇博客将对ConcurrentHashMap容器的源码进行一些分析。申明:在前两篇博客介绍了两个容器的增、删、改、查相关的API,并且给源码加上了中文注释,在本篇博客将只介绍一些关键的API,比如hash值的计算,put...

2020-04-14 09:39:22 496

原创 Java容器之Hashtable源码分析(关于Hashtable的这些细节你可能还不知道)

  在上一篇博客 Java容器之HashMap源码分析(妈妈再也不用担心我不懂HashMap了) 从源码层次分析了HashMap容器的底层实现,在本篇博客将继续从源码层次分析Hashtable的底层实现。  注明:以下源码分析都是基于jdk 1.8.0_221版本Hashtable源码分析目录一、`Hashtable`容器概述(==一图以蔽之==)二、`Hashtable`类的属性三、`Ha...

2020-04-11 12:02:42 406 3

原创 Java容器之HashMap源码分析(妈妈再也不用担心我不懂HashMap了)

  最近面试被问HashMap容器的实现原理,答的一塌糊涂。。。虽说一直念叨着说要看看Java容器的源码,但总是被耽搁了,今天终于静下心来看了????‍♂️。  注明:以下源码分析都是基于jdk 1.8.0_221版本HashMap源码分析目录一、`HashMap`概述(==一图以蔽之==)二、`HashMap`类的属性1、`HashMap`类静态属性2、`HashMap`非类静态属性三、`Has...

2020-04-10 12:22:01 712 1

原创 数据结构之二叉树、AVL树、红黑树、Trie树、B树、B+树、B*树浅析

  树,作为五大经典数据结构之一,有许多运用场景,比如MySQL数据库的B+树(数据结构的重要性不用强调了吧)。下面将对二叉树、红黑树、B树、B+树等树结构进行一些概念区分与总结,此篇博客适合新手、有一定数据结构基础的小伙伴。一、树的划分  根据子节点的个数可以划分成N叉树(一般N ≥ 2),N叉树拥有的特征是每个节点至多有N个子节点。比如,N = 2时,称为二叉树,每个节点至多只有2个节点...

2020-04-07 09:34:30 1193 4

原创 字符串匹配KMP算法详解(这可能是东半球最好理解的解释)

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。累赘一下,KMP算法是字符串匹配算法,比如搜索字符串“abcdefg”中是否含有子串“bcd”。下面将详细介绍KMP算法实现细节,绝对是最详细的细节介绍!!!1、KMP算法引入假设给你两个字符串strOne=“abababaa...

2020-03-15 23:27:29 2254 4

原创 MySQL从入门到精通、SQL实战题解

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是...

2019-08-19 14:32:07 2366 4

原创 iOS 创建第一个项目(附纯代码编写界面配置方法以及上下黑边无法全屏解决方法)

  由于这些年出现“跨端”、“大前端”的概念,出现了比如React、React Native、flutter等跨端技术,"客三消"的说法很多人提,所谓“客户端三年必死”、“客户端劝退”。  博主最近从后端转到了iOS移动端,一方面是由于博主比较喜欢移动端,因为移动端的代码有交互性、可见性,并且比前端有趣一些,因为移动端编码还有设计模式等一些其他的东西;另一方面是由于之前实习的岗位就是iOS移动端开发。  现在学移动端确实有点像“49年入国军”,蛋是,自己喜欢就好。闲话少叙,开始写博客吧。1、第一个iO

2020-12-24 17:58:04 1906 2

原创 Android litepal报错org.litepal.exceptions.InvalidAttributesException: dbname is empty or not defined i

一、报错场景二、报错信息E/AndroidRuntime: FATAL EXCEPTION: main Process: cn.hestyle.coolweather, PID: 26313 java.lang.RuntimeException: Unable to start activity ComponentInfo{cn.hestyle.coolweather/cn.hestyle.coolweather.MainActivity}: org.litepal.exceptions

2020-10-12 11:47:24 1927 1

原创 Ubuntu18.04安装SSH工具(附SSH无法登录root账号解决方法)

  最近又在折腾Ubuntu,来水一篇ssh安装博文。。。Ubuntu18.04安装SSH工具目录一、`SSH`概述二、安装`SSH`1、安装`SSH`服务端2、安装`SSH`客户端三、`SSH`基本使用1、访问其它电脑2、退出远程登录3、修改`SSH`登录密码4、`root`账号登录`SSH`失败一、SSH概述  SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远

2020-06-22 23:37:10 4168

原创 设计模式之单例模式(静态属性可称为单例思想的特殊运用?)

  最近看了看程杰前辈的《大话设计模式》,主要是上次面试被问设计模式,答的很菜。。。经过一段时间的沉淀,现在来谈谈我对其单例模式的理解。设计模式之单例模式一、`单例模式`1、定义2、使用场景二、举例(静态属性)三、两种实现方式(Java)1、`饿汉式`2、`懒汉式`四、总结一、单例模式1、定义  单例模式(Singleton),保证一个类仅有一个实例,并且提供全局访问该实例的接口。简单的说,既要保证该类只有一个实例,也要保证全局访问的就是这个唯一的实例。2、使用场景  那么肯定有小伙伴会问,单例

2020-05-30 10:59:43 834

原创 逆向工具之脱壳神器反射大师(附脱壳环境搭建、脱壳实战)

  相信点击进入这篇博客的小伙伴都知道并且搞过App逆向,不过有时候会遇到各种加壳的App,不让你反编译。但是道高一尺,魔高一丈,有正向加密,就有逆向解密。今天博主带大家搭建脱壳环境,并且手动脱一个加了某60的壳的App。闲话少叙,直接开始吧!逆向工具之搭建脱壳环境与脱壳实战目录一、`Android`系统二、安装Xposed框架1、下载`Xposed Installer`2、安装`Xposed Installer`三、安装`反射大师`1、下载`反射大师`2、安装`ReflectMaster`并授权四、脱壳

2020-05-22 12:24:16 37193 21

原创 逆向工具之unidbg(在pc端模拟执行so文件中的函数)

  昨天在逆向某App的时候,发现有个加密工具类中的native方法是用C语言编写的,隐藏在so文件中。某大佬推荐逆向工具unidbg,能在pc端直接调用so文件中的函数,最终成功解决了问题。逆向工具之unidbg目录一、`unidbg`引入二、`unidbg`概述三、`unidbg`使用姿势1、下载`unidbg`项目2、导入到IDEA中①、解压压缩包②、打开`IDEA`,导入解压的项目3、测试`unidbg`4、运行自己的`so`文件①、编写`EncryptUtilsJni`类②、参数说明③、执行结果

2020-05-21 21:21:51 21269 10

原创 字节跳动上海创新业务(2021届实习岗)三轮技术面总结

  博主于2020.4月初投了字节跳动 上海创新业务 后端开发实习岗(Java方向),并且在2020.5初拿到了客户端的实习offer,下面分享一下此次技术面试的相关内容。字节跳动上海创新业务(2021届实习生)三轮技术面总结一、笔试(2020.4.12)1、尽量使用`优惠卷`2、其它不记得了。。。二、第一轮面试(2020.4.21)三、第二轮面试(2020.4.24)四、第三轮面试(2020.4.29)五、总结未完待续...\color{red}未完待续...未完待续...一、笔试(2020.4.12

2020-05-13 21:55:21 2827 3

原创 Java字符串类之String、StringBuilder、StringBuffer源码分析与总结(你知道三者的区别?)

  前面分析完Java中常见容器的源码,此篇博客来分析下Java字符串相关的常用的三个类String、StringBuilder、StringBuffer。  相信看过我前面的Java容器源码分析博客的小伙伴会发现一个规律,我一般分析某个类的源码都是从属性、构造器(初始化方法)、常用的API三个方向下手,并不会也没有必要从源码的第一行读到最后一行。在此篇博客分析这三个类也同样使用这种技巧,如果你...

2020-04-29 22:35:15 486

原创 Java常用容器JDK源码分析总结(震惊,某博主竟然分析完了List、Queue、Map、Set接口的主要实现类)

  前些天花了12篇博客,分析了Java常用的容器的源码,主要是List、Queue、Map、Set等接口的实现类。此篇博客将对这些容器进行一个总结,但不会涉及源码,如果需要了解更多的细节,可以通过文中的链接阅读。Java常用容器JDK源码分析总结目录一、Java`容器`概述二、`List`容器1、`ArrayList`容器2、`Vector`容器3、`LinkedList`容器三、`Queue...

2020-04-27 16:49:45 631 4

原创 数据结构之堆(我猜,关于堆的这些维护细节,你肯定不清楚,不信你来看!)

  在前面分析了二叉搜索树、红黑树等众多树结构,今天博主给大家换个口味,深入分析一下堆的实现原理与维护规则。(堆其实与二叉树有点相似)数据结构之堆原理分析目录一、`堆`的概述1、什么是`堆`2、`堆`的划分3、`堆`的作用二、`堆`的底层实现三、`堆`的调整四、总结一、堆的概述1、什么是堆  堆,在日常生活中是一个量词,比如:一堆木头,下面这张图就是一堆木头,大家注意它的摆放规则,成金字塔...

2020-04-26 22:12:52 1129 1

原创 Java容器之ArrayDeque源码分析(你知道ArrayDeque维护循环数组的原理吗?)

  在上一篇博客 Java容器之LinkedList源码分析(LinkedList到底是单链表还是双链表?) 分析了LinkedList容器的源码,LinkedList实现了Deque接口,所以它不但是一个List容器,而且还是一个双端队列容器,并且是基于双链表实现。在此篇博客,将分析基于(循环)数组实现的双端队列容器——ArrayDeque。注明:以下源码分析都是基于jdk 1.8.0_22...

2020-04-26 11:09:54 539

原创 Java容器之LinkedList源码分析(LinkedList到底是单链表还是双链表?)

  前面在分析ArrayList、Vector容器的源码时,发现的底层实现原理都是维护一个数组,并且自动调整数组的大小(扩容、缩小),随机查找效率高,但是插入、删除操作效率低。在此篇博客中,博主将带领各位小伙伴也看看LinkedList容器的实现原理,它又有什么优势呢,它到底是单链表还是双链表实现呢?注明:以下源码分析都是基于jdk 1.8.0_221版本Java容器之LinkedList源...

2020-04-25 23:03:57 1196

原创 Java容器之Vector源码分析(Vector容器为啥线程安全呢?)

  在上一篇博客 Java容器之ArrayList源码分析(这应该是Java中最简单的容器吧) 从源码的角度分析了ArrayList容器,现在我们看下Vector容器又是什么。注明:以下源码分析都是基于jdk 1.8.0_221版本Java容器之Vector源码分析目录一、`Vector`容器概述二、`Vector`类中主要属性三、`Vector`类的构造器四、`查找`相关方法1、`get`...

2020-04-25 16:06:32 813

原创 Java容器之ArrayList源码分析(这应该是Java中最简单的容器吧)

  前面已经分析完Java的Map、Set容器源码,还剩List相关的容器,此篇博客将分析List接口的实现类之一ArrayList容器的源码实现。注明:以下源码分析都是基于jdk 1.8.0_221版本Java容器之ArrayList源码分析目录一、`ArrayList`容器概述二、`ArrayList`类主要属性三、`ArrayList`类构造器四、`查找`相关方法1、`get`方法2、...

2020-04-25 10:32:18 482 1

原创 数据结构之二叉搜索树详解(附C++代码实现查找、插入、删除操作)

  最近在分析分析红黑树时,感觉上来就挑最难的树结构之一进行分析,难度太大,所以特意写这篇二叉搜索树分析的博客作为铺垫。那么为啥挑二叉搜索树进行分析捏?其实红黑树也是一种更为复杂的二叉搜索树,建议阅读一下我的另外一篇博客 数据结构之二叉树、AVL树、红黑树、Trie树、B树、B+树、B*树浅析 。为了帮助大家理解红黑树,先写这篇博客分析二叉搜索树。下面将主要分析二叉搜索树的查找、插入、删除三种操作...

2020-04-18 11:21:27 1485 2

原创 剑指offer 反转链表

题目描述输入一个链表,反转链表后,输出新链表的表头。解题思路:\color{blue}解题思路:解题思路:非常简单的题,只是涉及到指针,有些不是很理解的指针的可能会比较懵,请看下图。第1步:将newPHead指向pHead,然后pHead后移,最后newPHead->next需要置空(翻转后链表的尾节点的next肯定要置NULL,否则产生了野指针)第2步:使用tempPtr指向p...

2020-03-19 22:16:39 340

原创 剑指offer 剪绳子

题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)输出描...

2020-03-17 21:11:56 402

原创 剑指offer 链表中倒数第k个结点

题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路:\color{blue}解题思路:解题思路:由于这是单链表,只能往一个方向遍历,因此第一想法可能是先遍历一遍链表,计算一下链表节点的总个数n,再从头开始走n - k个节点就是倒数k个节点。这种思路并没有啥毛病,不过有一种只访问一遍的思路。使用resPtr、kAfterPtr两个指针,kAfterPtr比resPtr先除法k个节点。...

2020-03-17 16:46:31 348

原创 剑指offer 调整数组顺序使奇数位于偶数前面

题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路:\color{blue}解题思路:解题思路:注意这道题要求我们把奇数、偶数分开,并且奇数的相对顺序、偶数的相对顺序不发生改变。 所以不能简单的交换偶数、奇数,只能将相邻的位置进行交换,算法的复杂度初步估计在O...

2020-03-15 17:25:45 381

原创 剑指offer 二进制中1的个数

题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路:\color{blue}解题思路:解题思路:这道题有一个公式 n &= (n - 1),也就是计算n的二进制表示1的个数,只要循环使用上面的公式,直到n为0。这个公式不知道就记住即可,下面用个示例简单验证一下公式的正确性,不是很严谨。假设 n = +127,则二进制形式为"0111 1111"(假设长...

2020-03-15 16:14:46 294

原创 剑指offer 变态跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路:\color{blue}解题思路:解题思路:在上一题 剑指offer 跳台阶,题目规定一步只能跨1阶或者2阶,最后得出递推式f(n) = f(n - 2) + f(n - 1)。而本题中,告诉我们一步可以跨[1,2,3, ..., n]阶,那么到达第n阶台阶总共有n...

2020-03-14 20:00:42 334

原创 剑指offer 跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解题思路:\color{blue}解题思路:解题思路:这道题其实也是一道斐波拉契尔数列应用的题,只是换了个马甲。到达第n阶台阶有两种可能,一种是从第n - 2阶台阶一步跨两阶到达n,另一种是从第n - 1阶台阶跨一阶到达n,因此得出递推公式f(n) = f(n - ...

2020-03-14 19:24:53 311

原创 剑指offer 斐波那契数列

题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39解题思路:\color{blue}解题思路:解题思路:斐波拉契尔数列,递推式f(n) = f(n - 2) + f(n - 1)。没啥好说的吧,直接递推计算即可。代码实现:\color{blue}代码实现:代码实现:class Solution {public:...

2020-03-13 16:10:25 357

原创 剑指offer 旋转数组的最小数字(变形二分搜索)

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解题思路:\color{blue}解题思路:解题思路:这道题让我们在一个特殊的数组中找最小值,这个特殊的数组...

2020-03-13 15:51:38 339

原创 剑指offer 用两个栈实现队列

题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路:\color{blue}解题思路:解题思路:稍微知道一点数据结构的道友都知道栈的特性是先进后出,队列的特性是先进先出。这道题只给我们两个栈,让我们去实现队列先进先出的功能。最直白的思路是每次push操作时,直接入栈statck1栈顶。每次pop操作时,把stack1中的元素依次出栈放入...

2020-03-12 21:45:34 345

原创 剑指offer 重建二叉树

题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路:\color{blue}解题思路:解题思路:与 LeetCode 从前序与中序遍历序列构造二叉树(递归+图解) 一毛一样。前序遍历:先根节...

2020-03-12 20:25:34 307

原创 剑指offer 从尾到头打印链表

题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。解题思路:\color{blue}解题思路:解题思路:由于题目给定的是单链表,所以无法从尾端 --> 起始端访问。但是我们可以借助栈实现元素的逆序输出,栈的特性是先进后出,第一步,我们访问一遍链表,将所有元素依次进栈。最后再将栈中的元素依次出栈,得到的逆序的链表节点元素。还有一种思路,就是获取到正向的序列后,直接...

2020-03-11 16:34:30 319

原创 剑指offer 替换空格

题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路:\color{blue}解题思路:解题思路:这道题可能会有一部分道友选择从左->右访问,依次替换空格,但是由于%20长度为3,所以每次需要把后面的字符右移2个位置。这种思路移动次数明显有些多余,其实可以一步移动到...

2020-03-11 16:21:34 305

空空如也

空空如也

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

TA关注的人

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