当前位置: 首页 > news >正文

计算机基础知识复习8.14

子线程抛异常主线程能否catch

在不做任何处理的情况下,主线程不能catch

解决方式:

子线程使用try catch来捕获异常

为线程设置未捕获异常处理器UncaughtExceptionHandler

通过future的get方法捕获异常

JVM相关参数

显示指定堆内存-Xms和-Xmx指定最小堆和最大堆

显示指定新生代内存 -XX:NewSize,-XX:MaxNewSize指定新生代最小内存和最大内存

显示指定元空间大小-XX:MetaspaceSize=N 设置Metaspace的初始大小,-XX:MaxMetaspaceSize=N设置Metaspace的最大大小

显示指定垃圾回收算法 -XX:+UserG1GC/-XX:+UserConcMarkSweepGC

记录GC日志记录:-XX:+PrintGCDetails打印基本GC信息

TreeMap和HashMap的区别

TreeMap实现了NavigableMap和SortedMap接口,相比于HashMap多了对集合中的元素根据键排序的能力以及对集合内元素的搜索能力

Bean是线程安全的吗

spring框架的bean是否线程安全,取决于其作用域和状态,常见作用域分为prototype和singleton,几乎所有场景都用singleton

prototype作用域下,每次获取都会创建一个新的bean实例,不存在资源竞争问题,不存在线程安全问题,对于singleton,IOC容器只有唯一的bean实例,可能存在资源竞争,如果bean有状态的话,就存在线程安全问题,对于有状态单例bean的线程安全问题,可以在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在ThreadLocal中

JVM内存结构

程序计数器 Java虚拟机栈 本地方法栈 堆区 方法区

程序计数器:是一块很小的内存空间,是线程私有的,是当前线程正在执行的那条字节码指令的地址。他的作用是在多线程环境下,程序计数器记录当前线程执行的位置,从而当线程切换回来时,就知道上次线程执行到哪了

Java虚拟机栈会为每一个即将运行的java方法创建一块叫做栈帧的区域,用于存放该方法运行过程中的一些信息:局部变量表,操作数栈,动态链接,方法出口信息

本地方法栈是为了JVM运行Native方法准备的空间,很多native方法都是用c语言实现的

堆区:存放对象的内存空间,线程共享,所有线程都访问同一个堆

Fail-Fast机制

fail-fast机制是一种快速失败的策略,用于在集合迭代期间检测到其他线程对集合的结构进行修改,当fail-fast机制检测到并发修改时,会立即抛出concurrentModificationException异常,防止迭代继续执行,这样可以避免在不确定状态下进行迭代,保持数据的一致性。

Fail-fast机制通过在ArrayList内部维护一个modCount变量来实现,modCount记录了对ArrayList的结构进行修改的次数,在每次迭代开始时,会将modCount的值保存在一个局部变量expectedModCount中,然后在迭代过程,会再次检查modCount和expectedModCount是否相等,如果不相等,就说明有其他线程对ArrayList进行了修改,就会立即抛出ConcurrentModificationException异常

ArrayList相关

ArrayList初始化数组默认长度为10

ArrayList扩容为原来的1.5倍,扩容后是用新的数组,不是线程安全的

Java空对象引用占用内存吗

需要占用4或者8字节(取决于他是32位还是64位操作系统)

Linux查看端口的命令

lsof -i:端口号

netstat -tunlp |grep 端口号

TCP和UDP可以同时绑定相同的端口吗

在数据链路层中,通过mac地址来寻找局域网的主机,在网络层中,通过ip地址来寻找网络中互连的主机或路由器。在传输层中,需要通过端口来寻址,来识别同一计算机中同时通信的不同应用程序。所以,在传输层的端口号的作用,是为了区分同一主机上不同应用程序的数据包。传输层有两个传输协议分别是TCP和UDP,在内核中是两个完全独立的软件模块。当主机收到数据包后,可以在IP包头的协议号字段知道包是TCP/UDP,所以可以根据这个信息确定送给哪个模块处理,送给TCP/UDP模块的报文根据端口号确定送给哪个应用程序处理

TCP如何保证传输的可靠性

TCP实现可靠传输的方式, 可以通过序列号与确认应答。在TCP中,当发送端的数据到达接受主机时,接收端主机会返回一个确认应答消息,表示已收到消息

使用滑动窗口来告诉发送端自己还有多少缓冲区可以接受数据,于是发送端就可以根据接收端的处理能力来发送数据,而不会导致接受端处理不过来

引入拥塞控制,即只要发送方没有在规定时间内接受到ACK应答报文,也就发生了超时重传,就会认为网络出现了拥塞。只有在网络中没有出现拥塞时,拥塞窗口就会增大,网络中出现了拥塞,拥塞窗口就会减少

引入流量控制,控制发送方的发送速率不要太快,利用滑动窗口就可以实现发送方的流量控制

参考资料:
Java 面试指南 | JavaGuide

小林coding

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • redis随笔记
  • 位运算使用
  • 汇编语言lea指令取数组偏移地址
  • C++:priority_queue类
  • JavaScript class和正则
  • 10天速通Tkinter库——Day 5:使用config进行OptionMenu美化
  • Minio web控制台实现授权管理
  • 使用 nginx 搭建代理服务器(正向代理 https 网站)指南
  • 【Java】—— 使用Java编写程序找出100以内的质数
  • 理解类方法和静态方法:Python 中的高级函数
  • Nginx负载均衡调度状态
  • 哇哦--一起学习接口叭
  • XSS总结知识点+例题实操
  • 探索 HarmonyOS 的层叠布局:灵活的 Stack 容器
  • Vmware WorkStations 17 ,centos 安装 vmware tools
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • angular学习第一篇-----环境搭建
  • JavaScript 基本功--面试宝典
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 警报:线上事故之CountDownLatch的威力
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 面试总结JavaScript篇
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 数据可视化之 Sankey 桑基图的实现
  • 思考 CSS 架构
  • 听说你叫Java(二)–Servlet请求
  • 微信小程序设置上一页数据
  • 系统认识JavaScript正则表达式
  • 用Python写一份独特的元宵节祝福
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​香农与信息论三大定律
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #pragma multi_compile #pragma shader_feature
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (web自动化测试+python)1
  • (ZT)出版业改革:该死的死,该生的生
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十五)使用Nexus创建Maven私服
  • (一)SpringBoot3---尚硅谷总结
  • (一)VirtualBox安装增强功能
  • (转)C#调用WebService 基础
  • (转载)Google Chrome调试JS
  • .htaccess配置重写url引擎
  • .jks文件(JAVA KeyStore)
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 5种线程安全集合