算法

JVM之GC算法

偶尔善良 提交于 2020-01-12 11:02:39
一、什么是GC JVM GC是:JVM的垃圾回收算法,现在的JVM基本采用分代收集,Young区收集平凡,Old区收集较少,Perm(永久代)基本不回收;JVM进行GC时大部分是对新生代的回收,少量的全局回收。 GC按照作用的区域分为: Minor GC:作用于新生代 Major GC(Full GC):作用于老年代,偶尔也会回收老年代和永久代。 二、如何定位垃圾 1、引用计数法 引用计数算法很简单,它实际上是通过在对象头中分配一个空间来保存该对象被引用的次数。如果该对象被其它对象引用,则它的引用计数加一,如果删除对该对象的引用,那么它的引用计数就减一,当该对象的引用计数为0时,那么该对象就会被标记为垃圾对象。 第10行 str引用了“ABC” 则“ABC”的计算器等于1。第11行str释放了该引用,所以“ABC”的计数器就减一。 优点:实现简单,判定高效,可以很好解决大部分场景的问题。 缺点: 很难解决对象之间相互循环引用的问题,当两个对象不再被访问时,因为相互引用对方,导致引用计数不为0; 开销较大,频繁且大量的引用变化,带来大量的额外运算;主流的JVM都没有选用引用计数算法来管理内存; 2、可达性分析法(根搜索算法) 可达性分析法:通过一系列"GC Roots"对象作为起始点,开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC

实习生招聘--CVTE笔试【1】

♀尐吖头ヾ 提交于 2020-01-12 09:17:03
1.说出你知道的文件系统,至少3种。 NTFS、FAT、exFAT、Ext、HFS 2.可重入函数的条件有哪些? 1.这个函数可以被中断 2.它除了使用自己栈上的变量以外不依赖于任何环境(包括static) 3.C语言中如何防止头文件的重复定义。 在前边加上关键字extern 4.以下说法正确的有(A,B) A.多个进程操作同一个文件时,应该要考虑到文件的一致性问题 B.可通过文件在不同进程间进行数据传递和共享 5.IP数据报分片的重组通常发生在() 目的主机上 6.引入多道程序技术以后,处理器的利用率() 大大提高 7.关于TCP协议以下说法正确的是:() TIME_WAIT状态会持续2个MSL 通讯双方主动关闭的一方进入TIME_WAIT状态 8.以下说法正确的是(A) A.在计算机中,运算器访问寄存器的速度是最快的 B.在等待中断的过程中,CPU不可以处理其他任务 C.同一段代码每次运行的时间一定是一样的 D.软中断是由软件触发的一种中断 9.一个栈的入栈序列为ABCDE,则不可能的出栈序列为(A、B) A.ECDBA B.DCEBA C.DECBA D.ABCDE 10.TCP首部报文信息中跟建立链接有关的是(B 、D) A.PSH B.SYN C.FIN D.ACK 11.已知图的邻接表如下所示,根据算法,则从节点0出发按广度优先遍历的节点序列是 © A.0 1 2 3

基于内容的推荐算法

家住魔仙堡 提交于 2020-01-12 09:11:26
与上文基于 基于人口统计学的推荐算法 有所不同。 基于内容的推荐算法是根据 物品特征标签 ,发现物品的相关性,再基于用户过去的喜好记录,为用户推荐相似的物品。 基于人口统计学的推荐算法是 基于用户的身份信息 如年龄、职业等,并没有对物品特征进行刻画。 如: a和c都喜欢动作爱情类型的电影,如果c看了一部动作爱情的电影,则有较大概率a也喜欢看。 来源: CSDN 作者: JLUspring 链接: https://blog.csdn.net/qq_37724465/article/details/103842989

数据结构——树(知识总结)

删除回忆录丶 提交于 2020-01-12 06:52:02
文章目录 图的应用 最小生成树 普里姆(prim)算法 克鲁斯卡尔(Kruskal)算法 最短路径 迪杰斯特拉(Dijkstra)算法 弗洛伊德(Floyd)算法 图的应用 最小生成树 普里姆(prim)算法 克鲁斯卡尔(Kruskal)算法 prim算法时间复杂度为 O(n^2) ,克鲁斯卡尔算法时间复杂度为 O(eloge) 。对于两个算法,克鲁斯卡尔算法对于 稀疏图 优势大,而普里姆算法对于 稠密图 更好一点。 最短路径 迪杰斯特拉(Dijkstra)算法 问题抽象:在有向网中A点到达B点的多条路径中,寻找一条各边权值之和最小的路径,即最短路径 弗洛伊德(Floyd)算法 两种算法的时间复杂度都是O(n^3),对有向图和无向图都适用。 来源: CSDN 作者: 丶LJW 链接: https://blog.csdn.net/weixin_43246440/article/details/103884963

JVM内存回收

青春壹個敷衍的年華 提交于 2020-01-12 05:34:38
一、概述 正所谓垃圾收集,即内存回收,将一些用不到的对象等从内存中去掉,使内存充足,而不至于OOM。那就自然面临下面的三个问题? 哪些内存需要回收? 何时进行回收? 如何进行回收? 二、如何判断对象已死?(不再使用该对象) 只有先判断出该对象是否已死,才能确定是否对该对象占有的内存进行回收。 1、引用计数算法 对每个对象都有一个引用计数器,用来记录该对象被引用的次数。缺点就是很难解决对象之间的相互循环引用问题。 2、可达性分析算法 虚拟机会维持一个从根节点为GC Roots的对象引用树,当对象没有在该树上时则可回收。 三、如何回收(垃圾收集算法) 1、标记-清除算法 对可回收的对象进行标记,然后统一进行回收。 缺点:导致回收完之后内存不连续,以致于后续存储大对象内存不足 2、复制算法(新生代) 将内存分为两块AB,一块A存储,一块B空闲,当A空间不足进行垃圾回收时,将A中活跃对象直接复制到B,然后将A清空,解决了内存不连续问题。 缺点:一分为二,内存的使用率只有50%,直接造成内存浪费。并且对于活跃对象比较多的进行GC后复制,耗时耗CPU。 复制算法改进版 将新生代内存分为3块,eden,survivor1,survivor2。比例为8:1:1(默认可改)。因为研究表明新生代98%对象都是“朝生夕死”,真正能持续存活的比较少。 eden和survivor1 为新的对象分配内存

11-接下来如何做

旧城冷巷雨未停 提交于 2020-01-12 05:18:34
1.树 在前面的二分查找示例中,每当用户登陆Facebook,Facebook都必须在一个庞大的数组中查找,核实其中是否包含指定的用户名。在这种数组中查找,最快的方式是二分查找,但问题是每当有新用户注册时,都必须将其用户名插入该数组并重新排序,因为二分查找仅在数组有序时才管用。如果能将用户名插入到数组的正确位置就好了,这样就无需在插入后再排序。为此,有人设计了一种名为二叉查找树的数据结构。 对于其中的每个节点,左子节点的值都比它小,而右子节点的值都比它大。 假设要查找Maggie,首先检查根节点。Maggie排在David的后面,因此你往右找。Maggie排在Manning前面,因此你往前找。 二叉查找树用时为O(log 2 n)几乎与二分查找一样,但在最糟的情况下所需时间为O(n);而在有序数组中查找时,即便是在最糟情况下所需的时间也只有O(log 2 n),但是二叉查找树的插入和删除操作的速度要快得多。 操作 有序数组 二叉查找树 查找 O(log 2 n) O(log 2 n) 插入 O(n) O(log 2 n) 删除 O(n) O(log 2 n) 二叉查找树的缺点:不能随机访问,例如给我第5个元素。在二叉查找树处于平衡状态时平均访问时间也为O(log 2 n)。 假设二叉查找树像下面这样处于不平衡状态。 注意,这棵树是向右倾斜的,因此性能不佳

【推荐系统实践-02】利用用户行为数据(协同过滤)

喜夏-厌秋 提交于 2020-01-12 05:14:19
项亮老师的《推荐系统实践》学习笔记​。​ 目录 用户行为数据简介 用户行为分析 用户活跃度和物品流行度的分布 用户活跃度和物品流行度的关系 基于邻域的算法 基于用户的协同过滤算法 基于物品的协同过滤算法 UserCF和ItemCF的比较 隐语义模型 基于图的模型 为了让推荐结果符合用户口味,我们需要深入了解用户。 基于用户行为分析的推荐算法是个性化推荐系统的重要算法,学术界一般将这种类型的算法称为协同过滤算法。顾名思义,协同过滤就是指用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。 1、用户行为数据简介 用户行为数据在网站上最简单的存在形式就是日志。网站在运行过程中都产生大量原始日志(raw log),并将其存储在文件系统中。很多互联网业务会把多种原始日志按照用户行为汇总成会话日志(session log),其中每个会话表示一次用户行为和对应的服务。 会话日志通常存储在分布式数据仓库中,这些日志记录了用户的各种行为,如在电子商务网站中这些行为主要包括网页浏览、购买、点击、评分和评论等。 用户行为在个性化推荐系统中一般分两种——显性反馈行为(explicit feedback)和隐性反馈行为(implicit feedback)。显性反馈行为包括用户明确表示对物品喜好的行为

JVM垃圾回收算法

和自甴很熟 提交于 2020-01-12 05:11:32
1.堆的分代和区域 (年轻代)Young Generation(eden、s0、s1 space) Minor GC (老年代)Old Generation ( Tenured space ) Major GC|| Full GC (永久代)Permanent Generation ( Permanent space )【 方法区(method area) 】 Major GC 本地化的String从JDK 7开始就被移除了永久代(Permanent Generation ) JDK 8.HotSpot JVM开始使用本地化的内存存放类的元数据,这个空间叫做元空间(Metaspace) 2.判断对象是否存活(哪些是垃圾对象) 1.引用计数 (ReferenceCounting) :对象有引用计数属性,增加一个引用计数加1,减少一个引用计数减1,计数为0时可回收。 (无法解决对象相互循环引用的问题) 2. 根搜索 (GC Roots Tracing) : GCRoot对象作为起始点(根)。如果从根到某个对象是可达的,则该对象称为“可达对象”(存活对象,不可回收对象)。否则就是不可达对象,可以被回收。 下图中,对象Object6、Object7、Object8虽然互相引用,但他们的GC Roots是不可到达的,所以它们将会被判定为是可回收的对象 3.垃圾收集算法 1. 标记-清除

第三章 k近邻法笔记

让人想犯罪 __ 提交于 2020-01-12 02:51:03
CH03 k近邻法 文章目录 CH03 k近邻法 前言 章节目录 导读 最近邻算法 k近邻模型 算法 距离度量 k k k 值选择 分类决策规则 实现 构造KDTree 搜索KDTree k k k 近邻查找 范围查询 例子 例3.1 例3.2 例3.3 其他资料 KNN 特点 KNN算法的优势和劣势 Sklearn 实现 前言 章节目录 k近邻算法 k近邻模型 模型 距离度量 k值选择 分类决策规则 k近邻法的实现: KDTree 构造KDTree 搜索KDTree 导读 kNN是一种基本分类与回归方法。 kNN是机器学习中被分析的最透彻的算法之一。 多数表决规则等价于0-1损失函数下的经验风险最小化,支持多分类, 有别于前面的感知机算法 kNN的k和KDTree的k含义不同,书上这部分有注释说明(最近邻的k个点;k维空间) KDTree是一种存储k维空间数据的树结构,KDTree是平衡二叉树 KNN应用的一个实践问题是 如何建立高效的索引 。建立空间索引的方法在点云数据处理中也有广泛的应用,KDTree和八叉树在3D点云数据组织中应用比较广 书中的KDTree搜索实现的时候针对了一种 k = 1 k=1 k = 1 的特殊的情况,实际是 最 近邻搜索 KDTree的搜索问题分为 k近邻查找 和 范围查找 ,一个是已知 k k k ,求点集范围,一个是已知范围,求里面有k个点

【机器学习面试题】——集成学习

旧时模样 提交于 2020-01-12 02:13:02
文章目录 1. 什么是集成学习算法? 2. 集成学习主要有哪几种框架? 3. 简单介绍一下bagging,常用bagging算法有哪些? 4. 简单介绍一下boosting,常用boosting算法有哪些? 5. boosting思想的数学表达式是什么? 6. 简单介绍一下stacking,常用stacking算法有哪些? 7. 你意识到你的模型受到低偏差和高方差问题的困扰,应该使用哪种算法来解决问题呢?为什么? 8. 常用的基分类器是什么? 9. 可否将随机森林中的基分类器,由决策树替换为线性分类器或K-近邻?请解释为什么? 1. 什么是集成学习算法? 集成学习算法是一种优化手段或者策略 ,不算是一种机器学习算法。 集成方法是由多个较弱的模型集成模型组,一般的弱分类器可以是决策树,SVM,KNN等构成。其中的模型可以单独进行训练,并且它们的预测能以某种方式结合起来去做出一个总体预测。 该算法主要的问题是要找出哪些较弱的模型可以结合起来,以及如何结合的方法。 2. 集成学习主要有哪几种框架? 集成学习从集成思想的架构分为Bagging,Boosting,Stacking三种。 3. 简单介绍一下bagging,常用bagging算法有哪些? Bagging 多次采样,训练多个分类器,集体投票,旨在减小方差 , 基于数据 随机重抽样 的分类器构建方法