首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
apache_ali
获赞
21
粉丝
1
关注
4
看过 TA
2
男
中山大学
2018
Java
IP属地:广东
暂未填写个人简介
私信
关注
拉黑
举报
举报
确定要拉黑apache_ali吗?
发布(55)
评论
刷题
收藏
apache_ali
关注TA,不错过内容更新
关注
2020-06-08 17:29
已编辑
中山大学 Java
jvm优化—— 图解垃圾回收
java 的垃圾收集Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了。GC 相关的研究主要是思考这3件事情。 哪些内存需要回收?什么时候回收?如何回收? GC 的 目标区域 java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同是数据区域,这些区域有各自各自的用途。主要包含以下几个部分组成: 1、程序计数器程序计数器占用的内存空间我们可以忽略不计,它是每个线程所执行的字节码的行号指示器。2、虚拟机栈java的虚拟机栈是线程私有的,生命周期和线程相同。它描述的是方法执行的内存模型。...
0
点赞
评论
收藏
分享
2020-06-02 22:24
已编辑
中山大学 Java
JVM-调优方案
性能调优的层次 JVM调优配置 -server JVM运行的模式之一, server模式才能进行逃逸分析, JVM运行的模式还有mix/client -Xmx10m和-Xms10m:堆的大小 -XX:+DoEscapeAnalysis:启用逃逸分析(默认打开) -XX:+PrintGC:打印GC日志 -XX:+EliminateAllocations:标量替换(默认打开) -XX:-UseTLAB 关闭本地线程分配缓冲 -XX:+EliminateLocks可以开启同步消除,进行测试执行的效率 对栈上分配发生影响的参数就是三个,-server、-XX:+DoEscapeAnalysis和-...
0
点赞
评论
收藏
分享
2020-06-02 11:10
中山大学 Java
JAVA逃逸分析、栈上分配、标量替换、同步消除
JAVA逃逸分析 总结:在编程语言的编译优化原理中,分析指针动态范围的方法称之为逃逸分析。通俗来讲,当一个对象的指针被多个方法或线程引用时,我们称这个指针发生了逃逸。我们知道Java对象是在堆里分配的,在调用栈中,只保存了对象的指针。当对象不再使用后,需要依靠GC来遍历引用树并回收内存,如果对象数量较多,将给GC带来较大压力。因此,减少临时对象在堆内存分配的数量是最有效的优化方法。 逃逸分析包括: 全局变量赋值逃逸 方法返回值逃逸 实例引用发生逃逸 线程逃逸:赋值给类变量或可以在其他线程中访问的实例变量. public class EscapeAnalysis { public sta...
0
点赞
评论
收藏
分享
2020-06-02 09:25
已编辑
中山大学 Java
JVM-为什么新生代内存需要有两个Survivor区
为什么新生代内存需要有两个Survivor区 1 为什么要有Survivor区先不去想为什么有两个Survivor区,第一个问题是,设置Survivor区的意义在哪里? 如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代。老年代很快被填满,触发Major GC(因为Major GC一般伴随着Minor GC,也可以看做触发了Full GC)。老年代的内存空间远大于新生代,进行一次Full GC消耗的时间比Minor GC长得多。你也许会问,执行时间长有什么坏处?频发的Full GC消耗的时间是非常可观的,这一点会影响大型程序的执行和响应速度,更不要说某...
0
点赞
评论
收藏
分享
2020-08-06 11:00
已编辑
中山大学 Java
面试题目积累
ArrayList和LinkedList的区别 数据的更新和查找ArrayList的所有数据是在同一个地址上,而LinkedList的每个数据都拥有自己的地址.所以在对数据进行查找的时候,由于LinkedList的每个数据地址不一样,get数据的时候ArrayList的速度会优于LinkedList,而更新数据的时候,虽然都是通过循环循环到指定节点修改数据,但LinkedList的查询速度已经是慢的,而且对于LinkedList而言,更新数据时不像ArrayList只需要找到对应下标更新就好,LinkedList需要修改指针,速率不言而喻 数据的增加和删除对于数据的增加元素,ArrayLis...
0
点赞
评论
收藏
分享
2020-05-22 23:29
中山大学 Java
Flink学习-广播状态
什么是广播状态 Broadcast State是Flink支持的一种Operator State。使用Broadcast State,可以在Flink程序的一个Stream中输入数据记录,然后将这些数据记录广播(Broadcast)到下游的每个Task中,使得这些数据记录能够为所有的Task所共享,比如一些用于配置的数据记录。这样,每个Task在处理其所对应的Stream中记录的时候,读取这些配置,来满足实际数据处理需要。另外,在一定程度上,Broadcast State能够使得Flink Job在运行过程中与外部的其他系统解耦合。比如,通常Flink会使用YARN来管理计算资源,使用Broa...
0
点赞
评论
收藏
分享
2020-05-20 21:36
已编辑
中山大学 Java
Flink学习-窗口Window
Window 窗口是什么 Windows 是处理无限流的核心。Windows 将流分成有限大小的“存储桶”,我们可以在其上应用计算。Flink 是一个优秀的流计算引擎,数据是源源不断的,它认为批处理 Batch 是一种特殊的流计算,在流中分割出一个个窗口,每个窗口相当于有限大小的空间,汇聚了待处理的数据。 窗口式 Flink 程序的一般结构如下所示。第一个片段指的是键控流,第二个片段指的是非键控流。可以看到,唯一的区别是对键控流的 keyBy(...) 调用和对非键控流的 window(...) 变为 windowAll(...)。 // Keyed Window stream .keyBy(...
0
点赞
评论
收藏
分享
2020-05-19 14:04
已编辑
中山大学 Java
Flink学习-Timestamps / Watermarks
Timestamps Flink的时间一共分为:Processing Time(处理时间)、Event Time (事件时间)和 Ingestion Time(摄取时间) Event Time 应用程序填装数据,塞入的时间。也就是数据本身携带的时间 Ingestion Time Flink数据源接收到每个事件源的当前时间作为时间戳 Processing Time 事件被处理时的机器时间 Event Time 事件产生的时间,该时间通常在它们进入 Flink 之前嵌入到记录中,并且可以从每个记录中提取事件时间戳。 (可以想象成它是数据本身的一个属性,它的值保存的是时间) 在 Event Ti...
0
点赞
评论
收藏
分享
2020-05-18 15:04
中山大学 Java
深入理解JVM-自动内存管理
前言 从Java的第一个版本诞生到现在已经有二十余年的时间,白驹过隙,沧海桑田, 转眼已过了四分之一个世纪,在图1-3所示的时间线里,我们看到JDK的版本已经发展 JDK13。这二十多年里诞生过无数与Java相关的产品、技术与标准。现在让我们走入道,从孕育Java语言的时***始,再来回顾一下Java的发展轨迹和历史变迁。19年4月,由 James Gosling博士领导的绿色计划( Green Project)开始启动,此计 划最初的目标是开发一种能够在各种消费性电子产品(如机顶盒、冰箱、收音机等)上运行的程序架构。这个计划的产品就是Java语言的前身:Oak(得名于James Goslin...
0
点赞
评论
收藏
分享
2020-05-18 15:03
中山大学 Java
深入理解JVM-CAS原子操作
前言 在学习JVM对象创建的时候,碰到一个问题,对象创建在虚拟机中时非常频繁的行为,即使仅仅修改一个指针所指向的位置,在并发情况下也并不是线程安全的,可能出现正在给A对象分配内存的时候,指针还没来得及修改,对象B又同时使用了原来的指针来分配内存的情况,解决这个问题,其中又一个方案,就是使用CAS配上失败重试的方式保证更新操作的原子性。下面我们一起学习以下CAS的原理。 乐观锁与悲观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换,也就是会发生进程的切换。切换涉及到清空寄存器,缓存数据。然后重新加...
0
点赞
评论
收藏
分享
2020-05-18 15:02
中山大学 Java
Pulsar IO之CDC Debezium Connector
背景 在业务系统中,会涉及到多个数据源的数据流转,例如在线系统的数据流转到分析系统、流计算系统、搜索引擎、缓存系统、事件处理系统等。如图所示: Debezium 官网地址:https://debezium.io/ Debezium是一个开源项目,为捕获数据更改(Capture Data Change,CDC)提供了一个低延迟的流式处理平台,通过安装配置Debezium监控数据库,可以实时消费行级别(row-level)的更改。身为一个分布式系统,Debezium也拥有良好的容错性。 Debezium的源端(即支持监控哪些数据库) : MySQL,MongoDB,PostgreSQL,Oracl...
0
点赞
评论
收藏
分享
2020-07-14 10:36
已编辑
中山大学 Java
为什么 Java 中只有值传递?
首先回顾一下在程序设计语言中有关将参数传递给方法(或函数)的一些专业术语。按值调用(call by value)表示方法接收的是调用者提供的值,而按引用调用(call by reference)表示方法接收的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。 它用来描述各种程序设计语言(不只是Java)中方法参数传递方式。 Java程序设计语言总是采用按值调用。也就是说,方法得到的是所有参数值的一个拷贝,也就是说,方法不能修改传递给它的任何参数变量的内容。 下面通过 3 个例子来给大家说明 example 1 public static voi...
0
点赞
评论
收藏
分享
2020-05-17 22:33
已编辑
中山大学 Java
Spring中都用到了那些设计模式?
控制反转(IoC)和依赖注入(DI) IoC(Inversion of Control,控制翻转) 是Spring 中一个非常非常重要的概念,它不是什么技术,而是一种解耦的设计思想。它的主要目的是借助于“第三方”(Spring 中的 IOC 容器) 实现具有依赖关系的对象之间的解耦(IOC容易管理对象,你只管使用即可),从而降低代码之间的耦合度。IOC 是一个原则,而不是一个模式,以下模式(但不限于)实现了IoC原则。 Spring IOC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。 IOC 容器负责创建对象,将...
0
点赞
评论
收藏
分享
2020-05-17 21:36
已编辑
中山大学 Java
Mysql笔记
视图 提高了重用性,就像一个函数。如果要频繁获取user表的name和account的name select a.name as username, b.name as goodsname from user,account as b where a.id=b.userid但有了视图就不一样了,创建视图user_view。示例create view user_view as select a.name as username, b.name as goodsname from user,account as b where a.id=b.userid;创建好视图后,就可以这样获取user的n...
0
点赞
评论
收藏
分享
2020-06-06 21:28
已编辑
中山大学 Java
并发基础与Java多线程
并行与并发 并行这个概念很好理解。所谓并行,就是同时执行的意思,无需过度解读。判断程序是否处于并行的状态,就看同一时刻是否有超过一个“工作单位”在运行就好了。所以,单线程永远无法达到并行状态。 并发要理解“并发”这个概念,必须得清楚,并发指的是程序的“结构”。当我们说这个程序是并发的,实际上,这句话应当表述成“这个程序采用了支持并发的设计”。好,既然并发指的是人为设计的结构,那么怎样的程序结构才叫做支持并发的设计? 正确的并发设计的标准是:使多个操作可以在重叠的时间段内进行(two tasks can start, run, and complete in overlapping tim...
0
点赞
评论
收藏
分享
1
2
3
4
创作者周榜
更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务