zoukankan      html  css  js  c++  java
  • 面试问题总结

    2019-08-05 面试问题总结

    1.get与post的区别:

    • HTTP 定义了与服务器交互的不同方法,两种最常用的 HTTP 方法是:GET 和 POST。
    • 下面的表格比较了两种 HTTP 方法:GET 和 POST。
      get post
    后退按钮/刷新 无害 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
    书签 可收藏为书签 不可收藏为书签
    缓存 能被缓存 不能缓存
    编码类型 application/x-www-form-urlencoded application/x-www-form-urlencoded or multipart/form-data。为二进制数据使用多重编码。
    历史 参数保留在浏览器历史中。 参数不会保存在浏览器历史中。
    对数据长度的限制 是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 无限制。
    对数据类型的限制 只允许 ASCII 字符。 没有限制。也允许二进制数据。
    安全性 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。

    在发送密码或其他敏感信息时绝不要使用 GET !
    POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
    可见性 数据在 URL 中对所有人都是可见的。 数据不会显示在 URL 中。
    • get和post的使用场景的分析:

    post:表单提交(因为数据量可能过大超过浏览器规定的URL长度限制),登录(密码不能包含在URL中,为了用户安全)

    get: 静态资源的获取(因为不涉及安全和URL长度限制的问题,而get请求的速度要快于post)

    总结:只要不涉及URL长度和数据安全的情况都可以用get(速度快)。

    • get速度快的原因:

    post在真正接收数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据,get直接发送数据。

    get会对静态资源或数据缓存(IE两者都缓存,其他chrom,火狐只缓存静态资源),下一次请求静态资源或数据将不用访问服务器。


     

    2.String,Stringbuffer,StringBudiler的区别。

    • String:用final修饰的不可变对象(字符串发生变化会生成新的对象),线程安全的,在字符串不经常发生变化的业务场景优先使用String。
    • StringBuffer:线程安全的,字符串发生变化不会生成新的对象,在字符串经常发生变化且需要保证线程安全的业务场景优先使用String。
    • StringBuilder:线程不安全的,字符串发生变化会生成新的对象,在字符串经常发生变化且需要保证线程安全的业务场景优先使用String。

    3.谈谈你对tomcat的理解

    • tomcat是web网络服务器,是sevlet的容器,可以用来处理用户请求。

    4.关系型数据库和非关系型数据库的区别

      1.关系型数据库因为是从磁盘读取和写入数据,相比非关系型数据库从内存读取和写入数据,速度较慢。但是一旦非关系型数据库发生故障,数据将丢失。

      2.关系型数据库严格保证数据的一致性,非关系型数据库部分支持。mongdb也能保证数据的一致性,但是redis不能保证原子性和持久性,从而不能保证一致性,只能保证最终一致性。

      3.关系型数据库只支持基本类型的存储,而非关系型数据库支持多种数据形式的存储如:key-value(redis),文档型(mongdb),列型(hbase),图型(graph),每一种都会解决相应的问题。

      4.非关系型数据库有高可扩展性和分布式计算的特性

    类型

    部分代表

     

    特点
    列存储

    Hbase

    Cassandra

    Hypertable

    顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。

    文档存储

    MongoDB

    CouchDB

    文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能。

    key-value存储

    Tokyo Cabinet / Tyrant

    Berkeley DB

    MemcacheDB

    Redis

    可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)

    图存储

    Neo4J

    FlockDB

    图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。

    •  使用场景分析:

      1.对数据的安全性有较高要求要使用关系型数据库。如银行,债券等设计金融安全的业务。

      2.对海量数据的存储和查询,多格式数据 的存储用非关系型数据库。如电商系统手机用户信息,做商品的推送。NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL 数据库的发展却能很好的处理这些大的数据。  


    5.泛型的理解

    • 泛型的本质是参数化类型(只能是object类型不能是基本类型

    也就是说,泛型就是将所操作的数据类型作为参数的一种语法。

    public class Paly<T>{
        T play(){}
    }

    其中T就是作为一个类型参数在Play被实例化的时候所传递来的参数,比如:

    Play<Integer> playInteger=new Play<>();

    这里T就会被实例化为Integer

    • 泛型的作用

    - 使用泛型能写出更加灵活通用的代码


     

  • 相关阅读:
    Django框架-选项卡加active类的方案
    Django框架-管理后台项目之分页实现
    Django框架-Auth组件
    Django框架-Form组件
    Django框架-AJAX
    Django框架-中间件
    Django框架-cookie与session
    Django框架-Django模型(models)系统
    Django框架-Django视图(views)系统
    Django框架-Django模板(template)系统
  • 原文地址:https://www.cnblogs.com/ll9507/p/11306481.html
Copyright © 2011-2022 走看看