java初级程序员面试题

 1.java的8种基本数据类型
 byte 1字节 ,short 2字节,int 4字节,double 字节,
flort 4字节, long 8字节,boolean jvm位定义,char 2字节


 2.面向对象的三大特性
    2.1 封装:
    将内部实现方法隐藏起来对外只提供一个接口
    2.2继承
    派生类继承基类的通用方法和属性没有必要再次编写
    原来的类 从而大大的提高了代码的复用性;
    2.3多态
   同一个动作对于不同的对象 所产生的不同行为
   例如  同一动作 :人会吃饭   不同对象:中国人用筷子,美国人用叉子

 3.谈谈对面向对象的理解
 面向对象的核心是类和对象 java的面向对象的思想就是万物皆对象
 类:是对一类事物的描述 是抽象的 也就是看不见的
 对象:是存在于类中的具体的个体 也可以称之为实例 
 所以面向对象设计的程序主要是对对象的设计而不是对类的设计
 类不会占用内存 对象会占用内存****

   4.java优点
  java是一门面向对象语言
  java是跨平台 一次编译 到处使用
  java有自动回收机制
  java是分布式
  java是多线程的**                

   5. StringBuilder 和 StringBuffer的区别
       StringBuilder 是线程不安全的效率比较高
       StringBuffer 是线程安全的效率比较低
       所以现在大多数的情况下都是使用的StringBuilder因为效率高
       但是在开发中明确规定线程安全的话建议使用StringBuffer.**

6.简单介绍一下多态
        作用是不必为了派生类添加功能 直接调用 对抽象的基类进行处理就行 提高代码的复用性
         派生类的功能可以被基类的引用变量所调用 提高了代码的扩展性
         多态分为俩种分别是
         编译时多态 @overload 方法名相同    参数列表不同 返回值 无关( 重载)
         运行时多态@overwrite方法名相同      参数列表相同 返回值无关 (重写)

 7.string类可以被继承吗 
     string类是final修饰的类所以不能被继承
     底层是由数组实现的 数组长度不可变

 8.简单介绍一下static关键字
 static修饰的变量或者方法是由整个类来共享 可不必创建该类的对象来使用
 static的成员也称为类成员或者静态成员
 static修饰的方法
 存在于静态域中可以使用类名点方法名来使用
 静态方法只能访问静态成员 非静态成员要通过实例化对象来访问
 静态方法不能以任何方式来调用this关键字
 static修饰属性
 无论创建多少个对象都会共享这一属性也是存在于静态域中和类一个级别
 9.this和super的区别
 当成员变量和局部变量重名的时候应该调用this来区分
 this代表当前的对象谁调用this就代表谁
 this(参数列表)调用本类中的重载构造方法 必须放在第一行
 super是指调用父类的成员方法和属性
  可以从子类的构造方法调用父类的构造方法 必须放在第一行
 10. ==和equals的区别
    ==基本类型时比较的是值的大小
      引用类型时比较的是内存的引用地址
    equals比较的是值的内容是否一样
  11.抽象类
      首先有构造方法
      抽象类不能实例化 子类必须重写父类的抽象方法
      abstract不能修饰属性 private static final
      一般类中不能定义抽象方法 抽象类中可以有抽象方法也可以没有抽象方法
      抽象方法只有声明没有实现
      接口是一种特殊的抽象类
      接口中包含的方法都是抽象方法 没有方法体
       实现接口必须实现接口中所有的方法
       属性 private static final 方法 public abstract
       区别 抽象类有构造器 接口 没有
       关键字不一样
       抽象类可以有抽象方法也可以没有
       接口只能有抽象方法
       抽象类可以定义static 接口不能
       12.java中的堆与栈
         实例变量通过new出来的变量存放在堆中 当对象失去引用的时候会被gc回收
         局部变量存放在栈中当局部变量脱离了作用域被立即释放内存
        13.final finally finlize 
            final修饰变量 必须在声明的时候给一个初始化的值 而在以后的引用中只能读取
            fianl修饰方法 该方法不能被重写
            final修饰类 该类不能被继承
            finally 是处理异常作为必定会执行的一个语句块
            finalize 是用来调用gc清除对象之前的操作
       14.数组和链表的区别
       三个思路
       存储位置
       数组逻辑上存储的相邻的数据在物理存储位置上也是相邻的 而链表是随机的
       存储空间
       数组是一段连续的空间 链表可以是连续的也可以不是连续的
       长度的可变性
       数组一旦创建之后长度是不可以变得 链表是根据实际开发来分配
       区别
       数组的优点就是 随机访问性强 查询速度快
       数组的缺点 插入删除效率低  可能会浪费内存 必须要有足够的空间 数组长度是固定的
       数组的优点 存放个数不确定  数组长度不可变
       链表的优点就是插入删除速度快 应用率高  可扩展
       链表的缺点 不能随机查找 查找效率低 必须从第一个开始遍历
       14.集合
       collection接口
       list接口有序可重复的
       arraylist
       linkedlist
       vector
       set接口无序的不可重复的
       hashset
       linkedhashset
       treeset
       map接口  key value 键值对
       hashmap
       linkhashmap
       treemap
       hashtable
       15.sleep和wait的区别
       sleep方法是线程类thread类的静态方法调用这个sleep方法会让线程进入睡眠状态
       给初执行机会给其他进程等待休眠时间结束之后会进入就绪状态和其他进程一起
       争取cpu内存执行时间
       wait是object类的方法 当一个线程执行wait方法时 会进入该对象的等待池 
       可以通过notify notfiyall来唤醒等待的线程
       16.线程的生命周期
       新建
       就绪
       运行
       阻塞
       死亡
       17.线程与进程的区别
       进程:首先是拥有独立的堆栈区域和数据段 系统开销比较大
       由于进程之间是独立的特点 使得进程的安全性比较高当一个
       进程奔溃 并不会影响其他的进程
       进程的通讯管道比较复杂 比如 管道 信号 消息队列 套接字
       线程拥有独立的堆栈空间 但是共享数据段 彼此之间使用相同的地址空间 开销比较小
       线程是进程不同的执行路径 也就是说当一个线程死亡就等于整个进程死亡
       通讯方便
       18.什么线程什么事进程
       进程是指一次程序的运行是具有一定独立的程序关于某个数据集合上的一次运行 是操
       作系统分配和调度最小的单位
       线程是操作系统运算调度的最小单位 存在于进程之中是进程中实际运算的单位
       他们俩者之间的关系
       进程指的是一个程序运行的实例 线程是进程的实体
       线程必定只有一个进程 而一个进程可以有多个线程
       19.thread类的start()和run()方法的区别
       start方法用来启动新的线程start方法的内部调用了run方法 这和直接调用run方法不一样
       当你调用run方法的时候只是在原来的线程中调用没有新的线程启动start方法会启动新的线程
       20.当一个线程操作共享资源的时候 在没有执行完毕的情况下 共享资源会出现线程安全的问题
       方法有俩种一是同步代码块 二是同步方法
       同步代码块 synchronized(同步监视器){
       同步代码块
       }
       同步监视器:可以用对象来承担 针对于实际开发可以有对象和this关键字 对于继承只能用静态的
       对象
       方法二:同步方法
       确保一个线程执行方法时其他线程要等到该线程执行结束
       21.java中notfiy和notdiylly的区别
       notfiy不能唤醒某个具体的线程 所以一个线程在等待的时候他才有用武之地
       notfitlly 唤醒所有线程并且争夺锁确保了至少有一个线程进行
       22什么是泛型
       简单来说是一种标签 不确定的类型 当用户使用的时候确定类型  用于解决安全问题 是一种类型安
       机制 
       好处
       将运行时可能抛出的异常转移到编译期
       提供了安全性
       避免强制类型的转换
       23.概述反射和序列化
       反射:在运行状态中 对任意一个类 都能知道这个类的属性和方法
       对于任意一个对象 都能够调用他的任意方法和属性这种动态获取和动态调用简称反射
       序列化
       可以理解为把对象转换为容易传输的格式的过程
       序列化的好处
       方便保存对象 因为对象不能保存 所以可以通过序列化来保存对象 

猜你喜欢

转载自blog.csdn.net/qq_45326657/article/details/94588727