Java面试通关要点汇总集

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Java面试通关要点汇总集基础篇基本功1.面向对象的特征封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作继承:继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展多态:重写,重载2.final,finally,finalize的区别final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。3.int和Integer的区别Integer是int的包装类,int是Java的基本数据类型Integer必须实例化之后才可以使用,int不需要Integer实际是对象的引用,当new一个integer时实际生成指针指向该对象,int直接存储数值Integer的默认值为null,int的默认值为0,4.重载和重写的区别重载:一个类中方法名一样,参数类型和个数不一样,返回值类型可一样也可不一样重写:存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型。不能重写final方法,只能重写abstract方法5.抽象类和接口的区别抽象类可以有默认实现,接口完全抽象不存在方法的实现抽象类使用extends关键字子类不抽象必须提供方法的实现,接口关键字implement需提供接口所有声明方法的实现单继承成多实现6.StringStringBufferStringBuilder的区别String是字符串常量,StringBuilder和StringBuffer是字符串变量。StringUI想创建之后不可更改,后两者是变量可以修改;StringBuilder是线程不安全的,而StringBuffer是线程安全的;7.说说反射的用途和实现JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制8.Session和cookie的区别相同点:都是用来跟踪浏览器用户身份的绘画方式不同点:cookie数据在客户端,session在服务器端Session默认保存30分钟,过期销毁9.JDBC流程注册驱动:class.forName()连接数据库:conn=DriverManager.getConnection(url,name,pwd)创建statement:conn.createStatement();搬运数据,执行SQL语句:state.excuteQuery(sql);处理结果集,关闭连接10.堆,栈,静态区栈区:编译器自动释放,存放函数参数值,系统变量堆区:程序员分配释放静态区:存放全局变量,静态变量11.MVC设计思想Model,View,Controller(模型-试图-控制器)创建Web应用程序的模式Model:处理应用程序数据逻辑的部分,负责在数据库中存取数据View:应用程序中数据显示,依据模型数据创建Controller:应用程序用户交互部分,从试图读取数据,控制用户输入,想模型发送数据12.Equals和==的区别,compareTo==:比较的是变量内存中存放的对象的内存地址,用来判断两个对象的地址是否相同,是否指向同一个对象。Equals:比较的是两个对象的内容是否相同compareTo:这个函数的作用就是对两个字符串按字典排序的方式进行比较,返回两个字符串中第一个不同的字符的ascII码差值当我们创建一个对象(newObject)时,就会调用它的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,当我们在后续代码中调用的时候用的都是栈内存中的引用,还需注意的一点,基本数据类型是存储在栈内存中Dubbo1.dubbo的容错机制失败自动切换,当出现失败重试其他服务器;retries参数快速失败,只发起一次调用,失败立即报错,用于新增记录等;失败安全,出现异常直接忽略,用于写入审计日志等操作;2.nginx负载均衡、代理配置upstreamwebServers{serverip:端口weight=}3.zookeeperdubbo框架开发的消费者,提供者都向zookeeper注册自己的URL,消费者还能拿到并订阅提供者的注册URL,在后续程序中调用提供者。提供者发生变动,通过zookeeper向订阅的消费者发送通知。4.Dubbo的请求流程和原理客户端一个线程调用远程接口,生成唯一一个ID,将打包的方法信息(接口名,方法名,参数值列表,处理结果回调对象)封装成对象;向专门调用信息的全局concurrentHashMap里面put(ID,obj)将ID和方法调用信息封装异步发送出去;当前线程回调对象Callback方法获取远程返回的结果;服务端接到请求,将结果返回客户端包含ID,从concurrentHashMap取callBack将结果设置到callBack中5.Mybatis分页插件的原理直接在SQL中输入物理分页的参数分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数集合1.List和Set的区别List:有序,集合元素都有索引通过索引访问元素,存储重复元素。Vector底层数组结构,可变长度数组。原理:一旦原数组长度不够,会创建新数组,将原数组的元素复制到新数组中,并将新元素添加到新数组中。Vector是同步的ArrayList:底层是数组结构,也是支持长度可变数组的。是不同步的。替代了Vector.因为效率高。查询效率很高。但是增删的效率很低LinkedList:底层是链接列表结构,简称链表结构。是不同步的。这个中结构的好处:对元素的增删非常效率很高。查询的效率很低Set:不包含重复元素,存入元素顺序与取出顺序不一致HashSet:底层数据结构是哈希表,不保证顺序,是不同步的TreeSet:可以给Set集合中的元素进行指定顺序的排序。非同步的。2.List和Map的区别List接口继承collection接口,Map是个顶级接口List此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素map将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值3.数组和链表的区别数组:内存中连续的区域,需要先申请内存的大小浪费空间,插入删除数据效率低,随机读取效率高,连续的指导每一个数据的内存地址,不利于扩展空间不够用药重定义数组链表:内存中存在任何地方,不要求连续,增删数据很容易,查询数据很难,扩展方便。4.HashMap和HashTable的区别,concurrentHashMapHashMap:线程不安全,允许null的键值,效率高,不是synchronize要同步,有containsKey,containsValue方法,是HashTable的轻量级实现ConcurrentHashMap:把map拆分成n个小的hashtable,执行put操作的时候具体看存进哪个分割快进行上锁,锁住的不真实整个map。ConcurrentHashMap源码解读:主要实体类有三个:ConcurrentHashMap,Segment,HashEntry。5.HashMap的实现原理和代码实现HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hash值,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。HashMap在每个链表节点中储存键值对对象。6.Redis的理解Redis本质上是一个Key-Value类型的内存数据库,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色特点:数据存在内存中,速度快,持久化支持类型多,string,list,set,hash支持事物,回滚,崩溃修复发布订阅,分布式;线程1.创建线程的方式和实现继承Thread类实现Runnable,callable接口2.Runnable和callable的区别Callable规定的方法是call(),Runnable规定的方法是run()。其中Runnable可以提交给Thread来包装下,直接启动一个线程来执行,而Callable则一般都是提交给ExecuteService来执行;Callable的任务执行后可返回值,而Runnable的任务是不能返回值得;call方法可以抛出异常,run方法不可以;运行Callable任务可以拿到一个Future对象,c表示异步计算的结果;3.Sleepjoinyield有什么区别Join:是当前线程等待调用join方法的线程结束后继续执行Sleep:需要指定等待时间,让正在执行的线程在指定时间内暂停执行。不释放锁,如果有synchronize同步块,其他线程不能访问同步数据Wait:必须在synchronize语句块中使用,释放锁标志,调用wait方法当前线程放入等待,直到notify后移除Yield:不释放锁,没有参数只是让当前线程重回可执行状态,执行yield方法线程有可能马上进入执行,只能视同或高优先级线程得到执行机会4.线程池的核心属性和处理流程(ThreadPoolExecutor类)线程池的好处:避免大量创建销毁线程,使用者不用关心创建销毁线程;用户提交的任务能及时处理,提高响应速度;监控管理线程。参数:线程池的基础大小;线程池的最大大小;保持活动时间;工作队列;线程工厂;执行流程:线程池大小小于基本大小是创建线程执行任务;大于时,任务加入工作队列中;为入队成功的创建线程执行任务,线程池大小大于最大大小时,驳回;5.JVM的类加载机制代码编译后会变成JVM能够识别的.class文件。JVM通过class文件的类描述数据从文件加载到内存,对数据进行解析、校验、初始化成为JVM可以字节使用的Java类型6.JVM分代和垃圾回收机制JVM组成:堆、栈、方法区、程序计数器、本地方法栈。垃圾回收:检测垃圾对象,释放空间7.多线程应用场景后台任务:定时任务,发送邮件异步处理:日志记录8.说说线程的安全问题在多线程编程中,有可能会出现同时访问同一个资源的情况,这种资源可以是各种类型的的资源:一个变量、一个对象、一个文件、一个数据库表等,而当多个线程同时访问同一个资源的时候,就会存在一个问题数据存储1.MySQL性能调优代码调优:字符串操作,多线程,异步操作数据库引擎:锁的方式,存储机制,分布式策略;SQL语句调优:全表检索,索引,(select*,having,or,like,!=);系统调优:网络性能,内存磁盘;2.MySQL如何实现索引的innoDBB+tree作为索引的结构,数据文件本身就是索引文件。索引的key是数据表的主键,叶节点保存完整的数据记录。InnerDB数据按主键聚集,必须要有主键3.建立索引的常用规则,索引的原理表的主键,外检必须有索引;数据量超过300的必须有索引;经常与其他表连接,连接字段简历索引;表记录太少,频繁操作的表不适合建索引;4.说说MYSQL主从复制主从安装相同版本的MySQL;修改master,slave服务器serer-idlog-bin=mysql-bin;开启二进制日志重启主MySQL;在主服务器上

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功