面试问题总结

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

  • 泛型的作用

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


 

原文地址:https://www.cnblogs.com/ll9507/p/11306481.html