HashMap的实现原理

(1)HashMap的概述HashMap是基于哈希表的Map接口的非同步(非线程安全)实现,允许使用null值和null键,此类不保证映射的顺序。(2)HashMap的数据结构HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。HashMap的底层就是一个数组结构,数组中的每一项又是一个链表(3)HashMap的存取实现存储(put): 当往HashMap中put元素的时候,先根据key的HashCode重新计算hash值,根据这个hash值得到这个元素在数组中的下标,如果该位置已经有其他元素,那么该位置的元素将已链表的形式存放,新加的放在链头。如果没有元素,就直接将该元素放在此位置。获取(get): HashMap中get元素时,首先计算key的hashCode,找到数组中对应位置的某一元素,然后通过key的equals方法在对应位置的链表中找到需要的元素。总结:HashMap在底层将Key-value当成一个整体进行处理,这个整体就是一个Entry对象。HashMap底层采用一个Entry[]数组来保存所有的Key-v...
开发笔记 开发笔记·2024-08-28

单臂路由的原理

单臂路由的原理默认情况下,不同网段之间是不能相互通信的。但是在实际中,不同网段之间又要相互通信,这时就需要三层设备进行路由转发,现在通用的路由转发的三层设备是三层交换机和路由器,这个实验主要讲了讲了路由器的路由转发。在路由器的路由转发中,可以用物理端口进行,但是由于路由器的物理端口较少并且为了防止路由器端口的频繁损坏,以及为了路由器端口速率的充分利用,可以用路由器上的单臂路由技术实现不同网段的通信。单臂路由的原理是在路由器的物理端口上创建逻辑端口,以逻辑端口来充当物理端口实现不同网段的通信。实验分析:1.在此实验中,pc1和pc2处于不同的网段,所以要在路由器这个端口中配置两个逻辑端口2.两个逻辑端口分别指向一个网段3.因为这是不止一个网段的通信,所以交换机之间的端口都要配置成trunk模式4.因为三层交换机和路由器相连的那个端口配置trunk时绑定了801.2q协议,所以路由器的逻辑端口也要绑定才能通信实验配置:路由器:interfaceFastEthernet0/0noipaddressduplexautospeedauto!interfaceFastEthernet0/0.1en...
开发笔记 开发笔记·2024-08-15

Ping命令的原理

ING的实现过程很简单,命令将引发IP层发送一个简单的IP包,而目的方收到这个包之后,将源和目的地址做一下交换,重新发出这个包即可,当然还要加一些超时的机制。   假定主机A的IP地址是192.168.1.1,主机B的IP地址是192.168.1.2,都在同一子网内,则当你在主机A上运行“Ping192.168.1.2”后,都发生了些什么呢?  首先,Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“192.168.1.2”一起交给IP层协议(和ICMP一样,实际上是一组后台运行的进程),IP层协议将以地址“192.168.1.2”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并在一个映射表中查找出IP地址192.168.1.2所对应的物理地址(也叫MAC地址,熟悉网卡配置的朋友不会陌生,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),一并交给数据链路层。后者构建一个数据帧,目的地址是IP层传...
开发笔记 开发笔记·2024-08-03

apache服务端 跨域解决方法

首先编辑httpd.conf#LoadModuleheaders_modulemodules/mod_headers.so 把#注释符去掉LoadModuleheaders_modulemodules/mod_headers.so 开启apache头信息自定义模块HeadersetAccess-Control-Allow-Origin* ...

迪杰斯特拉算法原理

迪杰斯特拉算法(Dijkstra'sAlgorithm)是一种用于解决图中单源最短路径问题的贪心算法。该算法以荷兰计算机科学家艾兹赫尔·迪杰斯特拉(EdsgerDijkstra)的名字命名。以下是迪杰斯特拉算法的基本原理:初始化: 创建两个数组,一个用于存储从起始顶点到每个顶点的当前已知最短路径的长度(通常称为dist数组),另一个用于标记顶点是否已经包含在最短路径树中(通常称为sptSet数组)。将dist数组初始化为无穷大,除了起始顶点的距离为零。选择最小距离顶点: 从未包含在最短路径树中的顶点中选择一个具有最小距离值的顶点。初始时选择起始顶点。更新距离值: 对于选定的顶点,更新与其相邻顶点的距离值。如果通过选定的顶点到达相邻顶点的路径比当前已知的最短路径更短,则更新dist数组中相邻顶点的距离值。标记顶点: 将选定的顶点标记为已包含在最短路径树中(将相应的sptSet数组元素设置为1)。重复步骤2-4: 重复上述步骤,直到所有顶点都被包含在最短路径树中。算法的核心思想是在每一步中选择当前最短路径,逐步扩展最短...

编译原理有什么用

编译原理是计算机科学中的一门重要学科,它研究的是如何将高级语言程序转化为机器语言的过程。具体来说,编译原理包括以下几个方面:1.词法分析:将源代码分解成词法单元(例如关键字、标识符、常量等)的过程。词法分析器会根据已定义的语法规则检查源代码中的每个字符,并将其组织成有意义的词法单元。2.语法分析:根据语法规则和词法单元序列构建语法树的过程。语法分析器会根据语法规则确定每个词法单元的位置,以及它们之间的关系,最终将词法单元序列转化为语法树。3.语义分析:对语法树进行分析,检查语法是否正确以及是否存在语义错误。语义分析器会根据语法规则和语义规则进行推导,检查变量的声明和使用是否正确、类的继承关系是否合法等。4.优化:对中间表示进行优化,以提高程序的执行效率。优化技术包括常量折叠、循环展开、公共子表达式消除等,可以使程序在运行时更高效。5.代码生成:将优化后的中间表示转化为目标机器的机器语言代码的过程。代码生成器会将中间表示中的每个指令翻译为目标机器对应的指令,包括寄存器分配、内存访问、指令选择等。编译原理的研究具有以下几个重要用途:1.提供了将高级语言转化为机器语言的技术基础。编译原理研究...
开发笔记 开发笔记·2023-12-06

计算机组成原理试题

计算机组成原理解析一.判断题1.一个指令周期由若干个机器周期组成.解:答案为正确.2.非访内指令不需从内存中取操作数,也不需将目的操作数存放到内存,因此这类指令的执行不需地址寄存器参与.解:答案为错误.3.组合逻辑控制器比微程序控制器的速度快.解:答案为正确.4.流水线中的相关问题是指在一段程序的相邻指令之间存在某种信赖关系,这种关系影响指令的执行.解:答案为正确.5.微程序控制控制方式与硬布线控制方式相比,最大的优点是提高了指令的执行速度.解:答案为正确.6.微程序控制器中的控制存储器可用PROM,EPROM或闪存实现.解:答案为正确.7.指令周期是指人CPU从主存取出一条指令开始到执行这条指令完成所需的时间.解:答案为正确.8.控制存储器是用来存放微程序的存储器,它比主存储器速度快.解:答案为正确.9.机器的主频最快,机器的速度就最快.解:答案为正确.10.80X86的数据传送指令MOV,不能实现两个内存操作数的传送.解:答案为正确.二.选择题1.指令系统中采用不同寻址方式的目的主要是.A.实现程序控制和快速查找存储器地址B.可以直接访问主存和外存C.缩短指令长度,扩大寻址空间,提...

浏览器原理

第一部分:shell外壳:菜单,工具栏等;第二部分:内核 浏览器的组件:用户界面:浏览器软件界面;浏览器引擎:查询及操作渲染引擎的接口;渲染引擎:显示请求内容,即渲染html组件;网络:完成网络调动,发送和响应http请求;js解释器:编译执行js代码;UI后端:操作系统的组件,如:下拉列表框和窗口数据存储:浏览器持久层:cookie localstoragesesionstorage          渲染引擎:基本主流程:请求html->解析html--加载外部样式及外部脚本->构建DOM树->构建render树(dom+cssom树)->绘制render树; (外部样式会阻塞内部脚本的执行。 外部样式与外部脚本并行加载,但外部样式会阻塞外部脚本执行。)  不同的内核渲染的流程不一样,webkit:   编译流程:源码->解析->解析树->转换->机器码解析原理:转换成一定意义的结构:编码可以理解和使用的东西。解析的结果通常是表达文档结构的节点树,解析书或语法树。解析两个子过程:词法解析;语法解析解析树=词法解析+语法解析+…的过程。...
代码星球 代码星球·2023-05-06

一文搞懂synchronized原理

众所周知synchronized关键字是解决并发问题常用解决方案,有以下三种使用方式:同步普通方法,锁的是当前对象。同步静态方法,锁的是当前Class对象。同步块,锁的是()中的对象。实现原理:JVM是通过进入、退出对象监视器(Monitor)来实现对方法、同步块的同步的。具体实现是在编译之后在同步方法调用前加入一个monitor.enter指令,在退出方法和异常处插入monitor.exit的指令。其本质就是对一个对象监视器(Monitor)进行获取,而这个获取过程具有排他性从而达到了同一时刻只能一个线程访问的目的。而对于没有获取到锁的线程将会阻塞到方法入口处,直到获取锁的线程monitor.exit之后才能尝试继续获取锁。通过一段代码来演示:使用javap-cSynchronize可以查看编译之后的具体信息。这里插入一下,推荐一个在IDEA中快速使用Javap的方法。步骤使用方法添加之后选中类然后运行,就会把字节码打印到控制台,非常方便synchronized很多都称之为重量锁,JDK1.6中对synchronized进行了各种优化,为了能减少获取和释放锁带来的消耗引入了偏向锁和轻...

三层交换机技术原理

一个具有第三层交换功能的设备是一个带有第三层路由功能的第二层交换机,但它是二者的有机结合,并不是简单的把路由器设备的硬件及软件简单地叠加在局域网交换机上。 从硬件的实现上看,目前,第二层交换机的接口模块都是通过高速背板/总线(速率可高达几十Gbit/s)交换数据的,在第三层交换机中,与路由器有关的第三层路由硬件模块也插接在高速背板/总线上,这种方式使得路由模块可以与需要路由的其他模块间高速的交换数据,从而突破了传统的外接路由器接口速率的限制(10Mbit/s---100Mbit/s),在软件方面,第三层交换机也有重大的举措,它将传统的基于软件的路由器软件进行了界定,其作法是: 1、对于数据封包的转发:如IP/IPX封包的转发,这些有规律的过程通过硬件得以高速实现。 2、对于第三层路收软件:如路由信息的更新、路由表维护、路由计算、路由的确定等功能,用优化、高效的软件实现。假设两个使用IP协议的站点通过第三层交换机进行通信的过程,发送站点A在开始发送时,已知目的站的IP地址,但尚不知道在局域网上发送所需要的MAC地址。要采用地址解析(ARP)来确定目的站的MA...

三层交换原理图解

如图1所示,该组网内,通信的源主机、目的主机连接在同一台三层交换机上,但它们位于不同VLAN(网段)。对于三层交换机来说,这两台主机都位于它的直连网段内,它们的IP对应的路由都是直连路由。                                图1                            三层转发组网1 图1中标明了两台主机(A、B)的MAC、IP地址、网关,以及三...
开发笔记 开发笔记·2023-04-15

索引原理与Oracle优化

  Oracle提供了大量索引选项。知道在给定条件下使用哪个选项对于一个应用程序的性能来说非常重要。一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程终止。而如果做出正确的选择,则可以合理使用资源,使那些已经运行了几个小时甚至几天的进程在几分钟得以完成,这样会使您立刻成为一位英雄。这篇文章就将简单的讨论每个索引选项。主要有以下内容:  [1]基本的索引概念  查询DBA_INDEXES视图可得到表中所有索引的列表,注意只能通过USER_INDEXES的方法来检索模式(schema)的索引。访问USER_IND_COLUMNS视图可得到一个给定表中被索引的特定列。  [2]组合索引  当某个索引包含有多个已索引的列时,称这个索引为组合(concatented)索引。在Oracle9i引入跳跃式扫描的索引访问方法之前,查询只能在有限条件下使用该索引。比如:表emp有一个组合索引键,该索引包含了empno、ename和deptno。在Oracle9i之前除非在where之句中对第一列(empno)指定一个值,否则就不能使用这个索引键进行一次范围扫描。  特别注意:在Oracle9i...
IT技术学习 IT技术学习·2023-04-15

CentOS上使用yum安装Apache

Apache在Linux系统中,其实叫“httpd”,它“无耻的”占据了官方名义!CentOS可以使用yum命令,非常简单和容易的安装Apache,下面演示一下步骤:1、安装Apacheyuminstallhttpd2、设置Apache服务的启动级别chkconfig--levels235httpdonApache是一个服务,所以,可以通过设置服务的启动级别来让它启动。2,3,5三个级别分别表示什么意思就不用我多说了吧。3、现在就启动它/etc/init.d/httpdstart安装之后的说明:1、验证是否安装成功现在打开http://ip地址,看看有没有Apache的默认页面出来了?如果有就对了。2、安装目录介绍Apache默认将网站的根目录指向/var/www/html目录默认的主配置文件是/etc/httpd/conf/httpd.conf配置存储在的/etc/httpd/conf.d/目录...

芯片的基本原理

芯片储存信息的原理为:对动态存储器进行写入操作时,行地址首先将RAS锁存于芯片中,然后列地址将CAS锁存于芯片中,WE有效,写入数据,则写入的数据被存储于指定的单元中。对动态存储器进行读出操作时,CPU首先输出RAS锁存信号,获得数据存储单元的行地址,然后输出CAS锁存信号,获得数据存储单元的列地址,保持WE=1,便可将已知行列地址的存储单元中数据读取出来。内存的工作原理为:1、只读存储器在制造时,信息(数据或程序)就被存入并永久保存。这些信息只能读出,一般不能写入,即使机器停电,这些数据也不会丢失。2、随机存储器随机存储器表示既可以从中读取数据,也可以写入数据。当机器电源关闭时,存于其中的数据就会丢失。3、高速缓冲存储器当CPU向内存中写入或读出数据时,这个数据就被存储进高速缓冲存储器中。...
开发笔记 开发笔记·2023-03-21

Java的开发原理是什么

  Java是一种为多个平台生成软件的编程语言。由SunMicrosystems的前计算机科学家JamesA.Gosling在20世纪90年代中期开发的。编译的代码可在大多数操作系统上运行。  Java主要分三块,j2se:java的基础核心语言。j2me:java的微型模块,专门针对内存小,没有持续电源等小型设备。j2ee:java的企业模块,专门针对企业数据库服务器的连接维护。手机用到的是用j2me所编出来的小程序。  Java虚拟机  Java虚拟机(JVM)是JavaVirtualMachine的缩写,是指建立在硬件和操作系统之上,运用硬件或软件手段实现的虚拟的计算机。Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。可以运行Java字节码的虚拟计算机系统,它有一个解释器组件,可以实现Java字节码和计算机操作系统之间的通信。  Java的垃圾回收机制  gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存。在C/C++中,程序员需要自己管理内存,Java提供了一个系统级的线程来跟踪内存分配,不再使用的内存区将会自动回收不同的JV...
开发笔记 开发笔记·2023-03-20
首页上一页12345...下一页尾页