Java深究1

2023-11-06

此篇文章仅代表作者个人所学所悟,并不构成指导指引作用。

在这篇博客之前,已经读过相当数量的Java书籍,但一直都没有去总结。如今将自己所学所悟分享出来。

《Java特种兵 上册》

这本书的毕竟是作者的处女座,书中有太多地方感觉很肤浅,也很冗余,内容组织不够清晰,不过还是有很多值得去学习的地方。当然只能说书内容是这样,并不能说人家作者本身是这样。

1.对于前三章我都兴趣不大,因为我主要想了解下,作者作为一个淘宝大数据量处理专家,对于Java编码过程中优化问题的建树。其中提到在比较数据时,我们使用原始的Java运算符,与或非,异或,左移(乘以2的阶乘),右移(除以2的阶乘)来完成,效率更高。

A,B两者交换:

A=A^B;
B=A^B;
A=A^B;
判断A与B是否相等:

A=0x00000001;
return A&B!=0; 

 
2.先看以下代码: 

int a=1;
a=a++;
这段代码如果要打印a的值,会是1,为什么呢?作者从javap编译指令角度来阐述为什么会是1,而不是2。可以这么去理解:

int tmp=a;
a++;
a=tmp;
从编译后指令可以看出,在进行a=a++;先进行的是a=a,那么就会先将a=1本地变量弹到栈顶,然后是本地变量自增,接着因为是本行指令执行完毕,那么出栈并将当前栈顶的a=1写入本地变量.此时a只能是1,而不是2。那如果是a=++a;也自然好理解肯定不是先赋值而去弹到栈顶,而是先本地变量自增,然后弹栈顶出栈赋值。

3.关于集合类:集合类包含List,Map,Set几大接口。以下逐一来说明常用集合类的特点及所适用场合(非书本,自我查找学习)

ArrayList:基于数组来实现,常用于基于下标访问的地方,如果有明确的长度,也适用ArrayList。

LinkedList:基于链表实现的List,多用于插入,删除操作频繁的列表。List list = Collections.synchronizedList(new LinkedList(...));来完成同步操作,它的遍历需要视图来完成,当然Iterator是快速失败的。

Vector:这是一种可以动态增长的数组,当然它也是同步的。它的遍历是需要用到iterator的,它的视图是快速失败的。

HashMap:当然是我们需要使用k,v方式来存储的时候,也经常用于cache。

TreeMap:基于红黑树实现的Map,存入的k,v会根据key的自然顺序或者指定的顺序进行内部排序。非同步。

HashTable:这是一个JDK1.4版本提供的一个用于同步的collection类。

LinkedHashMap:无需增加与 TreeMap 相关的成本。使用它可以生成一个与原来顺序相同的映射副本,而与原映射的实现无关。此实现不是同步的。当然可以使用Collection的工具类:Map m = Collections.synchronizedMap(new LinkedHashMap(...));

ConcurrentHashMap:与HashTable类似,但是更为先进,它是JDK1.5诞生的,相比于HashTable它的优势用如下图来表示更为直观:

后者更为先进的地方就是内部多了一个segment的划分,原本我们使用HashTable进行多线程并发操作时,同一时间只能有有一个线程对Map进行操作,其他的只能Blocked,而ConcurrentHashMap它就将原本一个Map分成了多个segment,而它是在每一个segment级别上进行的synchronized,所以同一时间ConcurrentHashMap可以多个线程并发操作,所以也称之为非阻塞式并发操作。

Java还提供了一些非常用的数据结构,或者称之为集合类:

Stack:这从JDK1.0开始就有的,是扩展版本的Vector,后进先出(LIFO)的对象堆栈。

Queue:在Java中这是一个接口,它是符合先进先出的队列原则的,它有很多子类和子接口。

Deque:它是Queue的子接口,当然它本身也是接口,它是一双端队列,首尾两端都可进行插入和删除操作。

4.volatile与synchronized区别

volatile这个只能用来修饰基本简单变量,同时它只是保证了在main memory中保存的变量的值能够与各个线程自己的memory(寄存器)能同步,它并没有锁的机制和概念,只是在每个线程要对这个被修饰的变量的值操作时,它会从main memory从重新获取一次,而不是直接从自己线程的寄存器中直接获取。这个修饰符当然也不能保证原子性的操作,[原子性操作是指例如A转账给B,这个操作背后实际包含了两步操作,A账户扣款,B账户入账,那么原子性就是指这两步都必须成功,其中一步有可能失败都不能称之为具有原子性]因为诸如i++这样的操作,它看似只是一个操作,但是对于虚拟机的指令中会执行三步:read i; inc; write i.所以它并不能保证一个线程在读的时候,另外一个线程去进行写操作。

而synchronized这个修饰符是用来修饰块和方法的,它的加锁机制可以保证一个事务的原子性操作。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java深究1 的相关文章

  • Java 使用服务器证书对 jar 进行签名

    是否可以使用服务器证书来签署 java web start 应用程序 我想知道的是它是否有效 我的服务器有一个受信任的证书 并且我想重复使用同一证书来签署应用程序 现在 我有这样的警告 此 jar 包含其签名者证书的 ExtendedKey
  • 将所有 BigDecimal 运算设置为特定精度?

    我的Java程序以高精度计算为中心 需要精确到至少120位小数 因此 程序中所有非整数都将由 BigDecimal 表示 显然 我需要指定 BigDecimal 的舍入精度 以避免无限小数表达式等 目前 我发现必须在 BigDecimal
  • 初始向量(IV)的CTR模式使用

    据我所知 CTR 模式不使用初始向量 它只需要一个计数器 用给定的密钥对其进行加密 然后将结果与明文进行异或以获得密文 其他分组密码模式 例如 CBC 在进行加密之前 会使用初始向量对明文进行异或 所以这是我的问题 我在 Java 中有以下
  • 使用 TreeMap 和 Comparator 按值对 HashMap 进行排序

    我使用以下代码创建哈希图 然后使用树形图和比较器对哈希图中的值进行排序 然而 输出结果却出乎意料 所以任何关于我做错了什么的想法都会有帮助 Code public static void main String args System ou
  • Java如何删除设置了IMMUTABLE位的文件

    正在开发一个 Java 8 项目 我从外部源复制文件 在这些源之一中 文件设置了不可变位标志 In OSX这是这样设置的 sudo chflags schg path to file In Linux chattr i path to fi
  • 使用Java获取CSS文件中图像的URL?

    我正在尝试使用 Java 获取远程 CSS 文件中图像 所有 MIME 类型 的 URL 我正在使用 jsoup 来获取 css 的 URL 经过无数个小时的观看CSS解析器 http cssparser sourceforge net 由
  • 术语“引用”的起源,如“通过引用传递”

    Java C 语言律师喜欢说他们的语言按值传递引用 这意味着 引用 是调用函数时复制的对象指针 同时 在 C 中 以及 Perl 和 PHP 中更动态的形式 引用是其他名称 或动态情况下的运行时值 的别名 我对这里的词源感兴趣 参考 一词的
  • 向 JList 添加滚动条? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何将 JList 添加到 JScrollPane 把你的JList in a JScrollPane JScrollPane scrol
  • 使用 Hibernate 和 Apache DBCP 的 MySQL 连接池问题

    看来我的应用程序有问题 当应用程序在启动后闲置很长时间 我不确定确切的时间 时 我会在日志中收到以下错误消息 我使用 Spring Hibernate MySQL 和 ApacheDBCP 进行连接池 ERROR org hibernate
  • @Cachable 在没有输入参数的方法上?

    我有问题 org springframework cache annotation Cachable注解 Bean public ConcurrentMapCache cache return new ConcurrentMapCache
  • IntSummaryStatistics的summaryStatistics方法

    为什么空 IntStream 上的 summaryStatistics 方法返回整数的最大和最小值作为流中存在的最大和最小 int 值 IntStream intStream IntStream of IntSummaryStatistic
  • a4j:commandLink 重新渲染后停止工作

    我创建了这个测试用例来隔离我的问题 一旦轮询执行 ajax 更新 a4j commandLink 操作就不会执行 如果我们在轮询重新渲染之前关闭 modalPanel 则会执行它 有什么建议吗 提前致谢 测试 xhtml
  • Java检测鼠标长按

    如果用户按下 JList 组件超过 3 秒 有什么方法可以捕获事件吗 我发现困难的部分是即使在用户松开鼠标左键之前也需要触发事件 这可以通过 mousePressed 和 mouseReleased 组合轻松完成 您可以在 mouseDow
  • Spring Boot 多部分文件始终为 null

    我正在使用 Spring Boot version 1 4 0 RC1 和 Spring Boot Stormpath 1 0 2 我正在尝试使用分段文件上传 但控制器中的 MultipartFile 始终为空 当我使用 RequestPa
  • 如何使用键盘上的“删除”按钮作为从 JTable 中删除行的快捷方式[重复]

    这个问题在这里已经有答案了 可能的重复 如何制作删除按钮来删除JTable中的行 https stackoverflow com questions 13236206 how to make delete button to delete
  • Java 泛型:将 Object o 的类与 进行比较

    假设我有以下课程 public class Test
  • iText7 将 SVG 添加到 PdfDocument 中以及可能出现的问题

    关于问题的答案 如何使用 iText7 将 SVG 添加到 PDF 这是一个链接点击这里 https stackoverflow com questions 50059456 how to add an svg to a pdf using
  • Wildfly 10.1 消耗所有核心

    我们最近将银行应用程序从 java 1 6 升级到 1 8 将 jboss 4 x 升级到 wildfly 10 1 我们观察到 java 消耗了机器上可用的所有核心 10 有人可以告诉是什么原因吗 通常情况下 jboss 4 x 的最大
  • Java XML 解析器添加不必要的 xmlns 和 xml:space 属性

    我在 Windows 10 上使用 Java 11 AdoptOpenJDK 11 0 5 2019 10 15 我正在解析一些旧版 XHTML 1 1 文件 这些文件采用以下一般形式
  • Jackson 的 ObjectMapper 和 SQL 中的 RowMapper

    我们正在使用对象映射器 当将 ObjectMapper 与 RowMapper 一起使用时 是否应该在每个 mapRow 内部 如下所示 声明它 还是在 mapRow 外部声明为类公共成员 我认为根据本文 它应该作为公共类成员在外部 我应该

随机推荐

  • 华为android如何删除,华为手机内存中的“其他”能删除吗?现在就来揭秘

    原标题 华为手机内存中的 其他 能删除吗 现在就来揭秘 安卓手机用了不到两个月 其他 类数据占了10G 我相信不仅仅你一个人会遇到这种情况 如果你经常使用手机 那设备的存储空间当中肯定有很大一部分被归为 其他 类的数据所占据 用的时间越久
  • 字符串7:重复的子字符串

    主要是我自己刷题的一些记录过程 如果有错可以指出哦 大家一起进步 转载代码随想录 原文链接 代码随想录 leetcode链接 459 重复的子字符串 题目 给定一个非空的字符串 s 检查是否可以通过由它的一个子串重复多次构成 示例 示例 1
  • ug12.0安装教程以及UG12许可证安装

    ug12 0安装教程以及UG12许可证安装 附中文版百度云下载地址 知乎 zhihu com 参考该文章 切记 如果忘了修改 安装完成后 计算机右键 属性 高级 环境变量 系统变量中找到SPLM LICENSE 编辑 将值改为27800
  • MMEditing 介绍——注册器

    目录 什么是注册器 注册器工作原理 为什么要用注册器 MMEditing 中的注册器 注册器带来的不便如何解决 什么是注册器 python 的 register 可以理解为一个字典 字典中存储了 class function 的名称和内容
  • UE4之接口

    参考 https docs unrealengine com zh CN Programming UnrealArchitecture Reference Interfaces index html 接口的模式比较固定 下面就上我定义的接口
  • Tomcat中常见线程说明

    本文讲述了Tomcat的常见线程的功能 名称 线程池和配置等信息 其中源码来自于Tomcat 6 0 18 Work线程 功能 HTTP请求的处理线程 非NIO 当有新的http请求进来后 则会从线程池中获得一个线程Work对象 调用Wor
  • 什么是webhook?

    1 什么是webhook webhooks是一个api概念 是微服务api的使用范式之一 也被成为反向api 即 前端不主动发送请求 完全由后端推送 举个常用例子 比如你的好友发了一条朋友圈 后端将这条消息推送给所有其他好友的客户端 就是
  • 国内VS Code下载速度慢

    在知乎上面看到一个非常有效的方法 原链接 国内下载vscode速度慢问题解决 知乎 具体方法如下 1 直接百度搜索VS CODE 点击下载后获取下载链接 2 取出链接 并替换原链接中域名为vscode cdn azure cn 将新链接粘贴
  • 学习Spring

    1 如何学习Spring 你可以通过下列途径学习spring 1 spring下载包中doc目录下的MVC step by step和sample目录下的例子都是比较好的spring开发的例子 2 AppFuse集成了目前最流行的几个开源轻
  • STM32命名规则

    STM32型号命名规则如下 STM32型号的说明 以STM32F103ZET6这个型号的芯片为例 该型号的组成为7个部分 其命名规则如下 1 STM32 STM32代表ARM Cortex M3内核的32位微控制器 2 F F代表芯片子系列
  • Java 基础语法

    使用ide来进行编程 对于java来说 最好的idle 是intellijidea IDEA 通过一个例子练习 idea 一 超市管理系统功能 使用ide来进行编程 java最好的ide 是idea 1 import java util A
  • python--字典概念以及基本使用 -- 小黑学习驿站

    字典应用案例 697条消息 python 商店购物案例 字典篇 小黑学习驿站 小黑日志的博客 CSDN博客 697条消息 python学习 计算学生成绩排名案例 字典篇2 小黑学习驿站 小黑日志的博客 CSDN博客 字典基本概念 映射关系
  • 关于渠道包

    渠道包指的是在各大应用市场 发布的apk包的清单文件中 某个meta data标签下 配置的value不一样 这个标签的作用就是用来区分是哪个市场的 比如你发布到360 这个值就是你就可以配置成360 豌豆荚就可以配置成wandoujia
  • 微信小程序云开发之——网页跳转小程序

    一 微信小程序开通云开发 微信小程序公众平台拿到如下参数 你的小程序信息 小程序 AppID 填入你的小程序 AppID 云开发环境 ID 填入你的开通了静态网站托管的云开发环境 ID 想要拉取的小程序信息 小程序原始账号 ID 填入要跳转
  • 微信小程序授权登录详解

    文章目录 流程 wx login auth code2Session 实战 前端代码 后端代码 流程 说明 调用 wx login 获取 临时登录凭证code 并回传到开发者服务器 调用 auth code2Session 接口 换取 用户
  • 撮合前端平台在低代码平台的落地实践

    在京东技术的发展当下 不同的业务线 不同的区域 甚至于很多触达消费者的端 正在被中台架构能力所支撑 大家都很清楚 中台建设能够带来技术的规模化效应 具有提高业务协同 加速创新和交付速度 提高系统稳定性和可靠性 降低成本和支持业务快速发展等优
  • torch.device函数

    torch device 是 PyTorch 中用于表示计算设备 如CPU或GPU 的类 它允许你在代码中指定你希望在哪个设备上执行张量和模型操作 本文主要介绍了 torch device 函数的用法和功能 本文主要包含以下内容 1 创建设
  • 怎么把一个json文件读取到java中

    要把一个 JSON 文件读取到 Java 中 可以按照以下步骤进行 导入 JSON 库 Java 中常用的 JSON 库有 Jackson Gson Fastjson 等 可以根据个人喜好和项目需求选择相应的库 并导入到项目中 读取 JSO
  • # SSM框架-->Spring

    SSM框架 gt Spring 文章目录 SSM框架 gt Spring 1 1 Spring是什么 简介 1 2 Spring 的发展 1 2 1Spring Framework的特点 1 2 2 Spring的体系结构 1 2 2 1
  • Java深究1

    此篇文章仅代表作者个人所学所悟 并不构成指导指引作用 在这篇博客之前 已经读过相当数量的Java书籍 但一直都没有去总结 如今将自己所学所悟分享出来 Java特种兵 上册 这本书的毕竟是作者的处女座 书中有太多地方感觉很肤浅 也很冗余 内容