你知道Java的四种引用类型吗,BAT 面试官 如何面试

突破Shopee平台数据采集的风控挑战与技术解决方案 高效、稳定、合规的数据采集能力,始终是我们服务的核心价值。多类型代理组合:采用高匿名住宅代理(模拟真实用户IP)与数据中心代理(高并发需求)混合策略,结合IP轮换频率与目标国家后缀(如.com.my、.vn)动态匹配14。反反爬数据过滤:针对Shopee页面中的混淆数据(如虚假价格标签、隐藏元素),采用XPath精准定位结合正则表达式清洗,确保数据准确性89。随机化请求间隔:在爬虫代码中引入随机延迟(如1-5秒),并模拟“浏览-点击-滚动”等用户行为链,降低行为模式的可预测性48。 阅读详情


写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。扫码加微信好友进【程序员面试学习交流群】,免费领取。也欢迎各位一起在群里探讨技术。

 

 

关于java四种引用类型,我也是刚了解,特此记下!


 

 

在Java中提供了四个级别的引用:强引用,软引用,弱引用和虚引用。在这四个引用类型中,只有强引用FinalReference类是包内可见,其他三种引用类型均为public,可以在应用程序中直接使用。引用类型的类结构如图所示。

1.强引用

Java中的引用,类似C语言中最难的指针。(我是C语言入门编程,指针的概念还是很深入我心。)通过引用,可以对堆中的对象进行操作。如:

StringBuffer stringBuffer = new StringBuffer("Helloword");

变量str指向StringBuffer实例所在的堆空间,通过str可以操作该对象。


强引用的特点:




  1.  
  2. 强引用可以直接访问目标对象。


     
  3. 强引用所指向的对象在任何时候都不会被系统回收。JVM宁愿抛出OOM异常,也不会回收强引用所指向的对象。


     
  4. 强引用可能导致内存泄漏。


     

2.软引用

软引用是除了强引用外,最强的引用类型。可以通过java.lang.ref.SoftReference使用软引用。一个持有软引用的对象,不会被JVM很快回收,JVM会根据当前堆的使用情况来判断何时回收。当堆使用率临近阈值时,才会去回收软引用的对象。因此,软引用可以用于实现对内存敏感的高速缓存。

SoftReference的特点是它的一个实例保存对一个Java对象的软引用, 该软引用的存在不妨碍垃圾收集线程对该Java对象的回收。也就是说,一旦SoftReference保存了对一个Java对象的软引用后,在垃圾线程对 这个Java对象回收前,SoftReference类所提供的get()方法返回Java对象的强引用。一旦垃圾线程回收该Java对象之后,get()方法将返回null。

下面举一个例子说明软引用的使用方法。

在你的IDE设置参数 -Xmx2m -Xms2m规定堆内存大小为2m。

    @Test

    public void test3(){

        MyObject obj = new myObject();

        SoftReference sf = new SoftReference<>(obj);

        obj = null;

        System.gc();

//        byte[] bytes = new byte[1024*100];

//        System.gc();

        System.out.println("是否被回收"+sf.get());

    }

运行结果:

是否被回收cn.zyzpp.MyObject@42110406

打开被注释掉的new byte[1024*100]语句,这条语句请求一块大的堆空间,使堆内存使用紧张。并显式的再调用一次GC,结果如下:

是否被回收null

说明在系统内存紧张的情况下,软引用被回收。

3.弱引用

弱引用是一种比软引用较弱的引用类型。在系统GC时,只要发现弱引用,不管系统堆空间是否足够,都会将对象进行回收。在java中,可以用java.lang.ref.WeakReference实例来保存对一个Java对象的弱引用。

    public void test3(){

        MyObject obj = new MyObject();

        WeakReference sf = new WeakReference(obj);

        obj = null;

        System.out.println("是否被回收"+sf.get());

        System.gc();

        System.out.println("是否被回收"+sf.get());

    }

运行结果:

是否被回收cn.zyzpp.MyObject@42110406

是否被回收null
 

软引用,弱引用都非常适合来保存那些可有可无的缓存数据,如果这么做,当系统内存不足时,这些缓存数据会被回收,不会导致内存溢出。而当内存资源充足时,这些缓存数据又可以存在相当长的时间,从而起到加速系统的作用。


 

4.虚引用

虚引用是所有类型中最弱的一个。一个持有虚引用的对象,和没有引用几乎是一样的,随时可能被垃圾回收器回收。当试图通过虚引用的get()方法取得强引用时,总是会失败。并且,虚引用必须和引用队列一起使用,它的作用在于跟踪垃圾回收过程。

当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在垃圾回收后,销毁这个对象,将这个虚引用加入引用队列。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。

    public void test3(){

        MyObject obj = new MyObject();

        ReferenceQueue<Object> referenceQueue = new ReferenceQueue<>();

        PhantomReference sf = new PhantomReference<>(obj,referenceQueue);

        obj = null;

        System.out.println("是否被回收"+sf.get());

        System.gc();

        System.out.println("是否被回收"+sf.get());

    }

运行结果:

是否被回收null

是否被回收null

对虚引用的get()操作,总是返回null,因为sf.get()方法的实现如下:

    public T get() {

        return null;

    }

5.WeakHashMap类及其实现

WeakHashMap类在java.util包内,它实现了Map接口,是HashMap的一种实现,它使用弱引用作为内部数据的存储方案。WeakHashMap是弱引用的一种典型应用,它可以作为简单的缓存表解决方案。

一下两段代码分别使用WeakHashMap和HashMap保存大量的数据:

    @Test

    public void test4(){

        Map map;

        map = new WeakHashMap<String,Object>();

        for (int i =0;i<10000;i++){

            map.put("key"+i,new byte[i]);

        }

//        map = new HashMap<String,Object>();

//        for (int i =0;i<10000;i++){

//            map.put("key"+i,new byte[i]);

//        }

    }

使用-Xmx2M限定堆内存,使用WeakHashMap的代码正常运行结束,而使用HashMap的代码段抛出异常

java.lang.OutOfMemoryError: Java heap space

由此可见,WeakHashMap会在系统内存紧张时使用弱引用,自动释放掉持有弱引用的内存数据。

但如果WeakHashMap的key都在系统内持有强引用,那么WeakHashMap就退化为普通的HashMap,因为所有的表项都无法被自动清理。

 


转载:https://www.cnblogs.com/yueshutong/p/9531347.html

推荐内容:
Java面试题总结-Day4
JAVA工程师面试常见问题集锦
Java_EE面试题
面试总结----java初级工程师
Java 面试知识点解析(六)——数据库篇
JAVA多线程面试题
Java高级工程师面试题总结及参考答案
2年Java开发工作经验面试总结
面试必问!Java 多线程中两个线程交替执行,一个输出偶数,一个输出奇数
java高级面试感想

 

MATLAB计算干旱指标:SPI、SRI、SWAP、DWAAI、EDI等 简介各种干旱指数以及其MATLAB代码实现 阅读详情

相关推荐

添加odbc数据源时的一些问题和解决办法

pl/sql

Mr_Syh的博客 9643

java ref 值传递_Java学习之值传递(转)

Java学习之值传递(转)[@more@] 值传递是在一个函数中,调用另外一个函数,其中含有参数传递的情况。往往值传递就是把数据传递到另外一个函数中进行进一步处理,以更清楚地显示函数的表达意思。在函数调用的时候会有数据传递,同样要考虑形参和实参的问题,如下面的一个程序:public class PassTest{float ptValue;public void changeInt (int va...

weixin_42226397的博客 1305

51单片机STC8G1K08驱动ws2812记录

使用51单片机控制17个2812灯,这里选择STC8芯片,最大频率可以达到35M,参考网上的各种文章案例,使用定时器做的时候实测做不到规格书要求的245-345ns,STC8G1K08不带PWM,所以只能使用nop来做,好在单片机在这里只有做编程灯的功能,省略测试过程,下面是程序,使用的是24MHz内部晶振 //设置一个灯珠 void SendOnePix(unsigned char *ptr) { unsigned char i,j; unsigned char temp; fo...

的博客 7320

你知道Java的四种引用类型吗

从大一自学Java已经两年了,自觉已经可以独当一面,(其实远远不足),最近一直在看书。关于java四种引用类型,我也是刚了解,特此记下! 在Java中提供了四个级别的引用:强引用,软引用,弱引用和虚引用。在这四个引用类型中,只有强引用FinalReference类是包内可见,其他三种引用类型均为public,可以在应用程序中直接使用。引用类型的类结构...

weixin_34268169的博客 443

解决Windows 10安装语言包时遇到的0x800F0954错误

在安装Windows 10操作系统的语言包时,如果遇到错误代码0x800F0954的提示,这无疑会让许多用户感到困惑和无助。这个错误通常意味着在安装过程中遇到了一些阻碍,导致无法正常完成语言包的安装。本文将为大家详细解析这个错误代码0x800F0954,并提供一系列有效的解决方法,帮助大家顺利安装所需的语言包。

nntxthml的博客 3793

Quest 3开发第一步:搞定Meta账号登录和Oculus软件连不上设备的那些坑(2024实测)

本文详细介绍了Quest 3开发初期的关键步骤,包括Meta账号注册、Oculus软件安装与设备连接等常见问题的解决方案。针对国内开发者遇到的邮箱限制、验证码接收等难题,提供了实用的应对策略,并分享了开发环境配置和常见问题排查技巧,帮助开发者快速搭建Quest 3开发环境。

weixin_30333885的博客 495

java ref 应用类型_java中的Reference类型用法说明

本文简要总结java中的Reference类型。最近在研读jdk并发框架,其中AQS是重点,由于我打破砂锅问到底的轻微强迫症,google了AQS作者Doug Lea的论文原文[The java.util.concurrent Synchronizer Framework],有兴趣的同学可以自行下载。其中谈到设计同步框架的核心是选择一个严格意义上的FIFO队列,作为阻塞线程队列并对其进行维护。对此...

weixin_42498989的博客 381

大模型事件抽取学习——论文学习笔记《LLMs Learn Task Heuristics from Demonstrations:......》

本篇博客介绍一篇发表在2024 ACL main上的文章:《LLMs Learn Task Heuristics from Demonstrations: A Heuristic-Driven Prompting Strategy for Document-Level Event Argument Extraction》 方向:大模型事件抽取 本篇博客为个人阅读论文的总结与笔记,在这里进行简单的分享 论文链接:https://arxiv.org/abs/

weixin_53751318的博客 1852

java ref 应用类型_Java中的四种引用类型比较

1.引用的概念引用这个概念是与JAVA虚拟机的垃圾回收有关的,不同的引用类型对应不同的垃圾回收策略或时机。垃圾收集可能是大家感到难于理解的较难的概念之一,因为它并不能总是毫无遗漏地解决Java运行时环境中堆管理的问题。垃圾回收的大致思路是:当Java虚拟机觉得内存不够用的时候,会触发垃圾回收操作(GC),清除无用的对象,释放内存。可是如何判断一个对象是否是垃圾呢?其中的一个方法是计算指向该对象的引...

weixin_39760919的博客 465

Python爬虫实战:构建药监局药品批准信息本地查询系统

在医药信息化时代,药品批准信息的快速查询对于医药从业者、研究人员和普通消费者都具有重要意义。国家药品监督管理局(NMPA)提供了官方的药品查询系统,但有时我们需要建立本地数据库以便批量分析或离线查询。本文将详细介绍如何使用Python爬虫技术,结合最新的异步爬虫框架和技术栈,构建一个完整的药监局药品信息本地查询系统。本系统将实现以下功能:自动化爬取药监局官网的药品批准信息数据清洗和结构化存储建立本地查询接口数据定期更新机制pythonimport os"""药品类型枚举"""

2201_76125261的博客 728

EtherCAT报文-BRD(广播读)抓包分析

EtherCAT报文之BRD(广播读)报文Wireshark抓包分析。

kevin1499的博客 1212

Java中各种引用(Reference)解析

目录 1,引用类型 2, FinalReference 2.1, Finalizer 3, SoftReference 4, WeakReference 5, PhantomReference 6, ReferenceQueue 7,Cleaner 8, Reference 引用实例的几个状态 重点源码解析 总结 1,引用类型 java.lang.ref整体包结构 类型 对应类 特征 强引用 强引用的对象绝对不会被gc回收 软引

ywb201314的专栏 986

电气论文实现:前推回代在IEEE33节点中的潮流计算实现(matlab,python)

本文首先介绍了前推回代的原理。然后基于IEEE33节点算例,分别用python和matlab运用前推回代进行了潮流计算。

总裁余(余登武)博客 8608

一位前BAT面试官,详聊进入BAT的面试经验

找工作之前,有一点你必须清楚,就是找工作是一件看缘分的事情,不是你很牛逼,你就一定能进你想进的公司,都是有一个概率在那。如果你基础好,项目经验足,同时准备充分,那么你拿到offer的概率就会比较高;相反,如果你准备不充分,基础也不好,那么你拿到offer的概率就会比较低,但是你可以多投几家公司,这样拿到offer的几率就要大一点,因为你总有运气好的时候。所以,不要惧怕面试,刚开始失败了没什么的,多...

小码农 TT 2116

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

一位前BAT面试官详谈进入BAT面试经验

“ 之前有一篇文章“最强攻略:java程序员如何通过阿里、百度社招面试”谈到了进入BAT需要掌握的技术知识点,关注优知学院可以获得。很多同学看完后,一直在说能否与面试一起结合谈谈这方面的经验。所以,补充了本篇文章。 希望能使大家在未来少走点弯路! 找工作之前,有一点你必须清楚,就是找工作是一件看缘分的事情,不是你很牛逼,你就一定能进你想进的公司,都是有一个概率在那。如果你基础好,项目经验足,同时准备充分,那么你拿到offer的概率就会比较高;相反,如果你准备不充分,基础...

一个有情怀的程序猿博客 1397

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

BAT面试官告诉你如何回答你的职业规划

前言(Why) 在面试中不论是在一面二面三面这种技术面,还是在最后的hr面,经常会被人问及,"谈谈你的职业规划"这种问题,我们回答的很可能会给我们的面试表现加分,如果回答地不好,对于一些面试官来说无伤大雅,但对于某些 面试官来说,可能直接就会给我们pass掉,可能有些人看到这里会说,“乔兄,你就在吓我吧,哪有这么严重,哼!”,我当初也是这么想的,直到我在秋招中付出了惨重的学费,才知道回答这类问题的...

qiyue683209的博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

挑战BAT面试官之JVM垃圾收集器

BAT一直是广大程序员的梦想殿堂,不仅BAT的待遇在国内的IT行业中领先的,更在于BAT的技术也走在互联网的前列。因此,无论你是想有更高的薪资,还是追求极致的技术,都想去BAT里面镀金,有的可能在里面职位越混越高,有的可能干几年就出来创业或者到小的公司去当CTO。然而BAT的面试向来是非常严苛的,相信60%的人都直接被BAT的面试官干倒,30%的人能和BAT的面试官死磕到底,最后双方都歇斯底里,还有10%的人能干倒BAT的面试官。

Discovery的专栏 571

作为BAT大厂面试官,谈谈大厂技术面试

今天想分享面试相关的事情,希望也能帮助到有需要的读者。从去年开始幸运地成为了我司的一名面试官,至今为止也面了大几十个人,从清北、北邮的学生, 到BAT大厂的员工也都有面到,也算是小有经验了。这里想总结下这半年的面试经验,写这篇文章 主要有几个目的:1、对自己: 经验总结,有助于自我的提升,后面做得更好2、对面试官:横向对比,交流经验,了解其他公司的招聘要求3、对候选人:了解大厂面试官的出题框架、常⻅面试流程可以帮助你更好的准备面试,早日斩获offer。

主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。 625

Java面试官在面试时喜欢问哪些问题?

作为一名技术总监,我管理的技术团队有100多人,面试的Java程序员不要太多。 不同的面试官,面试的要求也不太一样,例如:有的要求表达好、会沟通;有的要求技术好、能直接上手撸代码,搞项目;有的要求人踏实、稍微带一带,能干活就行;有的要求。。 。 我的面试过程基本都是问答形式,想当年我去参加面试的时候,我非常非常非常不喜欢笔试。所以我现在也不给别人安排笔试。 我面试不会随便乱问,提问是有条理的。接下来就聊聊,我经常会提的一些问题,以及问题背后的一些想法吧。 1. 预热部分 Q:请简单做一下自我介绍?

IT1124的博客 3789

2024年作为BAT大厂面试官,谈谈大厂技术面试,软件测试系统工程师面试宝典

今天想分享面试相关的事情,希望也能帮助到有需要的读者。从去年开始幸运地成为了我司的一名面试官,至今为止也面了大几十个人,从清北、北邮的学生, 到BAT大厂的员工也都有面到,也算是小有经验了。这里想总结下这半年的面试经验,写这篇文章 主要有几个目的:1、对自己: 经验总结,有助于自我的提升,后面做得更好2、对面试官:横向对比,交流经验,了解其他公司的招聘要求3、对候选人:了解大厂面试官的出题框架、常⻅面试流程可以帮助你更好的准备面试,早日斩获offer。

2401_84564150的博客 1205

Java 四种引用类型,强、软、弱、虚,你是哪一种

憋说话,我很强!

Craig无忌 4076

从Java小白到收获BAT等offer,分享我这两年的经验和感悟,BAT 面试官 如何面试

写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。扫码加微信好友进【程序员面试学习交流群】,免费领取。也欢迎各位一起在群里探讨技术。 微信公众号【程序员江湖】 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条、网易、滴滴等 8 个大厂 offer,目前致力于分享这几...

ccc_ccc8的博客 1138

BAT面试官谈:招Java程序员我的标准其实不复杂

上周,密集面试了若干位Java后端候选人,工作经验在3到5年间。我的标准其实不复杂: 第一能干活,第二Java基础要好,第三最好熟悉些分布式框架。我相信其它公司招初级开发时,应该也照着这个标准来面的。 我也知道,不少候选人能力其实不差,但面试时没准备或不会说,这样的人可能在进团队干活后确实能达到期望,但可能就无法通过面试,但面试官总是只根据面试情况来判断。 但现实情况是,大多数人可能面试前没...

刀哥谈Java的博客 962

BAT大厂最全1318道Java中高级面试题附答案详解,最全面详细,看完稳了

我相信大多 Java 开发的程序员或多或少经历过 BAT 一些大厂的面试,也清楚一线互联网大厂 Java 面试是有一定难度的,小编经历过多次面试,有满意的也有备受打击的。因此呢小编想把自己这么多次面试经历以及近期的面试真题来个汇总分析,阐述下如何去准备,去回答面试官的提问,可以和面试官有个愉快的交谈。

m0_50180963的博客 792

BAT面试官告诉你如何在面试中介绍自己的项目经验

文末给大家准备了,小礼物哦!! 前言 在面试时,经过寒暄后,一般面试官会让介绍项目经验 。常见的问法是,说下你最近的(或最拿得出手的)一个项目。 根据我们的面试经验,发现有不少候选人对此没准备,说起来磕磕巴巴,甚至有人说出项目经验从时间段或技术等方面和简历上的不匹配,这样就会造成如下的后果。 第一印象就不好了,至少会感觉该候选人表述能力不强。 一般来说,面试官会根据候选人介绍的项目背景来...

芒果不是程序猿v: 的博客 435

18—19年BAT大厂Android高级多套面试专题整理集合(面试资料专题包分享)

#面试经验分享(面试的一些基本问题及如何准备面试)##面试题答案整理及面试相关视频整理分享这里放上一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套,在这里给大家,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,也可以加一下这个技术群。

2401_84121958的博客 897
上一篇: JAVA日志的前世今生,BAT 面试官 如何面试
下一篇: 从.Net到Java学习第一篇——开篇,大厂 HR 如何面试
ccc_ccc8
博客等级 码龄8年 8粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值