zoukankan      html  css  js  c++  java
  • 面试-基础篇

    基本功

    1,HTTP 请求的 GET 与 POST 方式的区别:Post的数据大多都在body里面,post比get多一次header请求

    2,equals 与 == 的区别:equals是逻辑等,==是对象地址

    线程:

    1,Arraylist 与 LinkedList 区别:arraylist底层数组(读取效率高),linked底层链表(更新效率高)

    2,ArrayList 与 Vector 区别:vetctor线程安全,synchronize

    3,HashMap 和 Hashtable 的区别:hashtable线程安全(synchronize),key value皆不能为空

    4、HashMap 和 ConcurrentHashMap 的区别:ConcurrentHashMap线程安全(1.8为synchronize,1.7及之前为segment AQS)
    5、HashMap 的工作原理及代码实现:数组+链表(1.8新增红黑树),扩容为当前容量一倍(arraylist为当前的一半)
    6、ConcurrentHashMap 的工作原理及代码实现:同hashmap,1.8为synchronize,1.7及之前为segment AQS

    线程
    1、创建线程的方式及实现:Thread,Runnable,Callable(FutureTask)
    2、sleep() 、join()、yield()有什么区别:sleep出让CPU,不释放锁|wait出让cpu,释放锁|yield出让cpu,不释放锁|join,让当前线程等待调用join的线程
    3、说说 CountDownLatch 原理:AQS中,state为count
    4、说说 CyclicBarrier 原理:
    5、说说 Semaphore 原理:
    6、说说 Exchanger 原理
    7、说说 CountDownLatch 与 CyclicBarrier 区别
    8、ThreadLocal 原理分析:Thread有个map属性,key为ThreadLocal类的变量,value为范型值,每次get都是去查map
    9、讲讲线程池的实现原理:poolSize < corePoolSize,新建线程|poolSize > corePoolSize,队列未满,放队列|poolSize > corePoolSize,队列已满,poolSize < maximumPoolSize,新增线程|poolSize > corePoolSize,队列已满,poolSize = maximumPoolSize,则拒绝|线程执行完任务后,不立即退出,而是检查队列还有没有任务,没有则会退出超出corePoolSize的线程
    10、线程池的几种方式:newCachedThreadPool|newFixedThreadPool|newSingleThreadExecutor|newScheduleThreadPool|new ThreadPooledExecutor()
    11、线程的生命周期

    锁机制
    1、说说线程安全问题:

    2、volatile 实现原理:内存屏障,禁止重排序

    3、synchronize 实现原理:monitorenter,monitorexit(底层为对象头中记录了线程标识)

    4、synchronized 与 lock 的区别:synchronized是jvm实现的,悲观锁,lock是jdk的AQS实现的,乐观锁

    5、CAS 乐观锁:乐观去操作,失败则可以采用自旋重试(底层实现为MESI协议)

    6、ABA 问题:N线程读取变量为A,M线程A-->B,然后又B-->A,N线程再读取的时候还是A,认为变量没有变化,可以采用AtomicStampedReference来解决,思路是版本号

    7、乐观锁的业务场景及实现方式:数据库采用版本号来解决记录的并发更新

    JVM

    jvm基础知识

    1、JVM 由哪些部分组成?:类加载器,执行引擎,内存区,本地方法调用

    2、Java 虚拟机是如何判定两个 Java 类是相同的?:类全路径名+类加载器的namespace

    3、类加载器是如何加载 class 文件的?加载-->连接(验证-->准备-->解析)-->初始化-->使用-->卸载 

    4、类加载?:获取类的字节码-->类的静态数据结构转化为运行时数据区数据结构-->在堆区生成Class对象,访问入口

    jvm内存管理

    1、jvm内存划分:方法区(运行时常量池,加载的类信息,常量,静态变量,jit后的代码),堆区(新生代(eden,s1,s2),老年代),虚拟机栈(局部变量表+操作数栈+动态链接+返回地址),本地方法栈,程序计数器

    2、对象内存分配规则:优先在eden分配,无足够空间出发minor GC|大对象直接进入老年代|年轻代长期存活对象进入老年代|空间分配担保

    3、Java内存模型:变量都存在主内存,每个线程有自己的工作内存|工作内存包含主内存变量副分,线程操作的是工作内存|线程间变量值传递通过主内存进行

    4、线程通信:共享内存变量|wait,notify

    5、

  • 相关阅读:
    67.ORM查询条件:range的使用,使用make_aware将navie time 转换为aware time
    65.ORM查询条件:gte,gt,lte和lt的使用
    66.Python中startswith和endswith的使用
    63.Python中contains和icontains
    64.Python中ORM查询条件:in和关联模型
    77.Q表达式详解
    76.Python中F表达式详解
    75.Python中ORM聚合函数详解:Sum
    74.Python中ORM聚合函数详解:Max,Min
    Cadence SPB 入门
  • 原文地址:https://www.cnblogs.com/vindia/p/9070045.html
Copyright © 2011-2022 走看看