![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
javajava
文章平均质量分 61
java优秀使者
学习也是一种乐趣
展开
-
JavaScript中内存使用规则--堆和栈
堆和栈都是运行时内存中分配的一个数据区,因此也被称为堆区和栈区,但二者存储的数据类型和处理速度不同。堆(heap)用于复杂数据类型(引用类型)分配空间,例如数组对象、object对象;它是运行时动态分配内存的,因此存取速度较慢。栈(stack)中主要存放一些基本类型的变量和对象的引用,其优势是存取速度比堆要快,并且栈内的数据可以共享,但缺点是存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。 ...原创 2018-12-20 22:17:00 · 82 阅读 · 0 评论 -
面试——谈谈你对Java 平台的理解
经典回答 Java语言是一种面向对象的高级语言,它最显著的有两个特性,一是通过平台中立的class文件格式和屏蔽底层硬件差异的jvm实现‘一次编写,到处运行’;二是通过‘垃圾收集器’管理内存的分配和回收。 Java 是一种简单、严谨并且适合编写的语言,它不像C/C++ 那样有很多晦涩难懂的内容,如头文件、指针、结构等等。我们编写java 会接触到 JRE(Java Runtime Environm...原创 2018-12-25 21:08:20 · 232 阅读 · 0 评论 -
Java 对象的内存布局
对象头 对象头的信息主要包括两个部分: Mark Word 类型指针 数组长度(如果是数组才有) 1.1 Mark Word Mark Word 的定义: Mark Word 用于存储对象自身的运行时数据,如哈希码(HashCode)、GC 分代年龄、锁状态标志、线程持有的锁、偏向线程ID 、偏向时间戳等。这部分数据的长度在32 位和64 位的虚拟机中分别为32 bit 和64 bit 。 问...原创 2018-12-25 21:07:22 · 135 阅读 · 0 评论 -
关于乐观锁与悲观锁的实际应用
开门见山,先聊一聊我实际遇到的业务问题:在项目中有一个竞猜下注的功能,它的赔率是根据A队和B队两边的下注总金额来计算的。于是当有用户下注某一边时,两边的赔率都会进行相应的变化。反应到数据库里就是(简化版本),一个人下注,会更改数据库盘口表的几个字段:A队赔率,A队下注金额、B队赔率,B队下注金额 等等。 如果使用默认事务方式,就加个@Transactional 注解,会导致更新丢失的问题。(何为...原创 2018-12-24 22:20:46 · 195 阅读 · 0 评论 -
翻译 | Java在2018年的形势
在过去的几个星期里,我一直在做关于“Java年度趋势”的调查。从开始这项事情,这已经是第五年了,而且也是形式最大的一年,将近有5160名开发者参与到这次调查中。 Java版本的采用率 毫无意外,Java8依然在开发社区中占主要地位: 图自原博客 Java9和Java10的采用率依然非常低,分别都只有低于5%的占比。 作为参考,在2017年采用占比为24.4%的Java7在现在也只占了10.6%...原创 2018-12-24 22:18:01 · 86 阅读 · 0 评论 -
Java 容器面试题】谈谈你对HashMap 的理解
为了能够在面试回答中优雅而不失体面回答面试考点,该文章借鉴了不同平台对知识点的描述。 如有侵权请联系我 文章的不足和错误请指正,好的建议也不要吝啬,我都会采纳并更正 您的点赞是我持续更新的动力 我的回答 HashMap 是一种存取高效但不保证有序的常用容器。它的数据结构为“数组+链表”,是解决哈希冲突的产物,也就是我们常说的链地址法。它实现了Map 接口采用K-V 键值对存储数据,并实现了浅拷贝和...原创 2018-12-24 22:13:28 · 236 阅读 · 0 评论 -
函数式编程,真香
最开始接触函数式编程的时候是在小米工作的时候,那个时候看老大以前写的代码各种 compose,然后一些 ramda 的一些工具函数,看着很吃力,然后极力吐槽函数式编程,现在回想起来,那个时候的自己真的是见识短浅,只想说,‘真香’。 最近在研究函数式编程,真的是在学习的过程中感觉自己的思维提升了很多,抽象能力大大的提高了,让我深深的感受到了函数式编程的魅力。所以我打算后面用 5 到 8 篇的篇幅,详...原创 2018-12-22 21:10:45 · 198 阅读 · 0 评论 -
三行代码实现 JS 柯里化
最近有看到一些柯里化的文章,怎么说呢,感觉很奇怪。一篇是阿里云的译文,文章末尾给出了这样一个 “curry”: function curry(fn, ...args) { return (..._arg) => { return fn(...args, ..._arg); } } 作者前面明明例举了柯里化和部分应用的区别,结果最后说我们实现下柯里化吧,然后...原创 2018-12-22 21:04:23 · 235 阅读 · 0 评论 -
JavaScript专题之数组去重
双层循环 也许我们首先想到的是使用 indexOf 来循环判断一遍,但在这个方法之前,让我们先看看最原始的方法: var array = [1, 1, '1', '1']; function unique(array) { // res用来存储结果 var res = []; for (var i = 0, arrayLen = array.length; i < ...原创 2018-12-22 20:59:55 · 109 阅读 · 0 评论 -
Semaphore-信号量的实现分析
Semaphore Semaphore 信号量:可以用来控制同时访问特定资源的线程数量;通过协调各个线程以保证合理的使用公共资源 构造 // permits 设置许可证的数量 public Semaphore(int permits) { // 默认非公平 sync = new NonfairSync(permits); } // permits 设置许可数量 // fair 设置...原创 2018-12-21 19:50:55 · 117 阅读 · 0 评论 -
JavaScript 模块的发展史
我们都知道 JavaScript 中并没有模块的概念,一开始 JavaScript 的出现只是作为简单脚本语言来实现简单的页面逻辑,而随着互联网的发展和 web 2.0 时代的到来,前端代码呈现井喷式发展,随着代码量的增加,模块缺失的问题日益凸显,而同时 JavaScript 社区也做了很多探索。 那么什么是模块呢? 模块,是指能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构...转载 2018-12-20 22:08:30 · 141 阅读 · 0 评论 -
你的知识死角不能否定你的技术能力
有些人通过我账号资料里的微信加我,然后问我一些所谓“怎么办”的问题,不是我不告诉你,而是我确实不知道。我确实有很高的title,也确实有很多的技术积累,但我并没有达到知识的“百宝盒”的水平。 换个角度重新说这句话“这么简单的问题你都不知道,你配得上你的title吗?” 技术能力 我们放下技术先不谈,只说能力。当你同时面对工作进度紧张,家里事务繁琐,你是如果做时间管理的?当你面对20个offer,需...原创 2018-12-25 21:09:54 · 115 阅读 · 0 评论