自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Django基本知识

Django基本知识01. 什么是DjangoDjango是一个开放源代码的Web应用框架,由Python写成。采用了MVT的软件设计模式,即模型Model,视图View和模板Template。Django的特点如下所示:02 入门仪式:Hello world1、新建Django项目新建一个Django项目,名称为mysitedjango-admin startproject mysite相关的文件目录结构如下所示:接着,在urls.py中编写 Hello, world 的请求响应

2020-09-08 21:10:58 468

原创 面试时如何回答equals和hashcode方法

equals和hashcode1、题目为什么重写equals方法时需要重写hashcode方法?2、解答原因有两点:提高查询的效率,使用hashcode方法提前校验,可以减少equals比较的次数保证同一个对象,避免出现equals相等而hashcode不相等的情况第一点解释​ hash类存储结构(HashSet、HashMap等等)是不能出现重复元素的,所以添加元素时会有重复...

2020-05-08 10:57:22 135

原创 剑指offer之面试题39:数组中出现超过次数一半的数字

数组中出现次数超过一半的数字1、题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如,输入长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。输入参数:整型数组number[],数组长度length输出参数:返回出现次数超过length一半的数字,或者是0(即输入参数错误)2、解题解这道...

2020-04-27 18:09:08 167

原创 剑指offer之面试题11:旋转数组的最小数字

旋转数组的最小数字1、题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如:数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。输入参数:一维数组numbers,数组长度length输出参数:最小元素的值,或者抛出 “传入参数错误” 的异常2、解题解这道题的关键...

2020-04-25 22:40:31 121

原创 剑指offer之面试题4:二维数组的查找

二维数组中的查找1、题目在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。输入参数:一个二维数组matrix,数组的行数rows,数组的列数columns,寻找的整数number输出参数:返回 true 或 false2、解题解这道题的关键在于每次都选取右上角的元素。在...

2020-04-25 18:13:16 122

原创 剑指offer之面试题3(2):不修改数组找出重复的数字

不修改数组找出重复的数字1、题目在一个长度为 n+1 的数组里的所有数字都在 1~n 的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为 8 的数组{2, 3, 5, 4, 3, 2, 6, 7},那么对应的输出是重复的数字 2 或 3。输入参数:一个整数数组numbers,数组长度length输出参数:-1(代表输入参数...

2020-04-25 14:03:14 107

原创 剑指offer之面试题3:数组中重复的数字

数组中重复的数字1、题目在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次,请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。输入参数:一个整数数组numbers,数组长度length,一个用于指向数组重复数字的指针du...

2020-04-25 13:50:55 134 1

原创 剑指offer之面试题52:两个链表的第一个公共节点

两个链表的第一个公共节点1、题目输入两个单向链表,找出它们的第一个公共节点。输入参数:两个链表的头指针输出结果:指向第一个公共节点的指针2、解题这道题的关键在于搞清楚两个链表在存在公共节点时的结构解这道题有三种方法。法一:蛮力法每次从链表1拿出一个节点去链表2中寻找第一个和其一样的节点时间复杂度:O(mn)法二:使用栈将两个链表的节点放入两个栈里接下来比较两个栈...

2020-04-13 17:04:34 132

原创 剑指offer之面试题36:二叉搜索树与双向链表

二叉搜索树与双向链表1、题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建新的节点,只能调整树中节点指针的指向,二叉树的节点定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};...

2020-04-13 17:03:47 63

原创 剑指offer之面试题35:复杂链表的复制

复杂链表的复制1、题目请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表。在复杂链表中,每个节点除了有一个m_pNext指针指向下一个节点,还有一个m_pSibling指针指向链表中的任意节点或者nullptr。节点的C++定义如下:struct ComplexListNode{ int ...

2020-04-13 17:02:56 110

原创 剑指offer之面试题25:合并两个排序的链表

合并两个排序的链表1、题目输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。输入参数:两个链表的头指针pHead1,pHead2输出节点:合并后链表的头指针pMergedHead2、解题这道题的关键在于想清楚合并链表的过程首先要考虑两个链表是否是空指针的问题,若其中一个链表为空,则返回另一个链表即可。其次链表合并的核心在于每次比较两个链表的头节点,选取值较小...

2020-04-13 17:01:45 136

原创 剑指offer之面试题24:反转链表

反转链表1、题目定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。链表是单向链表。输入参数:指向链表头节点的指针pHead输出结果:无2、解题解这道题的关键在于反转链表需要用到的三个指针与它们之间的逻辑因为需要反转链表,所以这三个指针是必须的:指向当前节点的指针pNode指向前一个节点的指针pPrev指向后一个节点的指针pNext在反转链表时的操作为...

2020-04-13 17:00:42 99

原创 剑指offer之面试题23:链表中环的入口节点

链表中环的入口节点1、题目如果个链表中包含环,如何找出环的入口节点?输入参数:一个链表的头指针pHead输出结果:链表中环的入口节点,或者是空指针2、解题这道题的关键在于链表中环的判断,以及在环存在前提下入口节点的找法首先,如何判断链表中存在一个环?​ 定义快慢指针,快指针每次走两步,慢指针每次走一步,若快指针出现走到了链表的末尾nullptr的情况,则说 明链表中不存在环,否则一...

2020-04-13 16:59:58 122

原创 剑指offer之面试题22:链表中倒数第k个节点

链表中倒数第K个节点1、题目输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个节点,该链表是单向链表,不存在指向前的指针。输入参数:一个指向链表头节点的指针pHead,一个无符号整数k输出结果:返回倒数第k个节点,或者返回空指针2、解题这道题的关键在于快慢指针的使用。普通思路是遍历两遍链表,第一遍获得节点个数n,然后获得倒数...

2020-04-13 16:58:45 188

原创 剑指offer之面试题18(2):删除链表重复的节点

删除链表重复的节点1、题目在一个排序的链表中,如何删除重复的节点?例如:删除前:1 -> 2 -> 3 -> 3-> 4 -> 4 -> 5删除后:1 -> 2 -> 5输入参数:链表的头指针输出结果:无2、解题这道题的关键在于理清 找到节点—>删除节点—>链接链表 的逻辑。因为当前链表是已排序的链表,所以可以根据前后节...

2020-04-13 16:57:57 95

原创 剑指offer之面试题18:删除链表的节点

删除链表的节点1、题目给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。输入参数:单向链表的头指针pHead,节点指针pToBeDeleted输出结果:无2、解题这道题的关键在于如何在时间复杂度为O(1)的情况下删除指定节点。因此,我们可以想到覆盖的方法:先获得要删除节点的下一节点,将下一节点的值赋值给删除节点,再将删除节点的指针指向下下个节点,最后删除下一...

2020-04-13 16:57:05 112

原创 剑指offer之面试题6:从尾到头打印链表

从尾到头打印链表1、题目输入一个链表的头节点,从尾到头反过来打印出每个节点的值。输入参数:链表的头节点输出结果:在屏幕上打印每个节点的值2、解题解这道题的关键在于 “后进先出” 的思想,因此这道题可以用栈或递归的方式解决。思路一:栈遍历链表,将节点进栈获得链表顶部的节点,打印节点值依次出栈,直到栈为空思路二:递归若当前节点不为空且下一节点不为空,不断递归下一个节点,直...

2020-04-13 16:56:15 68

原创 剑指offer之面试题55(2):平衡二叉树

平衡二叉树1、题目输入一颗二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中的任意节点的左、右子树的深度相差不超过1,那么它就是一颗平衡二叉树。输入参数:二叉树的根节点,指向二叉树深度的int型指针输出结果:true 或者 false2、解题这道题的关键在于如何在只遍历一次二叉树的情况下,对是否是平衡二叉树进行判定由于平衡二叉树取决于左右子树的深度之差,所以我们想到使用后序遍历...

2020-04-13 16:54:40 101

原创 剑指offer之面试题55:二叉树的深度

二叉树的深度1、题目输入一颗二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点形成树的一条路径,最长路径的长度为树的深度。输入参数:二叉树根节点输出结果:二叉树的深度2、解题这道题的关键就在于二叉树深度的判定,当一棵二叉树既有左子树,又有右子树时,该树的深度就是其左、右子树深度的较大值再加1,而当节点为空时,则代表到达了二叉树的叶子结点,代表此时的深度为0,然后依次向上递加。...

2020-04-13 16:51:50 105

原创 剑指offer之面试题54:二叉搜索树的第k大节点

二叉搜索树的第k大节点1、题目给定一颗二叉搜索树,请找出其中第k大的节点。**输入参数:**二叉搜索树的根节点、非负整数k**输出结果:**二叉搜索树的某个节点,或者是空指针2、解题这道题的关键在于知晓二叉搜索树的中序遍历方法,即通过中序遍历二叉树,便可以得到一个递增排序的遍历序列,这样就能很方便的得到第k大节点的值。解题的具体步骤为:鲁棒性检查,而后调用递归函数递归函数内...

2020-04-13 16:49:37 122

原创 剑指offer之面试题34:二叉树中和为某一值的路径

二叉树中和为某一值的路径1、题目输入一颗二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。二叉树节点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};...

2020-04-13 16:48:58 105

原创 剑指offer之面试题33:二叉搜索树的后序遍历序列

二叉搜索树的后序遍历序列1、题目输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入数组的任意两个数字都不相同。输入参数:一个整数数组,数组长度输出结果:true 或者 false2、解题这道题的关键在于在只给定一个序列的前提下,如何确定左右子树之间的界限。由于题目的要求是二叉搜索树,所以这个界限的划分很简单,小于根节点的元...

2020-04-13 16:46:42 129

原创 剑指offer之面试题26:树的子结构

树的子结构1、题目输入两颗二叉树A和B,判断B是不是A的子结构。二叉树节点的定义如下:struct BinaryTreeNode{ double m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};输入参数:二叉树根节点1,二叉树根节点2输出结果:true 或 false2、解题此题的关键主要在于两个...

2020-04-13 16:45:59 59

原创 剑指offer之面试题8:二叉树的下一节点

二叉树的下一节点1、题目给定一颗二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。输入参数:二叉树的一个节点输出参数:二叉树的下一个节点2、解题这道题的关键在于不同节点下一个节点的寻找方式,这里可分为两个大方向,三种寻找方式如果该节点右节点存在,那么下一个节点是右子树的最左节点如果该节点右节点不存在...

2020-04-13 16:43:22 70

原创 剑指offer之面试题7:重建二叉树

重建二叉树1、题目输入某二叉树的前序遍历和中序遍历序列的结果,请重建该二叉树,假设输入的前序遍历和中序遍历的结果中都不含重复的数字。前序遍历序列:{1,2,4,7,3,5,6,8},中序遍历序列:{4,7,2,1,5,3,8,6}输入参数:前序遍历序列、中序遍历序列、序列的长度输出结果:二叉树的根节点指针,或者为空2、解题首先,一个二叉树节点的定义如下,包括数据域和两个指向孩子节点的指...

2020-04-13 16:41:29 74

原创 操作系统看这一篇就够了(万字长文)

操作系统(注:文章末尾附有参考文章以及部分内容的具体细节)目录操作系统一、概述二、计算机硬件1、CPU1、主要任务2、CPU的执行周期3、CPU的构成4、寄存器5、现代CPU的设计6、CPU的两种模式7、状态的切换2、多线程和多核芯片基本概念多线程和超线程3、内存1、寄存器2、高速缓存L1CacheL2CacheL3Cache时钟周期3、主存4、磁盘普通磁盘固态硬盘(SSD)虚拟内存MMU4、...

2020-03-18 10:38:36 690 1

原创 深入Java类加载器

深入Java类加载器1. 类加载器的作用​ 将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成 一个代表这个类的java.lang.Class对象,作为 方法区类数据的访问入口。​ 类加载器除了用于加载类,也是安全的基本屏障类缓存​ 标准的Java SE类加载器可以按要求查找类,但一旦某个类被加载到类加载器中,它将维持加载(缓存)...

2020-02-12 22:39:17 61

原创 JVM运行和类加载全过程

JVM运行和类加载全过程研究的作用有助于了解JVM运行过程更深入了解JVM动态性,提高程序的灵活性定义​ 类加载全过程,就是JVM把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成 JVM可以直接使用的Java类型的过程过程​ (1) 加载​ 将class文件中的字节码内容加载到内存中,并将静态数据转化成方法区中的运行时数据结构,在堆中生成一个代表这个类...

2020-02-12 22:38:14 106

原创 脚本引擎执行javascript代码

脚本引擎执行javascript代码1. 概述​ 有的时候我们需要java语言和其他脚本语言进行交互,比如js,python等语言,这时我们就应该通过java的脚本引擎来进行操作,可以将其视为一个供二者进行交互的第三方平台。2. 应用​ 首先我们一定要先获得属于javascript的脚本引擎对象,方可进行下一步操作ScriptEngineManager sem = new ScriptE...

2020-02-11 22:00:45 386

原创 反射

反射1. 定义​ 反射就像类的一张图纸​ 一个类被加载后,JVM会创建一个对应该类的Class对象,存放类的结构信息2. 使用获得图纸(类的Class对象)的三种方法1. Class.forname("package_name+Class+name");2. obj.getClass();3. Type.class​​ 通过反射分别对构造器、方法、属性进行动态操作构造器​...

2020-02-11 21:59:54 64

原创 动态编译

动态编译1. 应用场景​ 可以编写一个在线评测系统,浏览器端写Java代码,上传到服务器进行编译和运行​ 服务器动态加载某些类文件进行编译2. 两种做法​ (1) 通过JavaCompiler动态编译​ (2) 通过Runtime调用javac,启动新的进程去操作​ 下面对方法一进行讲解​ 假设有一个已经写好的.java文件存放在c:/myjava/中JavaCompiler c...

2020-02-11 21:59:20 101

原创 javassist字节码操作

javassist字节码操作1. 概述​ java动态性的两种常见实现方式​ — 字节码操作​ — 反射​ 运行时操作字节码可以实现如下功能​ — 动态生成新的类​ — 动态改变某个类的结构​ 优势​ — 比反射开销小、性能高 (javassist高于反射,低于ASM)2. 应用常用的字节码操作类库​ BCEL ASM CGLIB Javassist​ Ja...

2020-02-11 21:55:45 268

空空如也

空空如也

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

TA关注的人

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