money_summary1

本文深入探讨Java多态原理、内存机制、并发编程等核心技术,并对比分析常见数据结构及框架的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试综合

原文参考 https://www.cnblogs.com/java1024/p/7685400.html

JAVA多态的实现原理

静态多态:
动态多态:

JAVA 中堆和栈的区别,说下java 的内存机制

栈:存储局部变量/动态链接/出口,线程私有
堆:主要存储对象,线程共享
内存机制:
    java运行时内存区域:
        数据:堆,虚拟机栈
        指令: 程序计数器,本地方法栈
    java内存模型:
        逻辑内存模型:主内存-->线程内存之间的数据交换方式,线程内存读取主内存数据 然后操作,操作完后写入主内存,和硬件的数据存储模型类似
        物理内存模型: 即堆栈,栈 随线程生随线程死,堆线程数据共享,所以重点研究,年轻代/老年代/方法区  eden/s0/s1

wait()和sleep()的区别

    wait() Object的方法 释放锁/CPU时间片 等待唤醒
    sleep() Thread的方法 阻塞 不会释放锁/CPU时间片just等一会

抽象类和接口的区别

    java单继承多实现机制,使用接口更加便于拓展
    但抽象类有一个好处,就是适合模板方法

Override和Overload的含义以及区别

    Override重写:
        重新编写,即实现或者覆盖接口或者抽象类的方法,动态多态,运行时会解析栈区的动态链接,确认调用具体
        实现类的方法 
    Overload重载:
        重新载入,即同一个方法名不同的参数(不包括返回值,因为方法签名不包含返回值), 可以理解为静态多态,
        类装载时会对字面量解析成具体的方法

Hashcode的作用,与 equal 有什么区别?

    hashcode:hash算法需要这个作为依据,比如hashMap,hashSet
    equal:一般要求equal相同的情况下 hashcode也需要相同

Java的四种引用,强弱软虚,以及用到的场景

    强引用:最常见的引用,比如Object o = new Object();
    软引用:WeakhashMap,便于内存回收,当key为null时 自动回收内存

Object有哪些公用方法?

equals/toString/clone/getClass 每个对象的基础方法
wait/notify/notifyall 监视器方法

Switch能否用string做参数?

1.7以后可以,语法糖,编译后仍旧使用的string的hashcode值

进程和线程的区别:

进程:一个tomcat启动就是一个进程
线程:进程更细一步的划分 CPU调度的最小单位

数据库事务

数据库事务的四大特性ACID
A原子性  不会是数据库操作的中间态
C一致性  业务上的 比如转账后的两个账户的总额是一致的
I隔离性  
        读未提交  脏读
        读已提交  不可重复读  可能同一事务两次读取读到的数据不一样 
        可重复读  幻读 INNOdb  可能是通过缓存 让两次查询数据一样 但如果本事务中做更新操作 却会更新到其他事务已提交的数据
        串行     效率慢

    不同隔离级别都会有一定的问题,数据严重程度 脏读>不可重复度>幻读
    有脏读的问题就有不可重复度 幻读的问题
D持久性  提交了就会持久的保存在数据库中

死锁的必要条件

竞争资源
循环 持续的相互等待

解决死锁:a.顺序加锁解锁解决相互等待   b.设置超时  解决持续等待

CopyOnWriteArrayList

即采用一种乐观锁的思想,认为绝大多数操作都是读数据,所以
对读不采用任何的同步操作,保证读操作的效率,
而针对写操作,直接完全不干涉读操作,复制原有的数组,并操作原有数据,最后再将新数组赋值给旧数组,通过lock加锁保证写操作的线程安全性
存在的问题就是数据的一致性,可能有延迟(即读的可能不是最新的数据) 但能保证数据的最终一致性  
适用于读远大于写的操作,比如缓存

线程池

ExcutorServcie pool = new ExcutorService(coreSize,maxSize,bolckQuene,拒收策略)  

Vector和ArrayList的区别

一代新人胜旧人,verctor老版本的同步arrayList,
现在线程安全一般都使用Collections.synchronizedList,CopyOnWriteArrayList

HashMap,ConcurrentHashMap与LinkedHashMap的区别

hashMap:线程不安全,数组+链表+红黑树
ConcurrentHashmap:线程安全
LinkedhashMap:线程不安全 hashmap子类,

Servlet和Filter的区别:

功能上的区别:
Filter:主要目的是用于拦截是否处理
Servlet:主要处理业务,
个人觉得Filter和Servlet的关系有点类似Aop和业务的关系,抽取共同的功能进行统一处理 比如字符 鉴权

生命周期的区别:
Servlet:容器启动加载配置的Servlet,调用init,使用中调用doService(),容器销毁destory
Filter:容器启动时加载配置的filter,使用中doFilter()

Mybatis

ORM框架,关注重点在于xml,其作用是便于与数据库交互,主要通过xml的方式,
是对jdbc的封装
其整个原理比较简单,SqlSessionBulider->SqlSessionFactory-->SqlSesion-->(getMapper)-->commit
Sqlsession是核心,包含了执行器,配置文件,事务等

Spring事务配置方法:

切面
编程式TranctionTempleta
声明式@transactional

分布式Session框架

要实现分布式session,两个方式:
1.同一用户或id访问的一直都是同一台服务器
    可以利用cookie
    session粘连负载均衡算法(可能得手写),
    比如通过zuul的过滤器,分布式的每台服务器一个serviceId,计算出一个值,放入cookie中
2.session的数据公共
    比如redis

单点登陆是利用coolie记录tooken 而tooken通过一个公共的服务可以查到数据    

Session与Cookie

如果没有session,交互时数据全在cookied上,太多不安全,于是cookied通过一个key(jsessionid)指定一个session,然后将这部分数据存在服务器
所以session是cookied的拓展,
Session数据在服务器 设置超时默认是半小时
Cookie数据在浏览器,浏览器    需要加密

SpringMVC运行原理

SpringAOP/IOC

类加载器工作机制:

线程池

CAS

Volatile和Synchronized

String StringBuider StringBuffer

Synchronized 与Lock

GC

内存模型

线程变量

//有一个内部类ThreadLocalMap 参照hashmap实现
//但其中的entry采用的是WeakReference
class ThreadLocal<T>{
    public void set(T value){
        //以当前线程为key
        Thread key = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if(map != null){
            map.set(key,value);
        }
    }
     static class Entry extends WeakReference<ThreadLocal<?>> {
            /** The value associated with this ThreadLocal. */
            Object value;

            Entry(ThreadLocal<?> k, Object v) {
                super(k);
                value = v;
            }
        }
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值