O(1)时间内删除链表节点

O(1)时间内删除链表节点

题目描述:给定链表的头指针和一个节点指针,在O(1)时间删除该节点。[Google面试题]

分析:在单向链表中删除指定的节点,通常的做法都是从头结点开始遍历链表,逐个比较每个节点的下一个节点是否是要删除的节点,如果是,则通过curNode->next = curNode->next->next; delete target; 在O(1)的时间复杂度内删除指定节点似乎是不可行的,但其实可以换一种思路:将下一个节点的值赋值给需要删除的节点,然后删除下一个节点。如果需要删除的节点是最后一个节点(target->next == null),则需要从头遍历列表找到target节点的上一个节点,然后删除。这样也是满足O(1)的时间复杂度的:假设链表总共有n个结点,我们的算法在n-1种情况下时间复杂度是O(1),只有当给定的结点处于链表末尾的时候,时间复杂度为O(n)。那么平均时间复杂度[(n-1)*O(1)+O(n)]/n,仍然为O(1)。

单链表的逆序打印

单链表的逆序打印

题目描述:单链表的逆序打印
分析:单向链表的逆序打印就是从尾节点开始打印节点。方法1:遍历链表将每个节点放入栈中,然后每个元素出栈打印。这用方法需要分配额外的空间。方法2:利用递归的方式,当递归调用返回时我们就指定当前节点的值是最后一个节点,进行输出,层层返回就可以逐个打印每个元素。

合并两个升序的单向链表

合并两个升序的单向链表

题目描述:合并两个升序的单向链表
分析:合并排序的单向链表和合并排序好的数组是类似的;
1:分配一个新的节点,让newHead指针和tail指针指向新分配的节点;
2:从两个链表头部开始,逐个比较2个链表的节点值让tail指向节点的next域指向head1或head2,
3: 移动tail指针
4:移动 head1 或 head2 到下一个节点

服务发现介绍

服务发现介绍

这是一个由面试引处理的问题。通过找资料将服务发现的相关知识进行记录。

目录:

  1. 什么是服务发现?
  2. 服务发现应该具备哪些关键特性,理由是什么?
  3. 你认为服务发现带来的主要好处是什么?
  4. 时至今日,哪一种服务发现方案是最可靠的?
  5. 实施服务发现面临的最大挑战是什么?
  6. 在一个全新的系统中实现服务发现(相对)容易。已有的系统如何集成服务发现功能?

web重放攻击介绍和防御方法

重放攻击定义

所谓重放攻击就是攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程。攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。从这个解释上理解,加密可以有效防止会话劫持,但是却防止不了重放攻击。重放攻击任何网络通讯过程中都可能发生。

web开发异常统一处理

web开发异常统一处理

web开发中异常一定要进行处理。通常根据请求的类型不同进行不同的处理。如果是http+json接口请求的异常,需要根据错误构造对应的错误响应。如果是500异常,则需要跳转到指定的错误页面。其它的异常类型需要根据不同的HTTP状态码进行处理。目前项目中主要是使用spring-MVC进行开发web开发。通常的处理方式有一下几种。

maven-surefire-plugin简介

maven-surefire-plugin简介

Maven本身并不是一个单元测试框架,它只是在构建执行到特定生命周期阶段的时候,通过插件来执行JUnit或者TestNG的测试用例。这个插件就是maven-surefire-plugin,也可以称为测试运行器(Test Runner),它能兼容JUnit 3、JUnit 4以及TestNG。

java程序避免NullPointException最佳实践

java程序避免NullPointException最佳实践

Java应用中抛出的空指针异常是解决空指针的最好方式,也是写出能顺利工作的健壮程序的关键。俗话说“预防胜于治疗”,对于这么令人讨厌的空指针异常,这句话也是成立的。值得庆幸的是运用一些防御性的编码技巧,跟踪应用中多个部分之间的联系,你可以将Java中的空指针异常控制在一个很好的水平上。顺便说一句,这是Javarevisited上的第二个空指针异常的帖子。在上个帖子中我们讨论了Java中导致空指针异常的常见原因,而在本教程中我们将会学习一些Java的编程技巧和最佳实践。这些技巧可以帮助你避免Java中的空指针异常。遵从这些技巧同样可以减少Java代码中到处都有的非空检查的数量。作为一个有经验的Java程序员,你可能已经知道其中的一部分技巧并且应用在你的项目中。但对于新手和中级开发人员来说,这将是很值得学习的。顺便说一句,如果你知道其它的避免空指针异常和减少空指针检查的Java技巧,请和我们分享。这些都是简单的技巧,很容易应用,但是对代码质量和健壮性有显著影响。根据我的经验,只有第一个技巧可以显著改善代码质量。如我之前所讲,如果你知道任何避免空指针异常和减少空指针检查的Java技巧,你可以通过评论本文来和分享。

|