每天三道面试题2019-09-14

1、char、varchar和text的区别

char:存储定长数据,必须在括号里定义长度,如char(10),无论你这个字段没有存够10个字符,也会以10个字符的长度进行存储。
定义:
varchar:存储变长数据,必须在括号里定义长度,如varchar(255),在没有超过此定义长度时,按照你的数据长度进行存储,如数据长度为5则按5个字符空间大小进行存储,而不是255.
text:存储可变长的非Unicode数据,不需要指定长度,如果指定不会报错,但是不起作用,在不超过最大值情况下,当超过定义的长度时依然可以继续插入。

存储空间:
char最多能存255个字符,和编码无关。
varchar最大空间为65535字节,能存多少个字符和字符集有关。
text最多可以存2^31-1个字符,

检索效率:
数据的检索效率:char>varchar>text
因为char长度固定检索性能高,varchar次之,text最差。

知道长度用char用char,超过255长度用varchar或text,经常变化用varchar,能用varchar就不选text。

2、get和post的区别

  1. get用于获取资源,是无副作用的,是幂等的,可缓存;post用于修改服务器上的数据,有副作用,非幂等的,不可缓存。
  2. get和post都是基于http协议的,是http的两种请求方式,但是传输方式是一样的。在不带参数的请求里,报文格式上,get和post只是请求头不同,get:GET /url http/1.1,post:POST /url http/1.1。在有参数的请求里,按照约定get方法的参数位于url后面,从?后面开始,不同参数使用&分开,在浏览器地址栏中可见;而post方法参数放在报文的body里面,在浏览器地址栏不可见。这是按照约定进行的,也可以不按照约定去做,只是需要服务器做相应的操作,按照自己定义方式解析出数据便可,如get方法参数在body中,post的方法参数在url后面
  3. 对url长度的限制,get最大2048个字符(w3c的标准,不同浏览器可能不同),post没有限制。首先要明确一点,http并没有对get或post的数据长度进行限制,而是浏览器和服务器对他们做出限制,(浏览器为什么这么做不太清楚,大概是为了配合服务器)服务器为了性能(处理长url消耗资源)和安全(恶意拼接大长url进行攻击)所以限制,超过长度的url会被截断掉。
  4. 对数据类型的限制,get只允许ASCLL字符,post没有限制,也允许二进制数据。
  5. 在安全性上,http中的post方法要比get方法安全,数据不会显示在地址栏上。但是从传输角度来说他们都是不安全的,都是明文传输,只要在网络节点上抓包,就能获取完整的数据报文。但https传输是安全的,其传输过程经过加密。

3、什么时候会发生OOM

常见oom的异常:

  1. java.lang.OutOfMemoryError: Java heap space
    java堆内存溢出,一般由于内存泄漏或是堆的大小配置不当引起。
  2. java.lang.OutOfMemoryError: PermGen space
    java永久代溢出,即方法区溢出(方法区又称为非堆,jdk1.6存在永久代其在永久代,jdk1.7逐步移除永久代其在堆中,jdk1.8没有永久代其在元空间里)。
  3. java.lang.StackOverflowError
    java虚拟机栈溢出(虽然不是oom error),一般由死循环和深度递归调研造成,栈大小设置过小也会出现此异常。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值