八股打卡(四)

小黄鸭机器人技术全解-第 07 章 关节自由度与行程参数 —鸭子歪着头转头时,转的平面是斜的,这正是它"灵动"感的来源。仿真里这是自动的(轴定义在父刚体系),复刻时不需要做任何事—— 阅读详情

HashMap的put方法(回顾复习)

  1. 判断键值对数组是否为空或null,如果是则进行resize()扩容;
  2. 根据key计算哈希值得到table中对应的索引i。如果table[i]为null,说明数组的该位置没有值,新建一个节点插入,若超出容量则扩容;如果table[i]不为null,说明该位置油值,发生了哈希冲突;
  3. 判断数组该位置的首个元素的hashCode和equals是否与key相同。若相同,那么就覆盖对应的value;若不相同,那么需要在链表或者红黑树上查找;
  4. 判断table[i]是否为TreeNode。若是,则它是红黑树,插入键值对;若不是,则为链表;
  5. 先遍历链表的长度,若长度大于等于8,则转化为红黑树,插入键值对;若长度小于8,则在链表中插入。在遍历链表的过程中若找到key,则直接覆盖其value;
  6. 超出容量则扩容。

HashMap的扩容机制

JDK1.8之前

  1. 生成新数组;
  2. 遍历老数组每个位置的链表每个元素;
  3. 获取每个元素的key,基于新数组的长度,计算出元素在新数组中的下标位置;
  4. 将元素添加到新数组;
  5. 元素转移完毕,将新数组赋值给HashMap的table属性。

JDK1.8之后

  1. 生成新数组;
  2. 遍历老数组中的链表和红黑树;
  3. 如果是链表,计算出元素在新数组中的下标直接插入;
  4. 如果是红黑树,计算出元素在新数组中的下标,统计每个下标的元素个数,大于等于8那么生成新的红黑树,将根节点放在新数组对应位置;小于8则生成新的链表,将头节点放在新数组的对应位置
  5. 元素转移完毕,将新数组赋值给HashMap的table属性。

HashMap的线程安全性

HashMap是线程不安全的。
原因有:

  1. 并发修改:当多个线程对一个HashMap进行并发读写操作,读取的数据可能不一致,造成并发修改异常。
  2. 非原子性:HashMap的操作是非原子性的,例如检查某些键是否存在或者根据键获取值等,多线程环境下可能产生竞态条件。

如何实现线程安全:

  1. 使用Collections.synchronizedMap方法可以创建一个线程安全的HashMap;
  2. 使用ConcurrentHashMap:专门为多线程环境设计的,使用分段锁的机制,能够是得多个线程并发进行读操作,提高并发性能。
  3. 在自定义的HashMap中使用显示的锁(如ReentrantLock)。

ConcurrentHashMap的线程安全性

  1. JDK1.7中HashMap使用数组和链表,常用Segment和ReentrantLock;
  2. JDK1.8中HashMap使用数组链表红黑树,通过CAS操作和synchronized保证线程安全。

HashSet vs. HashMap

  1. 使用
    HashMap用于存储键值对,每个键唯一,每个键对应一个值;
    HashSet用于存储唯一的元素,不可重复。
  2. 内部结构
    HashMap通过键值对存储数据,由哈希表来实现;
    HashSet基于HashMap实现的,但是它只使用键的部分,将值设置为一个常量。
  3. 元素类型
    HashMap存储键值对,通过键可以获取值;
    Hash Set存储单个元素,只能通过元素本身进行操作。
  4. 是否允许null
    HashMap允许键和值为null;
    HashSet只允许一个null元素。
  5. 迭代方式
    两者都是通过迭代器或增强型for循环遍历。
  6. 关联关系
    HashMap的键值对一一对应;
    HashSet没有对应关系。
  7. 性能
    HashMap收到键的哈希分布和哈希冲突的影响;
    HashSet也受到元素的哈希分布和哈希冲突的影响,但是它只涉及键的部分,所以性能比HashMap稍好。

HashMap vs. HashTable

  1. 同步
    HashTable是同步的,通过在每个方法上加synchronized关键字保证多线程环境的安全;
    HashMap是不同步的,多线程环境下不能保证安全性。
  2. 性能
    在单线程环境中,HashTable的性能要差于HashMap,因为它存在同步开销。
  3. 是否允许null
    HashTable的key 和value都不允许为null;
    HashMap的key和value都可以为null。
  4. 继承方式
    HashTable是Dictionary类的子类;
    HashMap是AbstractMap类的子类,实现了Map接口。
  5. 迭代器
    HashTable的迭代器是通过Enumerator实现的;
    HashMap的迭代器是通过Iterator实现的。
  6. 初始容量和负载因子
    HashTable的初始容量和负载因子是固定的;
    HashMap的这两者可以通过构造方法来设定。

HashMap vs. ConcurrentHashMap

  1. 线程安全性
    HashMap是线程不安全的;
    ConcurrentHashMap是线程安全的,通过分段锁的机制,将数据结构或分为不同的段,每个段都有自己的锁,允许多个线程同时对不同的段进行并发访问。
  2. 同步机制
    HashMap没有明确的同步机制,可以通过外部同步,如Collections.synchronizedMap建立同步HashMap;
    ConcurrentHashMap采用一种更细粒度的锁提高并发性能。
  3. 迭代
    HashMap在迭代时被其他线程修改可能会抛出并发修改异常;
    ConcurrentHashMap在迭代时允许其他线程并发插入删除,不会抛出异常,但是不保证迭代器的顺序,因为不同线程可以会以不同顺序进行操作。
  4. 初始化容量和负载因子
    HashMap通过构造方法设定初始容量和负载因子;
    ConcurrentHashMap通过构造方法设定初始容量和负载因子以及并发级别。
  5. 性能
    低并发下,HashMap的性能可能比ConcurrentHashMap要好,因为后者存在并发控制开销;
    高并发下,ConcurrentHashMap更好。

Java创建线程的方式

  1. 通过继承Thread类
    创建一个继承Thread类的子类,重写其中的run方法。
  2. 实现Runnable接口
    创建一个实现Runnable接口的类,重写其中的run方法,将其实例化作为参数传递给Thread对象。
  3. 实现Callable接口
    创建一个实现Callable接口的类,重写其中的call方法,该方法能够返回结果和抛出异常。使用ExecutorService管理线程池,通过Callable任务获取Future对象,以便在未来某个时刻能够获取Callable任务的计算结果。
  4. 使用线程池
    通过Executor建立线程池,并通过线程池管理线程的创建与复用。

线程run和start的区别

  1. run方法是线程的执行体,里面包含线程执行代码。调用run方法会在当前线程的上下文中执行,不会创建新的线程。
  2. start方法用于启动一个新的线程。调用run方法系统会分配资源给新线程,使其处于就绪状态,当调度器选择该线程时执行run中的代码。

Java中的锁

公平锁/非公平锁

公平锁:按照申请锁的顺序来获取锁。
非公平锁:不按照顺序,可插队。
例如ReentrantLock和synchronized都是非公平锁。

可重入锁

一个线程在外部方法获取了锁,进入内部方法会自动获取锁。
例如ReenTrantLock和synchronized都是可重入锁。

共享锁/独占锁

共享锁:可以被多个线程持有。
独占锁:只能被一个线程持有。
例如: ReentrantLock和synchronized都是独占锁,ReadWriteLock中Read是共享锁,Write是独占锁。

乐观锁/悲观锁

乐观锁:对同一数据的并发操作不会执行,更新数据时采用尝试更新方式。
悲观锁:对同一数据的并发操作一定执行,加锁。
悲观锁用于写操作多的场景,乐观锁用于读操作多的场景。
悲观锁是加锁编程,乐观锁是无锁编程,常采用CAS操作通过自旋方式实现原子更新。

分段锁

ConcurrentHashMap所采用。

偏向锁/轻量级锁/重量级锁

当一段同步代码被一个线程一直访问,那么该线程获得了偏向锁;此时其他线程访问该段代码,通过自旋方式尝试获取锁,不会阻塞,锁升级成为轻量级锁;当自旋达到一定次数还没获得锁,那么锁升级为重量级锁,将所有试图访问的线程阻塞。

自旋锁

获得自旋锁的线程不会阻塞,它循环去获取锁,好处是减少线程上下文切换,坏处循环消耗cpu。

【纯干货分享】常用高速接口眼图模板合集 文章汇集了常见的高速接口的信号眼图测试模板技术要求,比如,LPDDR5/4、PCIe 5.0/4.0、USB、MIPI等等,方便工程师快速进行查询和使用。 阅读详情

相关推荐

CocosCreator视频播放黑屏?手把手教你封装VideoPlayer组件解决Web环境问题

本文针对Cocos Creator在Web环境下视频播放黑屏等常见问题,提供了一套工程化的VideoPlayer组件封装解决方案。文章深入剖析了浏览器自动播放策略、DOM样式隔离等核心挑战,并手把手教你实现一个健壮的管理器,涵盖兼容性处理、性能优化与内存管理,确保视频播放稳定流畅。

plum99的博客 598

卡码网八股训练营40天打卡ending

值得一提的是这个录音打卡的方式,能很好的模拟面试时的情况,因为在面试中,我们很难大段大段地输出专业的名词,只能将相关的知识转换为自己的理解再讲述出来。同时,每天还有精华帖子,可以听一下其他同学的录音,与自己的进行比较,对自己的语音组织进行改进。在这个训练营中,我几乎坚持每天,偶尔遇到有事,也会在之后补回来。通过按时的打卡,我加深了对各类八股文知识的理解,也学习到了新的知识。

linyuanalice的博客 710

Avellaneda & Stoikov模型实战解析:如何动态调整做市策略参数

本文深入解析Avellaneda & Stoikov模型在动态调整做市策略参数中的应用,重点探讨库存状态、剩余时间、风险系数和订单深度等核心参数的实战技巧。通过加密货币市场的实际案例,展示如何根据市场波动和流动性动态调整参数,提升做市策略的盈利能力和风险控制水平。

weixin_29070861的博客 202

40天的八股文总结

四十天前报名参加了卡哥的八股文训练营,在这四十天中每周都在训练营中打卡,可以通过念出来的方式进行八股文的记忆,同时还可以听到其他训练营中的朋友们的打卡,这让人感觉非常的有动力,每天都有更强烈的记忆八股文的信念。回头看都是慢慢的收获。

weixin_45138295的博客 417

AMCL代码详解(六)amcl中的重采样

每次都从w1左边的竖线开始转,显而易见,转到w1的概率为0-w1之间的随机数,转到w2的概率为w1到w1+w2之间的随机数,转到w3的概率为w1+w2到w1+w2+w3之间的随机数,后面的依次类推。当某个粒子的权值较大的时候,产生的随机数落在相应区间的概率就会增大,从而实现了对权值大粒子的多次复制,权值小的粒子的剔除。可以看出,在整个重采样的过程中,粒子进行了两次种情况的刷新,一种是随机生成的新的粒子,一种是对原来的粒子的复制。得到的值越大,说明粒子的权重越小,当前粒子的可信度比较小,需要重采样粒子。

YiYeZhiNian的博客 1579

别再到处找数据了!用Python+Tushare Pro免费获取A股行情、财务、龙虎榜数据(附完整代码)

本文详细介绍了如何使用Python和Tushare Pro免费获取A股行情、财务数据和龙虎榜数据,并构建本地金融数据仓库。通过完整的代码示例,帮助读者快速掌握金融数据接口的使用方法,提升量化分析效率。Tushare Pro作为免费、稳定的数据源,覆盖全面且API友好,是个人投资者的理想选择。

weixin_30596343的博客 617

卡哥四十天八股训练营学习总结与感悟

需要承认的是,这40天的八股内容大多都很基础(就需要这样的),但是卡哥也配备了相应的学习文档执导大家应该学习到什么程度,同时也会给予相应的拓展学习链接(虽然我很少看hhhh)。面试的时候经常会出现这样的情况:前两天背的八股在今天的面试中都用上了,就感觉很爽。而且感觉实习面试的八股都是比较简单的,相对来说基础很多(不知道秋招是不是)。下面我会分两个模块,分别记录实习面试当中被问到的八股训练营内容,以及我被问到的答得不好的其他八股,gogogo。指针和引用的区别,左值引用和右值引用的区别?(记不清了,但必会)

ly_qwq77的博客 1995

MT4-EA自动化交易研究笔记(2022-04-22)

自从接触到mt4的EA自动化交易,更让我这个10多年的老程序员看到了曙光,目前来看也确实出了一点成果,只是是否能稳定盈利有待时间的考验,所以开此专栏,一来做做记录与分析,更好的优化我的EA,二来也希望能与更多的高手交流,以完善我的交易系统

t35254056的博客 2291

代码随想录八股训练营 完成总结

其实我感觉这次的八股打卡还是留有一些遗憾的,因为我在第三周和第四周的时候,生了病心情也不好,直接旷了两周的打卡。不过,我在最后两周的时候,一天打两天的卡,赶着今天把所有的打卡都补完了。

weixin_64434454的博客 1379

用RK3588 NPU加速人脸识别:从本地测试到服务器部署的完整流程(含ONNX模型)

本文详细介绍了如何利用RK3588 NPU加速人脸识别系统,从模型优化到高并发服务部署的全流程。通过RetinaFace和FaceNet模型的协同推理,结合ONNX模型转换和NPU特有优化技巧,显著提升识别效率。文章还涵盖了gRPC通信架构设计、性能压测及实际部署经验,为开发者提供了一套完整的解决方案。

weixin_29058331的博客 464

Unity物理驱动3D汽车实现:从刚体控制到参数调优

在游戏开发中,刚体物理是实现真实物体运动与交互的核心技术。通过Unity的物理引擎,开发者可以模拟重力、碰撞、摩擦力等物理行为,为游戏世界注入真实感。其技术价值在于能够以符合物理规律的方式驱动游戏对象,避免穿墙、无视惯性等问题,从而提升游戏体验的真实性和沉浸感。这一原理广泛应用于角色控制、车辆模拟、物体破坏等场景。本文以3D小汽车为例,详细解析了如何通过Rigidbody组件施加力与扭矩,并利用C#脚本实现玩家输入逻辑,完成一辆可操控、能碰撞的物理驱动汽车。文中重点探讨了AddForce与角速度控制两种方案

weixin_34380948的博客 501

代码随想录八股训练营总结

代码随想录八股训练营总结

m0_67804957的博客 966

大模型在电力交易功率预测中的应用:短期,超短期,中长期的完整解决方案代码详解

本文介绍了基于大模型的电力交易功率预测系统,该系统覆盖超短期(15分钟-1小时)、短期(1-6小时)和中长期(1天-1月)三个时间尺度。文章详细阐述了数据准备与特征工程,包括多源数据集成和特征重要性分析。在模型构建方面,采用了Temporal Fusion Transformer (TFT)模型进行超短期预测,Informer模型进行短期预测,以及N-HiTS模型进行中长期预测。此外,文章还探讨了概率预测与风险分析,并介绍了模型部署与交易策略集成的实现。最后,文章总结了系统的贡献,并展望了未来发展方向,如市

专注AI大模型,软件混淆,授权 1264

关于目前面试八股文的一些心得体会

现在出去面试,明显能够感觉到和之前不一样了,八股文几乎是每个厂家的必备面试环节,从计算机网络,数据库,操作系统,到具体语言的实现细节,都会问到并且会深入去挖掘。这个网站,有配套的视频,有由浅入深的讲解,有几乎全覆盖的从简单的数组到动态规划等进阶难度,非常全面。一方面,随着信息的传播,越来越多的新人涌入了这个赛道,另一方面,众所周知的原因,不管大厂还是小厂在经历寒冬之后,要么裁员,要么停止扩张。自九月初开始,至今为止,坚持了40天的打卡,窃以为,随着时间和自己的努力,对八股文的理解有了很大的提升。

my博客 497

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

代码随想录---八股文训练营Day40(总结)

最后,其实这段40天的八股训练营对我的好处有点多,不论说是帮我梳理了知识体系还是说让我把之前背不下来的八股背下了,这都对我的用处很大,并且我也把这40天的八股训练记成了笔记,也算是我以后面试前突击的一个小资料吧。

qq_50993361的博客 1201

温度PID控制PLC程序

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

代码随想录八股文训练营总结

【摘要】本文总结了代码随想录八股文训练对面试准备的帮助。代码随想录整理的高频题目虽然数量不多,但能串联相关知识点进行拓展,覆盖了大厂常见考题。以TCP四次挥手为例,不仅掌握基础概念,还能深入理解实际应用中的变通方案和相关衍生问题。3月以来的实习面试中,遇到的八股文基本都在准备范围内。建议结合录音功能反复练习回答技巧,同时要根据自身技术栈(如C++)补充其他资料系统整理。最后强调持续学习的重要性。

stm_white的博客 464

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

40天背C++八股文

坚持每天打卡背八股不是一件简单的事,就算在有每天打卡要求的情况下也会漏掉几天,还是需要别人推动你去做这件事,事情驱动型的做,才会做到坚持不懈。为了找工作自己付出了多少时间和精力,一定会在未来有所回报的,朝着心中既定的目标去,一定会成功,只是时间问题,但是我会在既定的时间内做到最好!从今天开始回顾卡码网八股文的同时也要开始背嵌入式的八股,每天都背一点,积少成多!同时每天也要刷题+准备项目!

weixin_47450156的博客 128

代码随想录八股训练营

解决焦虑的最好的办法就是动手做”,我一直也都是很抗拒八股的,从2月开始,一直都跟着八股训练营开始每天打卡八股,即便再忙也会把八股训练营当做一个每天必须完成的任务。虽然现在找实习仍然还是0offer,但是面试的时候八股确实答得很溜了。唉,希望我能够拿到心仪的offer吧。

m0_63594371的博客 120

代码随想录八股文打卡40天心得体会

【代码】【无标题】

summitcode的博客 144

卡码八股训练营40天心得总结

40天,说长不长,说短不短,但对于我来说,这段时间无疑是一次全新的挑战与蜕变。从每天坚持打卡、录音,到不断琢磨“八股”的写作方法,我不仅学会了如何严谨地构思和表达,更在这过程中体会到了持续努力的力量。

qq_45975088的博客 383

代码随想录-八股文训练营-结营总结

代码随想录-八股文训练营-结营总结

Yu13682352451的博客 1053

八股训练营40天打卡

由于自己在本科的基础打的不是很好,有很多东西也是一知半解。最近面临毕业找工作的难题,对于那些八股文很是头疼,在去年的时候我看了一个月的JavaGuide,看的时候觉得已经会了,但是今年回过头再看,发现根本说不出来。后来过年在刷题的时候,看到了代码随想录中有八股文训练营这个平台,感觉这个很不错,能够督促我,并且通过录音知道自己在实际中是什么鬼样子,及时调整。还能看到其他大佬对问题的理解。

NLXXDMX的博客 132

八股训练营总结篇

本人非科班出生,基础很差,起初加入八股训练营的目的是想快速过一遍八股,好在年底找到一个日常实习,但在打卡过程中发现,没有基础直接背诵是很痛苦的一件事,翻来覆去即使背下来了后修还是会忘记。于是边恶补基础边努力打卡,虽然学得云里雾里但还是收获了很多,让我知道基础不牢地动山摇的道理。而且八股的准备过程离不开项目的支持,要优先掌握项目相关的八股,最好理解加记忆,死记硬背是不行的。接下来还会继续注重基础的学习,只有理解了再去看面试题,效率才会更高,加油。

2301_78149965的博客 259

【八股训练营40天打卡感想】

训练营初期,我的技术基础还停留在Java SE和Web开发的入门阶段,对后端开发的很多知识领域都感到陌生。但随着在训练营的学习让我逐步建立起了完整的知识体系。训练营使用的"图解网络"等资料,以直观的方式讲解复杂概念,降低了一定的学习门槛。作为非科班出身,这一点尤为重要。现在,我每天都会记得复习八股知识,这种持续学习的习惯也让我颇为受益。相信在保持这种学习热情和习惯的基础上,我会在技术道路上取得更大的进步。回顾这段学习历程,我收获的远不止知识本身,更重要的是养成了坚持学习的好习惯,找到了适合自己的学习方法。

QingFengshuo的博客 181

参与卡哥八股训练营总结

但是自从一天懈怠之后,从找到实习之后,由于破窗效应,欠下的债越来越多,从一天做一次笔记到一周做一次笔记,到最后不做笔记。不过总算还是完成了所有的打卡,尽管有的内容背完了还是会忘,但是总算是对计网、操作系统、数据库、C++都熟悉了一遍。一开始踌躇满志,每天都背的很认真,认真做笔记。每天从实验室打完工,还会去楼梯间抱着iPad 背八股。一件事情,不管完成度如何,做了就比不做的好,希望在后续秋招过程中,能一直保持学习状态和心态。

Chen_Xuejuan的博客 163

四十天Java八股文打卡训练营的蜕变之旅

过去的四十天,我参加的Java八股文语音打卡训练营不仅让我对Java语言有了更深入的理解,也极大地提升了我的编程技能和问题解决能力。每一天的学习都以语音打卡的形式开始,这种形式强化了我的学习责任感,也增加了学习的互动性。随着每一天的深入学习,我逐渐意识到,坚持这样的学习方式不仅让我在知识上得到了积累,更重要的是,在思维方式和解决问题的方法上也有了显著的提升。我现在看待问题的角度更加全面,解决问题的方法更加多样,编码的速度和质量都有了明显的提升。

keepstandard的博客 391
上一篇: 八股打卡(三)
下一篇: 八股打卡(五)
code120302
博客等级 码龄7年 195粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值