zoukankan      html  css  js  c++  java
  • 各种面试8.17

    红黑树的应用场景:

    https://blog.csdn.net/zuochao_2013/article/details/80562092

    红黑树的五个性质: 
    一般的,红黑树(一棵自平衡的排序二叉树),满足以下性质,即只有满足以下性质的树,我们才称之为红黑树: 
    1)每个结点要么是红的,要么是黑的。 
    2)根结点是黑的。 
    3)每个叶结点,即空结点(NIL)是黑的。 
    4)如果一个结点是红的,那么它的俩个儿子都是黑的。 
    5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。

    抓住了红黑树的那5个性质,分开记忆。 
    如, 
    1.红黑红黑,要么是红,要么是黑; 
    2.根结点是黑; 
    3.每个叶结点是黑; 
    4.一个红结点,它的俩个儿子必然都是黑的; 
    5.每一条路径上,黑结点的数目等同。 
    五条性质,合起来,来句顺口溜就是:(1)红黑 (2)黑 (3)黑 (4&5)红->黑 黑 
    二、运用场景 
    java中的TreeSet,TreeMap,广泛用在C++的STL中。如map和set都是用红黑树实现的

    hash表处理冲突的方法:

    https://blog.csdn.net/liutong123987/article/details/79225861

    1.开放定址法(再散列法):

    2.再哈希法

    3.拉链法(HashMap的冲突处理方式)

    基本思想: 将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入和删除主要,在同义词链中进行。链地址法适用于经常进行插入和删除的情况。

    4.建立公共溢出区:

      这种方法的基本思想是:将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表

    java有哪些容器:

    JAVA的容器---List,Map,Set 
    Collection 
    ├List 
    │├LinkedList 
    │├ArrayList 
    │└Vector 
    │ └Stack 
    └Set 
    Map 
    ├Hashtable 
    ├HashMap 
    └WeakHashMap

    http状态码:

    https://blog.csdn.net/zhongshuaisun/article/details/77988089

    • 100 - Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新) 
    • 101 - Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新) 

    • 200 - 请求成功
    • 301 - 资源(网页等)被永久转移到其它URL
    • 404 - 请求的资源(网页等)不存在
    • 500 - 内部服务器错误

    如何判断链表中是否有环:

    https://www.cnblogs.com/ghimtim/p/4882916.html

    如果一个单链表中有环,用一个指针去遍历,永远不会结束,所以可以用两个指针,一个指针一次走一步,另一个指针一次走两步,如果存在环,则这两个指针会在环内相遇,时间复杂度为O(n)。

    思维扩展:这里用到了快慢指针来判断单链表是否有环,快慢指针还能快速解决其他链表问题。

    一:已知单链表的头指针,查找到倒数第K个节点

    这道题的通俗的解法就是先遍历一边链表,得到链表的长度N,然后再从头开始遍历N-K个节点即可

    但是现在如果要求只遍历一遍链表的话,该怎么操作呢?

    这时候就可以借助快指针和慢指针了

    我们定义一个快指针P和慢指针Q,先让P指针走到K个节点位置,然后Q指针从头指针开始和P一起移动,当P移动到尾部的时候,那么此时Q节点所在的位置就是倒数第K个节点。

    二:已知单链表的头结点,查找到链表的中间节点

    这道题的通俗的解法和上面的方法一样,就是先遍历一边链表,得到链表的长度N,然后再次遍历N/2个节点即可

    但是现在同样的如果要求之遍历一边链表的话,该怎么操作呢?

    这时候我们同样可以借助快指针和慢指针了

    我们定义一个快指针P和慢指针Q,P和Q同时从头指针出发,快指针P每次移动两步,慢指针每次移动一步,当快指针P到尾部的时候,慢指针Q所在的位置就是中间节点的位置。

    池的概念:

    1.池,说白了就是提前创建好了东西放在池子里,你直接去池子里拿去用就行了,有现成的可用的,节省了你临时创建的时间。

    2.jdbc connection,线程thread,对象,这些东西的创建和销毁都是很消耗时间的,所以我们一般都是提前创建好很多这种创建消耗高的东西,用的时候直接去用就行。

    3.数据库连接池用的地方是:mybatis/hibernate这种sql语句操作时,临时创建connection是很消耗时间的,所以为了提高获取数据库数据的效率,在开机阶段都创建很多connection。且connection是tcp长连接的,这些数据库连接池中的connetcion可以存货很长时间。

    可以设置connection的maxage,数据库连接池c3p0等,都有保持connection连接存货的机制,通过connecton发送空数据包保证connection存活。

    4.线程池:线程池,主要是因为thread的创建和销毁是要消耗时间的,thread创建大概消耗0.02秒。java ee服务器在启动的时候,它已经创建好了很多的thread,用以来http request连接的时候,用这些创建好的thread去处理这些http连接。这些都是tomcat已经帮你做好的功能,Apache早就写好了类似的代码。

    当处理Io操作时,我们习惯用线程池,因为io操作是阻塞的。所以就是在处理阻塞方法时,我们用多线程来提高效率。

    5.常量池:字符创常量池,string那些具体final对象,下次用直接去常量池拿就行,很快 ,免去再次创建。string name="tom";

    6.因为池子的特性是容纳多个数据,所以池子都是list等集合类,因为要一直保持住这些数据,所以list这些集合类,又要一直保存在内存中,所以很消耗资源的,并且得是静态的来保证常驻内存。

  • 相关阅读:
    TCP/IP协议(一)网络基础知识 网络七层协议
    安卓混合开发——原生Java和H5交互,保证你一看就懂!
    最好用的17个渗透测试工具,全都在这里!(转载)
    【绿盟大讲堂】 渗透测试流程解析
    每日扫盲:eclipse快捷键 包括查找类、方法、变量汇总
    hadoop学习笔记(十):hdfs在命令行的基本操作命令(包括文件的上传和下载和hdfs中的文件的查看等)
    hadoop学习笔记(九):mr2HA高可用环境搭建及处步使用
    github新手使用
    hadoop学习笔记(九):mapReduce1.x和2.x
    hadoop学习笔记(八):hadoop2.x的高可用环境搭建
  • 原文地址:https://www.cnblogs.com/fengli9998/p/9494932.html
Copyright © 2011-2022 走看看