面试
weixin_44690103
这个作者很懒,什么都没留下…
展开
-
全排列-回溯算法的应用
从根遍历这棵树,记录路径上的数字,就是所有的全排列。我们把这棵树称为回溯算法啊的决策树。决策树上每个节点有【路径】和【选择】两个属性。路径:记录已经做过的选择;选择列表:表示当前可以做出的选择;结束条件:也就是到达决策树底层,就是遍历到树的底层,在这里就是选择列表为空的时候。回溯算法框架:result= []def backtrack(选择列表,路径): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: # 做选择原创 2020-12-24 17:31:48 · 119 阅读 · 1 评论 -
台阶变形
台阶问题:假设现在面前有一个n阶的台阶,一只青蛙每次可以爬1阶或者2阶台阶,那么这只青蛙有多少种不同的方法可以爬完这n阶台阶呢?注意,n为正整数。示例1:输入:2, 输出:2,解释: 一种是 1+1 , 一种是2示例2:输入:3,输出:3解释:1+1+1, 1+2, 2+1初始代码:class Solution {public int climbStairs(int n) {if (n < 1) {return 0;}if (n == 1) {return 1;}if原创 2020-12-24 15:25:33 · 121 阅读 · 0 评论 -
MYSQL优化
2.索引2.1索引概述官方定义:帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用数据,这样就可以在这些数据结构上实现高级查找算法,这种数据就是索引。2.2 索引优势劣势优势1)类似于书记的目录索引,提高数据检索的效率,降低数据库的io成本。2)通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。劣势:1)实际上索引也是一张表,该表中保存了主键与索引字段,并指向实体类的记录,所以索引列也是要占用空间的原创 2020-06-15 21:42:28 · 127 阅读 · 0 评论 -
求连续子数组的最大和
题目描述 给定一个数组 array[1, 4, -5, 9, 8, 3, -6],在这个数字中有多个子数组,子数组和最大的应该是:[9,8, 3],输出20,再比如数组为[1, -2, 3, 10, -4, 7, 2, -5],和最大的子数组为[3, 10, -4, 7,2],输出18。一、暴力解法(O(n^3))思路分析1、可以将给定数组的的所有子数组列出来,然后找到子数组和最大的...原创 2019-04-22 15:51:10 · 302 阅读 · 0 评论 -
Java抽象类和接口的区别?
含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为...原创 2019-04-23 10:23:43 · 64 阅读 · 0 评论 -
线程和进程
线程和进程各自有什么区别和优劣呢?进程是资源分配的最小单位,线程是程序执行的最小单位。进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。线程之间的通信更方便,同一进程下的线程共享全局变...原创 2019-04-23 10:52:56 · 66 阅读 · 0 评论 -
反射
java的Class类java中除了基本类型以外,其他类型都属于Class类型(String Object Runnable Exception)class/inteface的数据类型是Class每加载一个class,jvm就为其创建一个Class类型的实例,并关联起来jvm加载String 类:读取String.class文件 -> 为String类创建一个Class实例:Clas...原创 2019-04-16 16:18:59 · 70 阅读 · 0 评论 -
单向链表的环入口点
单向链表是否存在环快慢指针设链表起始点为A,环入口点为B,相遇与C点,AB长度为x,相遇点距离环入口点为m,BC长度为y,要求x.设环长为T快指针走过的路 x+m+k1T慢指针走过的路 x+m+k2T快指针走过的路是慢指针走过来的路的两倍:x+m+k1T = 2( x+m+k2T) 化简后得x+m=(k1-2k2)T有{x+m=(k1-2k2)T, m+y=T,消去m得x-y=(k...原创 2019-03-30 16:48:57 · 149 阅读 · 0 评论 -
volatile理解
线程间共享的变量需要使用volatile关键字声明的原因:这涉及到java内存模型: 在java虚拟机中java变量的值保存在主内存中,当线程访问一个变量的时候,会先获取一个副本,并保存在工作内存中,如果线程修改变量的值,虚拟机会在某一个时刻,将修改后的值回写到主内存,什么时候回写是不确定的,这样会导致一个线程更新了变量,另一个线程可能没有读取到最新的值。volatile关键字的目的是告诉虚拟机...原创 2019-04-10 11:39:26 · 64 阅读 · 0 评论 -
原子操作
对共享变量写入的时候,必须保证是原子操作原子操作是指不能被中断的一个或者一系列操作n = n + 1;//100编译器经过三个指令操作:ILOAD IAND ISTOREThrea1拿到n=100,执行完指令1ILOAD 后,cpu被Thread2占用,执行完ILOAD IAND ISTORE操作,n是101,此时Thread1继续执行 IAND ISTORE指令,n还是被赋值101,两个...原创 2019-04-10 11:39:50 · 86 阅读 · 0 评论