Java
大数据学习与分享
【微信公众号:大数据学习与分享】专注于大数据领域常用技术,如Spark、Hadoop、Hive、HBase、Kafka、Zookeeper等技术的使用、实战技巧、源码解读,语言主要以Java和Scala为主
展开
-
内存泄漏、内存溢出和堆外内存,JVM优化参数配置
内存泄漏内存泄漏是指程序在申请内存后,无法释放已申请的内存空间,无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费。内存泄漏最终会导致OOM。造成内存泄漏典型场景:1.单例模式的不正确使用单例对象在初始化后将在JVM的整个生命周期中以静态变量的方式存在。如果单例对象持有对外部对象的引用,那么这个对象将不能被JVM正常回收2.数据库、网络、IO连接没有被关闭释放这类连接,一般会提供close方法进行显式关闭。但如果没有进行close,是不会自动被gc回收的。原创 2020-08-18 20:33:05 · 815 阅读 · 0 评论 -
JVM垃圾回收器、内存分配与回收策略
新生代垃圾收集器1. Serial收集器serial收集器即串行收集器,是一个单线程收集器。串行收集器在进行垃圾回收时只使用一个CPU或一条收集线程去完成垃圾回收工作,并且会暂停其他的工作线程(stop the world),直至回收完成。适用于运行在client模式下的JVM。在单CPU年代,串行收集器是默认的垃圾回收器,minor GC和major GC的过程都是用一个线程去处理的。启用方式:-XX: +UseSerialGC2. ParNew收集器parNew收集器即并行收集器,采用的是原创 2020-07-31 17:37:13 · 205 阅读 · 0 评论 -
JVM内存管理、直接内存和垃圾回收
无论对于Java程序员还是大数据研发人员,JVM是必须掌握的技能之一。既是面试中经常问的问题,也是在实际业务中对程序进行调优、排查类似于内存溢出、栈溢出、内存泄漏等问题的关键。笔者将按下图分多篇文章详细阐述JVM:本篇文章主要叙述JVM内存管理、直接内存、垃圾回收和常见的垃圾回收算法:运行时数据区域JVM在执行一些基于JVM运行的程序,典型的如Java程序、Scala程序时,会把它所管理的内存划分为多个不同的数据区域。这些区域有各个的作用、创建和销毁时间,有的区域生命周期依赖于用户线程的启动和结束,原创 2020-07-15 20:49:48 · 508 阅读 · 0 评论 -
笔试 | Java 中 7 种常见的排序算法实现
一、快速排序1.1 方法1思路:在数据集中,选择一个元素作为"基准(pivot)"分区(partition):所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素都移到"基准"的右边分区操作结束后,基准元素所处的位置就是最终排序后它所处的位置对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集都只剩下一个元素为止/** * @param arr 待排序数组 * @param low 数组第一个元素索引 * @param high 数组原创 2020-06-20 19:17:17 · 212 阅读 · 0 评论 -
Java常见的数组相关笔试编程题
1.对正整数进行分解质因数// 如传入100, 打印出2*2*5*5/** 思路: * 首先找到一个最小的质数i * 1. 如果这个质数恰等于num, 则说明分解质因数的过程已经结束, 打印出即可 * 2. 如果num > i, 但num能被i整除, 则打印出i的值, 并用num除以i的商, 作为新的正整数num, 重复执行第一步 * 3. 如果num不能被i整除, 则用i+1作为i的值, 重复执行第一步 **/public static vo原创 2020-06-18 23:01:21 · 796 阅读 · 0 评论 -
笔试编程 | 二分查找法、Java数组笔试题、排序算法
分享一些笔试中经常遇到的一些编程题,包括解题思路和代码实现,下图是分享的大纲:二分查找法二分查找又称折半查找, 它是一种效率较高的查找方法。前提:(1)必须采用顺序存储结构(2)必须按关键字大小有序排列原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后,将要查找的值和数组的中值进行比较,若小于中值则在中值前面找,若大于中值则在中值后面找,等于中值时直接返回。然后依次是一个递归过程,将前半部分或者后半部分继续分解为三部分。1. 循环实现二分查找public原创 2020-06-18 11:07:10 · 268 阅读 · 0 评论 -
单向链表和双向链表
1.单向链表包含两个域,一个信息域包含当前节点的信息、一个指针域包含下一个节点的地址。这个链接指向表中的下一个节点,而最后一个节点则指向一个空值null。单向链表只可向一个方向遍历。查找一个节点的时候需要从第一个节点开始每次访问下一个节点,一直访问到需要的位置。也可以提前把一个节点的位置另外保存起来,然后直接访问。2.双向链表双向链表有两个指针,分别指向当前节点的上一个节点和下一个节点。第一个节点的"前链接"指向NULL,最后一个"后连接"指向null。可以从任何一个节点访问前一个节点,也可以访原创 2020-05-08 20:46:54 · 925 阅读 · 0 评论 -
mysql引擎
MySQL常用存储引擎:MyISAM、InnoDB、MEMORY、MERGE,其中InnoDB提供事务安全表,其他存储引擎都是非事务安全表。MyISAM:mysql默认存储引擎。MyISAM不支持事务,也不支持外键,但其访问速度快,对事务完整性没有要求。InnoDB:提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。MEMORY:使用存在内存中的内容来创建表。每个MEMORY表只实际对应一个磁盘文件。MEMORY原创 2020-05-08 20:42:58 · 122 阅读 · 0 评论 -
Java中newInstance和new的区别
newInstance:弱类型、低效率,调用无参构造,使用类加载机制。使用newInstance()方法的时候,必须保证:1.这个类已经加载2.这个类已经连接了而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载Java API的那个加载器。newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加...原创 2020-05-05 21:20:23 · 162 阅读 · 0 评论 -
常见的几种session共享方案
1)cookie加密的方式保存在客户端优点:减轻服务器端压力缺点:受到cookie大小限制,因为每次请求会在头部附带cookie信息,占用一定的带宽。另外,这种方式在用户禁用cookie的情况下无效。这种方式不常用。2)服务器间同步比如tomcat集群:通过配置tomcat,实现session共享。每个tomcat都会在局域网中广播自己的session信息,同时监听其他tomcat广播...原创 2020-05-05 21:19:15 · 703 阅读 · 0 评论 -
Java并发队列与容器
【前言:无论是大数据从业人员还是Java从业人员,掌握Java高并发和多线程是必备技能之一。本文主要阐述Java并发包下的阻塞队列和并发容器,其实研读过大数据相关技术如Spark、Storm等源码的,会发现它们底层大多用到了Java并发队列、同步类容器、ReentrantLock等。建议大家结合本篇文章,仔细分析一下相关源码】BlockingQueue阻塞队列,位于java.util.conc...原创 2020-03-22 20:18:02 · 256 阅读 · 0 评论