基础算法—贪心篇 什么是贪心贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 这么说有点抽象,来举一个例子: 例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿? 指定每次拿最大的,最终结果就是拿走最大数额的钱。 每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。 贪心的套路(什么时候用贪心)说实话贪心算法并没有固定的套路。 所以唯一的难点就是如何通过局部最优,推出整体最优。 贪 2022-11-25 基础算法 #算法
基础算法—回溯篇 什么是回溯法回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 回溯是递归的副产品,只要有递归就会有回溯。 回溯法的效率回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。 回溯法解决的问题一般可以解决如下几种问题: 组合问题:N个数里面按一定规则找出k个数的集合 切割问题:一个字符串按一定规则有几种切割方式 子集问 2022-11-24 基础算法 #基础算法
JUC并发编程-Java内存模型之MM和volatile 先从大厂面试题开始 你知道什么是Java内存模型JMM吗? JMM与volatile它们两个之间的关系?(下一章详细讲解) JMM有哪些特性or它的三大特性是什么? 为什么要有JMM,它为什么出现?作用和功能是什么? happens-before先行发生原则你有了解过吗? 计算机硬件存储体系计算机存储结构,从本地磁盘到主存到CPU缓存,也就是从硬盘到内存,到CPU。一般对应的程序的操作就是从数据 2022-11-23 JUC并发编程 #八股文
JUC并发编程-LockSupport与线程中断 什么是中断机制? 首先 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。所以,Thread.stop, Thread.suspend, Thread.resume 都已经被废弃了。 其次 在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。 因此,Java提供了一种用于停止线程的协商机制——中断。 中断只是一种协作协商机制,Java没有 2022-11-22 JUC并发编程 #八股文
JUC并发编程-Java锁 乐观锁和悲观锁悲观锁 悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。 悲观锁的实现方式 synchronized关键字 Lock的实现类都是悲观锁 适合写操作多的场景,先加锁可以保证写操作时数据正确。显示的锁定之后再操作同步资源。 12345678910111213141516//=============悲观锁的调用方式p 2022-11-21 JUC并发编程 #八股文
JUC并发编程-CompletableFuture Future和Callable接口 Future接口(FutureTask实现类)定义了操作异步任务执行一些方法,如获取异步任务的执行结果、取消任务的执行、判断任务是否被取消、判断任务执行是否完毕等。(异步:可以被叫停,可以被取消) 一句话:Future接口可以为主线程开一个分支任务,专门为主线程处理耗时和费力的复杂业务。 eg.比如主线程让一个子线程去执行任务,子线程可能比较耗时,启动子线 2022-11-20 JUC并发编程 #八股文
JUC并发编程-线程基础知识 并发相关Java包 涉及到的包内容 java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks start线程解读初始程序 12345public static void main(String[] args) { Thread t1 = new Thread(() -> 2022-11-19 JUC并发编程 #八股文
JVM中篇字节码与类的加载-类的加载器 类的加载器类加载器(ClassLoader)是JVM执行类加载机制的前提。 ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载的,ClassLoader负责通过各种方式将Class信息的二进制数据流读入JVM内部,转换为一个与目标类对应的java.lang.Class对象实例。然后交给Java虚拟机进行链接、初始化等操作。因此,ClassLoader在 2022-11-18 JVM中篇字节码与类的加载 #八股文
JVM中篇字节码与类的加载-类的加载过程(类的生命周期) 类的加载过程(类的生命周期)详解概述在Java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。 按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括如下7个阶段: 从程序中类的使用过程看 大厂面试题蚂蚁金服: 描述一下JVM加载Class文件的原理机制? JVM加载Class文件的原理机 2022-11-17 JVM中篇字节码与类的加载 #八股文
JVM上篇内存与垃圾回收-垃圾回收相关概念及回收器 垃圾回收相关概念System.gc()的理解 在默认情况下,通过system.gc()或者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而System.gc() 调用附带一个免责声明,无法保证对垃圾收集器的调用。(不能确保立即生效) JVM实现者可以通过System.gc() 调用来决定JVM的 2022-11-16 JVM上篇内存与垃圾回收 #八股文