写面试题中遇到的问题(18)(被蹂躏篇)

由于被某老师蹂躏了,这些都是很基础,但是很容易忽视的题,总共10道

ps:我把答案都放在解析下面了

1. 数组有length()吗?

解析:

        //数组是用length获取长度
        int[] a = {3, 2, 4};
        int aLength = a.length;
        //字符串是用length()获取长度
        String str = "Hello World";
        int strLength = str.length();
        //集合是用size()获取长度
        List<Integer> list = new ArrayList<>();
        int listLength = list.size();

答案:数组中是用length获得其长度

2. get和post在浏览器回退的时候,会发送请求吗

解析及答案:get不会,post会

3. 面向对象和面向过程的区别

初识想法:只可意会不可言传,但是说不出来就是不会

解析:面向对象三大特点:封装继承和多态,所视之处均为对象,而面向过程是解决问题,更关注于步骤,所视之处均为步骤。

举个栗子:想吃蛋炒饭,面向对象就会打开外卖app,点外卖,更注重方法的调用,把其归入一个对象,让对象去干活,而面向过程则是亲自下厨,从洗米开始。

面向过程:代表语言(C语言,汇编语言)
优点:性能比面向对象高,占用空间小,一般用于比较消耗资源的系统或硬件,比如:单片机(本身就嘎小点内存,只能用面向过程的语言),嵌入式开发,Linux和Unix等。性能是重点的均用面向过程语言
缺点:由于是注重过程,想要在其中加入新的功能时特别复杂,不容易维护,不容易复用,不容易扩展

面向对象:代表语言(Java,C++)
优点:易维护,易复用,易扩展,由于面向对象的封装继承和多态,可以设计出低耦合度的程序,可移植性强
缺点:性能没有面向过程高

答案:面向过程是“该怎么做”,面向对象是“让谁做”。

4. 数据库中char和varchar的区别

解析及答案:有三点不同
一、长度不同
char类型:长度固定
varchar类型:长度可变,满了就加

二、效率不同
char类型:每次修改的数据长度相同,效率高
varchar类型:每次修改的数据长度不同,效率低

三、存储不同
char类型:初始预计字符串再加一个记录字符串长度的字节,占用空间较大
varchar类型:实际字符串再加一个记录字符串常量的字节,占用空间较小

5. 抽象类可以不写抽象方法吗

解析:可以

答案:抽象类可以没有抽象方法,但是有抽象方法的类一定是抽象类

6. 继承抽象类可以不重写抽象方法吗

解析:可以

答案:但是要声明有这个抽象方法

7. error和exception的区别

解析及答案:error是系统级别错误,程序不可解决,exception表示程序正常运行会报错,需要捕捉或处理

8. select * from 表单,开发时能用吗?

解析:如果开发的程序用户是百万级或者更高的,第一查询效率特别慢,可能查询所有,整个电脑卡很久,影响开发效率

答案:不能

9. 数据库一个汉字占据几个字符

解析及答案:gbk占2个,utf8占4个

10. mybatis中#{}和${}的区别

解析及答案:
一、代表的意义不同
#{}:代表一个问号(?),表示占位符
${}:直接拼接字符串

二、安全性不同
#{}:更加安全,防止SQL注入
${}:无法防止SQL注入

通过代码来演示
当我们需要通过id或者名字来查询的时候,我们会发现他们的sql语句几乎一样
他们的接口

    User findById(int id);

    User findByName(String name);

    User findByFile(@Param("column")String column,@Param("columnValue")String columnValue);
    

xml文件

    <select id="findById" resultType="user">
        select * from e where id = #{id}
    </select>
    <select id="findByName" resultType="user">
        select * from e where name = #{name}
    </select>

这时候我们可以考虑用美元符号作为拼接字符串

    <select id="findByFile" resultType="user">
        select * from e where ${column} = #{columnValue}
    </select>

但是,如果有心的小伙伴们第一时间想到的是如果我传进来的是password怎么办,我伪造一个get/post请求,是不是很容易就获取到其密码了呢,所以一般不推荐使用

你可能感兴趣的:(面试题错题集,linux,windows,网络安全)