JAVA面试题,持续更新中.......

面试题
第一天
1.请分别说明修饰符default,public,protected,private的访问权限
default:一般来说不写就是默认权限,范围在本包下
    public:公共的,在任何包下都能访问
    protected:受保护的,范围包括本包以及其他包中的子类
    private:私有化,别的类不能访问,只能在本类中访问

2.请写出String中分割,截取,替换,查找索引的方法
    分割:String split("分隔符") 写在split里面的字符不再是字符,而是分割的标准
    截取:String substring(int begin,int end)从指定开始截取到最后
         String substring(int begin)从指定开始截取到最后    
    替换:String replace(char old,char new)在该字符串中,将给定的旧字符串用字符串替换
         String replace(String old,String new)在该字段中 ,将给定的旧字符串,用新字符串替换  
    查找索引:int indecOf("字符串")第一次出现的位置,返回索引

                    int lastIndexOf("字符串");最后一次出现位置,返回索引

3.请写出代码获取当前时间并生成字符串,格式为"年月日分秒",如:20220101091010

A.SimpleleDateFormat(String pattern)//给定的模板

B.日期和字符串的转换
    a.Date ---- String  //日期对象转换成字符串
    b.String ---- Date  //字符串转换成日期对象

String time1 = "20220101091010";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = sdf1.parse(time);//字符转转换成date对象
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
String time2 = sdf2.format(date);//日期转换成字符串对象




面试中的答案
SimpleDateFormat sdf = new SimplDateFormat("yyyyMMddHHmmss");
String time = sdf.format(new Date());

4.读取文件和写入文件的io类分别是?

        读文件:InputStream --- FileInputStream

        写文件:OutputStream --FileOutputStream

字符流=字节流+编码表   真正写入读取的时字节流

5.请说明ArrayList,LinkedList,HashSet,HashMap的区别
    ArrayList:数组结构,查询快,(索引是连续的),增删慢(都要重构数组结构,定长)
    LinkedList:链表结构,查询慢,增删快

两个效率都高,线程不安全
    HashSet:单列集合,存储的元素是唯一的,不保证顺序,他的底层是HashMap
    HashMap:双列集合,存储的键是唯一的,不保证顺序,他的存储依靠的是哈希表结构

保证唯一性的方法是:hashcode,equals方法

 6.请说明一个线程完整的生命周期

7.equal和==的区别是什么?
假设Integer a =1;Integer b = 1return a==b;返回的结果是什么

1.==是运算符,equals是方法

   ==可以比较基本类型和引用类型,equals只能进行对象的比较

   ==基本数据类型比较的是数值,引用类型比较的是地址值

   equals只能进行对象之间进行“内容”比较,没有重写的话是Object定义的,比较地址值

2.Integer类型 Integer a = 1;Integer b = 1;reture a==b;结果a==b比较地址值,一样,原因是什么

因为Integer有一个整数缓冲区,就是程序启动的时候,会把常用的-128~127之间的Integer对象创建出来,只要你需要的范围是该范围,就不会new了。1在这个里面,a,b都是从这个区域取出来的,所以地址是一样的

8.NullPointException代表什么意思?什么情况下才会出现在这个异常
即空指针异常。最常见的原因就是没有初始化,调用了未经过初始化的对象。
例如字符串变量未初始化、接口类型的对象没有初始化、当一个对象的值为空,没有判断为空的情况等
第二天
1:final关键字特点
    修饰类,变量,方法
    final修饰的类不能被继承
    final修饰方法:不能被重写
    final修饰变量:不能被修改,初始化后只能被赋值一次.变量的值不能变,基本类型数值不能变,引用类型地址值不能变
    
2:Http响应状态码有哪些,分类描述。并列举常见的状态码及其含义。
    常用响应状态码:
        200:成功
            客户端请求成功,处理成功
        302:重定向
            指示所请求的资源已移动到由Localtion响应头给定的URL,浏览器会自动重新访问这个页面
        304:走缓存
            告诉客户端,你请求的资源至上次取得后,服务端并未改变,直接用本地缓存
        400:请求参数有问题 交互规则
            客户端请求语法有错误,不能被服务器所理解,传递参数或者返回的JSON有问题
        404:资源找不到
            请求资源不存在,一般是URL输入错误,或者网站资源被删除了
        405:请求方式不匹配
            请求方式有误,比如应该用GET请求方式的资源,用了POST
        500:服务器有异常
            服务器发生了不可预期的错误。服务器出现异常,可以看日志
3:重写(Override)和重载(Overload)指的是什么?
    重写(Override):指的是 子类中出现了父类中方法声明(名字 参数 返回值)一模一样的方法
                    且子类重写后的方法权限修饰符大于或等于父类的权限修饰符
                    重写也叫覆盖,子类对象调用的时候,用的是重写的
    重载(Overload):在同一个类中,出现了同名的方法,只需参数列表不同,实现功能的多样性

4:wait()和 sleep()的区别?
    a.所属不同:
        wait()是Object的普通方法
        sleep()是Thread的静态方法
    b.使用语法不同:
        sleep()可以用在任意代码位置,(不管是否在加锁的代码中)当前线程都会休眠 
        wait()只能用于同步中,(加锁状态下)表示线程不参与...进入无限等待...等待唤醒
    c.唤醒方式不同:
        sleep不需要唤醒,进入计时等待,特点:如果有锁,不会释放锁,与锁无关
        wait()先释放锁,进入无限等待时间,如果不唤醒不会自动醒

5:接口和抽象类的区别是什么?
    抽象类:对类的抽象,接口:对功能的抽象
    1.成员不同
    抽象类包含类中所包含的成员变量,成员方法,静态变量,构造。。。。方法还可以是抽象的
    接口中的成员变量只能是public static final类型,只能是常量,因为没有构造
    2.抽象类定义的目的是被子类继承的,接口定义的目的是被子类发现的
    3.类与类之间的继承只能是单继承,类和接口之间存在多实现
6:mysql limit语句 传一个参数 limin n 和传两个参数limit n m 之间有什么区别?
    limit有两个参数
        limit n 取前n个
        limit m n 从m开始取n个
    第一个参数表示:取前n个数据
    第二个参数表示:从m开始取n个数据
7: 在 mybatis中,${}和#{}的区别是什么?
mybatis底层是jdbc
    1.${}:预编译处理的占位符;#{}:拼接符
    2.Mybatis在处理#{}的时候,在编译sql语句的时候把#{}位置变成?来处理,运行的时候,就会把#{里面的内容}赋值给?的位置
      Mybatis在处理${}的时候,不会提前进行编译,只是在执行的时候,把$里面的内容拼接出来
    3.#{}的底层是预处理对象,可以有效防止sql注入风险(让参数是参数)
    4.能#不$,#在代表字符串数据的时候会自动添加引号,而$不会.$只能原样拼接
      #{}用于参数位置name=#{..} ${}做原样拼接,适合表达字段名
8:cookie和session的区别?
这两个技术都可以实现会话跟踪
    a.存储位置不同
        cookie:存储在浏览器端;session:存储在服务器端
    b.两者的安全性不同
        cookie相对不安全;session相对安全
    c.数据大小不同,存储类型不同
        单个cookie在客户端的限制是3k,只能是键值对,值只能是字符串;session理论上没有大小限制,可以存储任意类型
    d.存储时间不同
        cookie默认会话级别,可以长期存储;session默认30分钟,可以主动销毁
    e.服务器压力不同
        cookie不会影响服务器性能,因为在浏览器端;session过多会影响服务器性能

第三天

1.Object类有哪些方法

浅拷贝:基本类型拷贝数值 引用拷贝地址值

深拷贝:基本类型拷贝数值  引用拷贝新的地址  内容拷贝

2.静态变量与实例变量区别?

静态变量:静态变量由于不属于任何实例对象,属于类的,所以在内存中只会有一份,在类的加载过程中,JVM只为静态变量分配一次内存空间。方法区

实例变量:每次创建对象,都会为每个对象分配成员变量内存空间,实例变量是属于实例对象的,在内存中,创建几次对象,就有几份成员变量。堆内存

3.String类的常用方法有哪些?

indexOf():返回指定字符的索引

charAt():返回指定索引处的字符

replace():字符串的替换

trim():去除字符串两端的空格

split():字符串分割,返回分割后的字符串数组

getBytes():返回字符串byte类型数组

length():返回字符串长度

toLowerCase():将字符串转换为小写字母

toUpperCase():将字符串转换为大写字母

substring():字符串截取

equals():比较字符串是否相等

4.数组有没有length()方法?Sring有没有length()方法?

数组没有length()方法,有length属性。String有length()方法。JavaScript中,获得字符串的长度通过length属性得到的

5.String,StringBuffer,StringBuilder的区别?

第一:可变和适用范围

String对象是不可变的,而StringBuffer和StringBuilder是可变字符序列

“abc”字面值常量就是字符串对象,每次对String的操作相当于生成一个新的String对象,而对StringBuilder和StringBuilder的操作是对对象本身的操作,而不会生成新的对象。所以对于频繁改变内容的字符串避免使用String,因为频繁的生成对象将会对系统性能产生印象。

第二:线程安全

String由于有final修饰,是不改变的,安全性是简单而纯粹的。StringBuilder和StringBuffer的区别在于StringBuilder不保证同步,也就是说如果线程安全需要使用StringBuffer,不需要同步的StringBuilder效率更高

总结:操作少量数据==String

           单线程操作字符串缓冲区下操作大量数据==StringBuilder

           多线程操作字符串缓冲区下操作大量数据==StringBuffer

6.String str ="i"和String str = new String("1")一样吗

不一样呢,因为他们的内存分配方式不一样

String str ="i"的方式JVMhi将分配到常量地址池中,仅产生一个字符串对象

String str = new String("i"),JVM会现在堆内存中分配一个String对象,然后该对象指向常量池的字符串常量对象,如果字符串之前不存在,相当于创建了2个对象

7.String s= new String("we")创建了几个字符串对象

两个对象,一个是静态存储区常量池的“we",一个是用new创建在堆上的对象

8.基本数据类型,int初始值,Integer初始值

int初始值为0.Integer初始值是null

9.字符串操作:如何实现字符串的反转和替换?

可用字符串构造StringBuffer对象,然后调用StringBuffer中的reverse方法即可实现字符串的反转,调用relace即可实现字符串的替换

String s = "abcd";
//1.逆序遍历拼接
//2.转换成StringBuffer对象
String s = new StringBuffer(s).reverse().toString();
//replace实现替换

10.float f = 3.4;是否正确

不正确

3.4是双精度数,将双精度(double)赋值给浮点型(float)属于下转型(downcasting,也称为窄化)会造成精度损失

11.a = a+b与a+=b有什么区别

+=隐式的将加操作的结果类型强制转换为持有结果的类型。如果这两个整型相加,如byte,short,或者int,首先会将它们提升到int类型,然后再执行加法操作

byte a = 1;
byte b = 1;
b = a + b;//错误
b += a;正确

(因为a+b操作会将a,b提升为int类型,所以将int类型赋值给byte就会编译出错)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值