骆驼整理说
这个作者很懒,什么都没留下…
展开
-
2024最新华为OD算法题目
在一个机房中,服务器的位置标识在n*m的整数矩阵网格中,1表示单元格上有服务器,0表示没有。如果两台服务器位于,则认为它们之间可以组成一个局域网。请你统计机房中最大的局域网包含的服务器个数。原创 2024-06-05 08:21:40 · 657 阅读 · 0 评论 -
红黑树(Red Black Tree)
红黑树的插入和删除操作相对复杂,因为它们需要在修改树结构的同时维护红黑树的性质。在插入新节点时,可能会违反红黑树的性质,因此需要通过一系列的颜色转换和树旋转操作来重新平衡树。红黑树的特点在于它通过特定的操作来保持二叉查找树的平衡,从而在插入、删除和查找操作时获得较高的性能。红黑树的每个节点都带有颜色属性,可以是红色或黑色,并满足一系列性质,这些性质保证了树的大致平衡。3. 每个红色节点的两个子节点都是黑色(这保证了从根到叶子的任何路径上不会有两个连续的红色节点)。1. 每个节点要么是红色,要么是黑色。原创 2024-05-22 14:01:56 · 124 阅读 · 0 评论 -
二叉树(Binary Tree)
二叉树(Binary Tree)是每个节点最多有两个子节点的树结构,通常子节点被称作左子节点(left child)和右子节点(right child)。二叉树常被用于实现二叉查找树和二叉堆。原创 2024-05-22 13:58:42 · 30 阅读 · 0 评论 -
队列假上溢(Queue False Overflow)
假上溢(False Overflow)在计算机科学中,特别是与队列(Queue)数据结构相关时,是指队列中实际上还有空闲空间,但由于某种操作或设计的限制,使得队列无法再接收新的元素。这通常是由于队列的实现方式导致的,而非队列真的满了。在队列的某些实现中,特别是当使用固定大小的数组来存储队列元素时,如果没有正确管理队列的头部和尾部指针,就可能出现假上溢的情况。例如,如果队列的尾部指针已经达到了数组的末尾,即使队列的头部还有很多空闲空间,由于尾部没有空间了,队列就不能再接收新的元素。原创 2024-05-21 17:52:58 · 50 阅读 · 0 评论 -
队列下溢(Queue Underflow)
队列下溢通常表示程序中的一个逻辑错误或同步问题,因为它通常意味着程序试图在不适当的时候从队列中移除元素。因此,在设计和实现使用队列的系统时,应该确保在调用出队操作之前队列不为空,或者能够妥善处理队列下溢的情况。队列下溢(Queue Underflow)是指当从队列中移除元素时,队列已经为空,即没有任何元素可供移除。阻塞:类似于队列溢出的阻塞策略,当队列为空时,出队操作可以被阻塞,直到队列中有新的元素可供移除。然而,如果队列已经没有任何元素(即队列为空),则没有元素可以移除,此时就会发生队列下溢。原创 2024-05-21 17:39:26 · 16 阅读 · 0 评论 -
队列溢出(Queue overflow)
当队列达到其最大容量时,如果再有新的元素需要入队,就需要采取某种策略来处理这种情况,否则就会导致队列溢出。因此,在设计队列和相关的系统时,应该仔细考虑队列的大小和容量,以及如何处理队列溢出的情况。队列溢出是指当向队列中添加元素时,队列的当前容量已经达到其最大限制,且没有足够的空间来容纳新的元素。扩大队列容量:在某些情况下,可以动态地调整队列的大小,以容纳更多的元素。丢弃:当队列满时,可以选择丢弃新到达的元素或者丢弃队列中最早或最晚的元素,以腾出空间给新元素。处理队列溢出的策略包括。原创 2024-05-21 17:34:27 · 66 阅读 · 0 评论 -
八大数据结构
数组、链表、队列、栈、哈希表、树、堆、图原创 2022-02-02 19:20:34 · 1656 阅读 · 0 评论 -
局部异常因子
然而,需要注意的是,LOF算法的效果可能受到参数设置、数据集大小和维度等因素的影响,因此在实际应用中需要根据具体情况进行调整和优化。它通过分析每个数据点相对于其邻域内其他数据点的局部密度,来识别那些局部密度显著低于周围数据点的异常值。LOF算法的基本思想是:对于数据集中的每个数据点,计算其局部可达密度,并将其与邻域内其他数据点的局部可达密度进行比较。然而,它也可能受到一些因素的影响,如参数设置、数据集的大小和维度等。需要注意的是,虽然LOF算法在异常检测领域具有广泛的应用,但它并不是唯一的解决方案。原创 2024-05-21 11:46:03 · 31 阅读 · 0 评论 -
深度卷积神经网络(DCNN)
此外,深度卷积神经网络还包括激活层、BN层、池化层、FC层和损失层等结构,以提升网络的非线性能力,提高网络的表达能力,并对图像进行降采样和平滑处理。在图像处理方面,深度卷积神经网络可以进行图像分类、检测、识别以及分割等操作,如场景分类、目标分类、显著性检测、物体检测、语义检测、人脸识别、字符识别、车牌识别、行为识别、步态识别、前景分割以及语义分割等。深度卷积神经网络通过多个卷积层和池化层的组合,可以逐渐提取出越来越抽象的特征,从简单的边缘到复杂的物体部件,最终形成对整体物体的理解。原创 2024-05-21 11:36:19 · 90 阅读 · 0 评论 -
深度信念网络(Deep Belief Network,DBN)
实现深度信念网络(Deep Belief Network, DBN)的Java示例是一个相对复杂的任务,因为它涉及到多个组件和层级的构建,以及前向和后向传播算法的实现。在Java中实现这样的模型通常需要使用数值计算库,比如ND4J(N-Dimensional Arrays for Java),它是DL4J(Deep Learning for Java)的一部分,后者是一个为Java和Scala设计的深度学习库。然而,请注意,DL4J可能没有直接提供DBN的实现,但它提供了构建DBN所需的基本组件和工具。原创 2024-05-21 11:30:03 · 523 阅读 · 0 评论 -
k-means算法
k-means算法的Java示例。k-means是一种常用的无监督学习算法,用于将数据点划分为K个集群。以下是一个简单的k-means算法的Java实现示例。原创 2024-05-21 11:21:25 · 63 阅读 · 0 评论 -
PageRank算法
一个页面的“得票数”由所有指向它的页面的重要性来决定,质量越高的页面指向某页面,则该页面的PageRank值也会相应提高。它接收一个图(以Map<String, Set<String>>的形式表示,其中键是页面,值是出链页面的集合),并返回一个Map,该Map的键是页面,值是对应的PageRank值。在这些场景中,PageRank算法都可以用来挖掘节点之间的关系和节点的重要性。原创 2024-05-21 11:14:06 · 13 阅读 · 0 评论 -
信息检索TF-IDF
TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。上面的代码是一个简化的示例,并没有处理多个词项的情况。实际应用中,可能需要遍历所有的词项,并为每个词项计算TF-IDF值。此外,Apache Lucene的TF-IDF计算默认行为可能与你期望的不同,因此你可能需要自定义一些行为。这个例子使用Apache Lucene库,它提供了一套完整的TF-IDF实现。原创 2024-05-21 11:05:32 · 270 阅读 · 0 评论 -
AQS实现一个可重入锁
Sync`类实现了必要的获取和释放同步状态的方法,并且`MyReentrantLock`提供了`lock()`和`unlock()`方法来控制对共享资源的访问。获取和释放方法:使用者需要实现`tryAcquire(int)`和`tryRelease(int)`方法(或它们的变种),这些方法定义了如何尝试获取和释放同步状态。AQS提供了默认的`acquire()`和`release()`方法,它们内部会调用这些`try`方法,并处理线程排队和阻塞的逻辑。原创 2024-05-17 10:27:35 · 21 阅读 · 0 评论 -
OSI七层模型
其实大部分原因都是因为DNS服务器故障造成的,DNS服务器地址是唯一的,是运营商提供给终端用户用来解析IP地址及域名的关系,如果不设定DNS服务器地址,那么就无法查询地址的去向,自然也就打不开网页,而QQ、MSN等即时聊天软件,采用的是UDP传输协议,即不可靠传输协议,无需提供DNS服务器地址,也同样可以登陆。如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。原创 2024-05-13 11:49:59 · 322 阅读 · 1 评论 -
http和https的区别
其实也不一定就安全,原因是用户不会再访问时候加上http:// 或 https://, 浏览器就默认会加上http://,然后通过转发的方式转成https:// 这个过程http就有可能会被劫持了。而HTTPS则通过SSL/TLS协议进行加密传输,这种加密方式可以保护数据在传输过程中的安全,防止数据被窃取或篡改。这可能导致HTTPS在某些情况下比HTTP稍慢一些,但考虑到其提供的安全性,这种资源消耗是可以接受的。2. 连接方式:HTTP的连接是明文的,而HTTPS则通过SSL/TLS协议建立加密连接。原创 2024-05-13 11:48:29 · 307 阅读 · 0 评论 -
TCP四次挥手
因为TCP连接是全双工通信的,B还保留着一个对A大发送连接,如果等到B也不需要发送数据给A时,B会发送一个连接给A,seq等于一个大于或等于v的值(因为A与B断开发送连接到B与A断开发送连接期间有可能B向A发送了数据,就是消耗序号)。第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号加1,ACK报文段发送完毕后,客户端和服务器进入CLOSED状态,完成四次挥手。:B回了一个确认,此时A与B的发送连接就断开了。MSL:最长报文寿命。原创 2024-05-13 11:38:27 · 63 阅读 · 0 评论 -
TCP协议
TCP协议通过这些机制,在不可靠的互联网络上提供了可靠的端到端字节流传输服务。虽然TCP协议提供了可靠的数据传输服务,但由于其建立连接和确认机制,相对于UDP协议而言,可能会有一定的传输延迟。TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。接收方收到报文段后,校验数据的完整性,并重新组装成完整的数据流。可靠传输:TCP提供可靠的数据传输服务,确保数据无差错、不丢失、不重复,并按序到达。原创 2024-05-13 11:20:36 · 52 阅读 · 0 评论 -
TCP和UDP的区别
TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)都是网络传输层中使用的协议,用于在网络中的不同设备之间发送和接收数据。它们各自具有不同的特性和适用场景。原创 2024-05-13 11:01:56 · 501 阅读 · 0 评论 -
double为什么叫浮点数
我们说小数点位置,永远是说相对于我们存储的数位来说的,比如存储了01001001,然后小数点在第三位之后,也就是010.01001了。计算机中处理小数点位置有浮点和定点两种,定点就是小数点永远在固定的位置上,比如约定一种32位无符号定点数,它的小数点永远在第5位后面,这样最大能表示的数就是11111.111111111111111111111111111,它是32 - 2^-27,最小非零数是2^-27。这样的结果是,在比较两个浮点数大小时,无法像比较整数时一样使用简单的无逻辑的二进制比较。原创 2024-05-12 08:30:06 · 34 阅读 · 0 评论 -
HashMap在JDK1.8的优化
由原本的数组+链表的结构引入了红黑树,当链表长度大于8时,整个数组长度大于64时链表转换为红黑树,反之链表长度小于6时再转换回来,好处是避免链表过长,降低查询复杂度,提升查询速度。原本hash冲突时在链表头部插入数据,现在改为尾部插入,好处是避免扩容后链表产生相对位置倒序,避免在并发环境下扩容产生循环链表,导致死循环。原创 2024-05-11 11:12:33 · 60 阅读 · 0 评论 -
LinkedHashMap源码解析
HashMap底层是数组 + (链表 / 红黑树),元素是无序的,LinkedHashMap有序可以按两种顺序排列,一种是按照插入的顺序,一种是按照访问的顺序(初始化 LinkedHashMap 对象时设置 accessOrder 参数为 true),而其内部是靠 建立一个双向链表 来维护这个顺序的,在每次插入、删除后,都会调用一个函数来进行 双向链表的维护,这也是实现 LRU Cache 功能的基础。先说几个比较重要的结论,大家可以根据这些结论从后面的源码解析中得到证据。原创 2024-05-11 09:29:05 · 19 阅读 · 0 评论 -
接口(Interface)和抽象类(Abstract Class)编程思想
抽象与具体抽象类用于定义一组相关对象的共同属性和行为,其中一些行为是具体的(由抽象类直接实现),而另一些则是抽象的(声明为抽象方法,由子类提供实现)。扩展性抽象类提供了一种扩展机制,允许子类继承并实现更多的具体行为。子类可以覆盖父类的非抽象方法,也可以提供抽象方法的实现。代码重用通过继承抽象类,子类可以重用父类的代码,减少重复的代码量。模板方法模式抽象类常常与模板方法模式一起使用,定义算法框架,允许子类在不改变算法结构的情况下重新定义某些特定步骤。原创 2024-05-11 08:25:09 · 44 阅读 · 0 评论 -
HashMap源码解析
如果该桶已经有一个节点,则检查该节点的键是否与要插入的键相同,如果相同则更新值,否则将新节点添加到链表的末尾(或转换为红黑树,如果链表长度超过一定阈值)。红黑树的操作和其他树一样,包括查找、插入、删除等,其查找过程和二叉查找树一样简单,但插入和删除操作要复杂的多,这也是其为保持平衡性不会退化成链表所付出的代价。它创建一个新的数组,其大小通常是原数组的两倍,然后重新计算每个键值对的哈希值,并将它们映射到新的数组中。JDK1.8的HashMap底层使用的是动态数组,数组中元素存放的是链表或红黑树。原创 2024-05-10 21:00:09 · 55 阅读 · 0 评论 -
HashSet扩容机制
HashSet底层是HashMap,第一次添加的时候,table数组扩容到16,临界值是16*加载因子(默认是0.75),到达临界值进行扩容。值,然后拿它和当前数组长度进行 & 运算得到存储的数组下标,存储的数据会散列的分布在数组空间中,是无序的,所以HashSet也是无序的。其实是new了一个HashMap。HashMap在存放数据时,会先计算其key的。当new一个HashSet时。HashSet中的add方法。原创 2024-05-10 20:48:47 · 72 阅读 · 0 评论 -
List集合的复制方式
如果要进行深拷贝(deep copy),即创建一个完全独立的新List,其中的元素是原始对象的副本而不是引用,那么需要自行实现深拷贝的逻辑。因此,在多线程环境下进行List集合复制时,需要确保对原始List集合的访问是线程安全的,例如使用线程安全的集合类或者添加适当的同步机制。以上两种复制方式都是浅拷贝(shallow copy),即如果List集合中存储的是对象引用,那么复制后的新List中的元素仍然是原始对象的引用,而不是对象的副本。因此,如果修改了原始对象,这些修改也会反映到复制后的List中。原创 2024-05-10 20:23:19 · 380 阅读 · 0 评论 -
ArrayList线程不安全的情况
在单线程执行这两条代码时没有任何问题,但是当多线程环境下执行时,可能就会发生一个线程的值覆盖另一个线程添加的值,具体逻辑:列表大小为0,即size=0线程A开始添加一个元素,值为A。线程A开始将size的值增加为1线程B开始将size的值增加为2这样线程AB执行完毕后,理想中情况为size为2,elementData下标0的位置为A,下标1的位置为B。线程B也发现需求大小为10,也可以容纳,返回。例如,一个线程正在修改一个元素,而另一个线程正在读取该元素,这时读取到的数据可能是不完整的或已经过时的。原创 2024-05-10 20:16:36 · 47 阅读 · 0 评论 -
ArrayList扩容机制
ArrayList扩容机制及工作原理原创 2024-05-10 19:59:52 · 62 阅读 · 0 评论 -
ArrayLiat新添加的元素坐标是0吗
在Java的List接口及其实现类(如ArrayList)中,新添加的元素的坐标或索引取决于使用哪种方法来添加元素以及该元素是添加到列表的哪个位置。原创 2024-05-10 19:50:27 · 27 阅读 · 0 评论 -
ArrayList源码解析
ArrayList是Java集合框架中的一个核心类,它实现了List接口,是一个动态数组。ArrayList允许存储任意类型的对象,包括null。它的内部实现基于数组,因此随机访问(通过索引)元素非常快速,但在列表的中间位置插入或删除元素时可能会相对较慢,因为需要移动其他元素以保持连续性。List接口的实现类ArrayList,在jdk8中的继承关系如下。原创 2024-05-10 19:41:38 · 54 阅读 · 0 评论 -
Java多线程如何按顺序执行
在线程thread2中,加上一句thread1.join(),其意义在于,当前线程2运行到此行代码时会进入阻塞状态,直到线程thread1执行完毕后,线程thread2才会继续运行,这就保证了线程thread1与线程thread2的运行顺序。简单说一下子线程与主线程的区别,子线程指的是发生在Thread内部的代码,主线程指的是发生在main函数中的代码。CountDownLatch通过计数器提供了更灵活的控制,只要检测到计数器为0当前线程就可以往下执行而不用管相应的thread是否执行完毕。原创 2024-05-10 18:54:51 · 52 阅读 · 0 评论 -
BigDecimal类型引用传递
更好的做法是让方法返回一个新的对象,然后由调用者决定是否使用这个新对象。当创建一个BigDecimal对象并传递给一个方法时,可以在那个方法内部修改这个对象的值(通过创建新的BigDecimal对象并重新赋值给引用),但是原始对象的值不会改变,除非将新的BigDecimal对象赋值回原始引用。这意味着当你将一个对象作为参数传递给一个方法时,实际上传递的是这个对象在内存中的地址(引用),而不是对象本身。因此,如果方法内部对这个引用所指向的对象进行了修改,那么方法外部的原始对象也会受到这个修改的影响。原创 2024-05-10 16:57:44 · 140 阅读 · 0 评论 -
Float类型对象引用传递
因为inputFloat只是originalFloat的一个引用副本,当在方法内部给inputFloat赋新值时,实际上是让inputFloat引用了一个新的Float对象,而原始的originalFloat引用仍然指向原来的对象。如果你想要修改原始float包装类对象的值,你需要通过某种方式能够修改对象本身的内容,而不是仅仅改变引用的对象。如果需要修改包装类的值,必须重新分配一个新的对象给原来的引用或者使用一个可以修改的包装器或自定义类。在方法内部对这个副本所做的任何修改都不会影响到原始变量。原创 2024-05-10 16:50:06 · 23 阅读 · 0 评论 -
String类型变量引用传递
当我们在方法内部修改inputString时,实际上是创建了一个新的String对象,并让inputString引用这个新对象,而originalString仍然引用原来的对象。String类型由于其不可变性,这种引用传递的行为表现得更加明显,虽然在这个例子中String的行为看起来像值传递,但实际上仍然是引用传递。只是由于String的不可变性,无法直接修改一个String对象的内容,只能创建一个新的String对象。一个对象传递给一个方法时,传递的是对象的引用,而不是对象本身的值。原创 2024-05-10 16:34:34 · 397 阅读 · 0 评论 -
垃圾收集策略
垃圾回收策略原创 2022-03-23 10:56:36 · 357 阅读 · 0 评论 -
HotSpot虚拟机垃圾收集器
命运之神自会在一个恰当的时间 把你引到该去的地方。原创 2022-03-25 09:16:25 · 688 阅读 · 0 评论 -
JVM内存模型
jvm原创 2022-03-18 18:15:21 · 1034 阅读 · 0 评论 -
类的加载器
任意一个类都由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都有一个独立的类名称空间。比较两个类是否相等,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则即使这两个类来源于同一个Class文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那么这两个类就必定不相等。这里的相等包括代表类的Class对象的equals方法和isInstance方法的返回结果,也包括使用instanceof关键字做对象所属关系判定等情况。原创 2022-03-22 17:23:19 · 806 阅读 · 0 评论 -
Class文件结构
JVM具有无关性,主要体现在两个方面,平台无关性(任何操作系统都能运行Java代码)和语言无关性(JVM能运行除Java以外的其他代码)。Java源代码首先需要使用Javac编译器编译成 .class文件,然后由JVM执行.class文件,从而程序开始运行。JVM只认识 .class文件,不关心是何种语言生成了 .class文件,只要 .class文件符合 JVM的规范就能运行。目前已经有JRuby、Jython、Scala等语言能够在JVM上运行。原创 2022-03-19 20:10:38 · 914 阅读 · 0 评论 -
Jdk系统环境变量配置
Java程序的开发主要使用JDK的两个命令javac.exe和java.exe,但是这两个命令不属于windows自己的命令,要在windows系统里面使用这两个命令就要告诉windows系统它们在什么地方,windows系统执行程序时才能找到它,所以啊就需要进行环境变量的配置。jdk11安装完成默认情况下没有jre目录(跟jdk8的目录有明显的改变),在上图目录下按住(shift)键 -鼠标右键 -在此处打开命令窗口,然后输入命令:bin\jlink.exe --lib:JDK使用的类库。原创 2022-03-27 13:00:59 · 2452 阅读 · 1 评论