
Java面试
常见面试题
wondream322
这个作者很懒,什么都没留下…
展开
-
Java IO总结
流的分类:字节流、字符流、带缓冲的流InputStream OutputStream 操作字节的流Reader Writer操作字符的流BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter带缓冲区的字符/字节流字节流和字符流的主要区别字节流 int read()返回单个字节 int read(byte[],int offset,int len)读取指定长度字节 如果不填则读取数组长度字节字原创 2022-05-21 23:19:31 · 242 阅读 · 0 评论 -
优化SQL步骤
1、查看SQL执行频率show (global\session) status like "Com_______";show (global\session) status like "Innodb_rows%";2、定位低效率执行SQL 1> 慢查询日志:通过慢查询日志定位哪些执行效率较低的SQL语句,用--log-slow-quries[=file_name]选项启动时,mysqld写一个包含所有执行时间超过long_query_time秒的SQL语句的日志文件。 2&g...原创 2021-04-01 22:59:27 · 22433 阅读 · 0 评论 -
关于JVM调优
那么面试时,如何回答JVM调优?1、主要需要你能回答两方面的问题:如何观察JVM的运行参数。比如你发现Java程序跑得慢,定期卡顿,OOM挂掉。为了找原因,你必须学会怎么去看JVM到底怎么运行的。这时需要你了解一些JVM自带的工具命令,比如jps、jstack、jhat,还有比较新的Java自带的JMC图形界面工具。通过他们你可以了解到一个Java进程有多少线程,每个线程什么状态,是不是在等着锁:进程的CPU和内存占用了多少;GC状态怎么样,Full GC频繁不频繁等等;内存中是不是有泄露,哪个地方可能泄原创 2021-04-01 22:12:35 · 22871 阅读 · 0 评论 -
垃圾回收器
垃圾回收器有哪些?串行垃圾回收器、并行垃圾回收器、CMS垃圾回收器、G1垃圾回收器串行垃圾回收器相关参数-XX:+UseSerialGC -XX:+PrintGCDetails -Xms16m -Xmx16mParNew并行垃圾回收器相关参数-XX:+UseParNewGC -XX:+PrintGCDetails -Xms16m -Xmx16mParallelGC并行垃圾回收器ParallelGC收集器工作机制和ParNew收集器是一样的,只是在此基础上,新增了两个和系统吞吐量相关的参数原创 2021-04-01 22:12:00 · 23132 阅读 · 0 评论 -
JVM锁升级
JVM锁升级过程分析一、过程概括1、从未被获取过得锁:无锁状态2、只被一个线程获取的锁:偏向锁3、多个线程获取锁,但并没法生锁等待:轻量级锁4、多个线程出现锁竞争:重量级锁(也就是一般意义的锁)二、举个栗子你家有一个碗,当没有人用这个碗时,它处于无锁状态。当你用这个碗吃饭时,它进入偏向锁状态,以后每次你用这个碗吃饭的话,你都不用进行加锁和解锁操作。有一天你女朋友去你家,但她只要求你吃完了再把碗给她用,你们虽然共用这一个碗,但是并不会在同一时间用,这是碗就进入了轻量级锁。但当你正在用碗吃饭的时候原创 2021-04-01 22:11:19 · 23913 阅读 · 0 评论 -
JVM线程
// ==================================================// 线程实现类结构// ==================================================// Class hierarchy// - Thread// - NamedThread 支持命名的非Java线程// - VMThread VM原始线程,用于执...原创 2021-04-01 22:10:43 · 24257 阅读 · 0 评论 -
JVM垃圾回收算法
JVM垃圾回收算法引用计数法标记清除法标记压缩法复制算法分代算法原创 2021-04-01 22:10:08 · 24589 阅读 · 0 评论 -
JVM内存模型
JVM内存模型1、年轻代 young 年轻代又可以分为:1个Eden区和2个Survivor区2、老年代 old3、元数据空间 metaspace原创 2021-04-01 22:09:31 · 25148 阅读 · 0 评论 -
常用的负载均衡方式
DNS域名解析负载均衡nginx反向代理负载均衡数据链路层负载均衡(负载均衡器LVS)原创 2021-04-01 22:08:40 · 25624 阅读 · 0 评论 -
java常用的数据结构
Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap一、Collection接口Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个转载 2021-04-01 22:07:37 · 25858 阅读 · 0 评论 -
java web项目锁的理解
常用的分布式锁1.当数据库单一的时候,利用数据库的锁机制。2.当数据库集群时,利用redis做分布式锁比较常见,在需要加锁的地方从redis里获取锁,代码执行完毕释放锁。当然了别忘了设置好redis锁的自动释放时间。SimpleLock对RedisLock进行封装,然后通过SimpleLogFactory获取SimpleLock3.利用zookeeper做分布式锁此外还可以使用synchronized1. 在需要同步的方法的方法签名中加入synchronized关键字。(锁的是对应的类原创 2021-03-31 08:02:34 · 26778 阅读 · 0 评论 -
面试题二-偏架构
一、Spring 七种事务传播机制Propagation (事务的传播属性)注解用法如:@Transactional (propagation = Propagation.REQUIRED )propagation 属性确定代理应该给哪个方法增加事务行为,这样的属性最重要的部份是传播行为,有以下选项可供使用:PROPAGATION_REQUIRED —— 支持当前事务,如果当前没有事务,则新建一个事务,这是最常见的选择,也是 Spring 默认的一个事务传播属性。PROPAGATION_SU原创 2021-03-31 08:00:19 · 26740 阅读 · 0 评论 -
面试题一
一、int和Integer的区别Integer是int的包装类;int是基本数据类型;Integer变量必须实例化后才能使用;int变量不需要;Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;Integer的默认值是null;int的默认值是0。二、接口和抽象类的区别 1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法; 2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public s原创 2021-03-31 07:59:25 · 27199 阅读 · 0 评论 -
Java线程池
一、Java线程池的具体实现,用过哪些Java多线程并发控制框架?在 JDK 1.5 之后推出了相关的 api,常见的创建线程池方式有以下几种:Executors.newCachedThreadPool():无限线程池。Executors.newFixedThreadPool(nThreads):创建固定大小的线程池。Executors.newSingleThreadExecutor():创建单个线程的线程池。public static ExecutorService newCachedThre原创 2021-03-31 07:57:55 · 27582 阅读 · 0 评论 -
web系统架构优化
一、后台的优化使用缓存 建立多级别的缓存策略,可以考虑先单机缓存,然后再考虑分布式缓存。分布式缓存可以考虑使用 memcached 或者 redis,redis 提供了更多的存储类型,并支持数据写入磁盘的功能。网站考虑使用消息队列 消息队列可以对系统进行解耦,并可提高系统的处理能力,减少数据库的压力。如果是微软路线可以考虑用MSMQ。业务处理层不要使用单例模式 因为单例模式的话,会阻碍多线程和多核系统的处理,降低系统的吞吐量和处理能力。Stringbuilder...原创 2021-03-31 07:55:38 · 28184 阅读 · 2 评论 -
接口性能优化
1.数据量比较大,批量操作数据入库2.耗时操作、高并发操作考虑异步处理,考虑使用文件/MQ等其他方式暂存数据,异步再落地DB3.恰当使用缓存4.优化程序逻辑、代码5.优化你的SQL6.压缩传输内容7.常用的统计数据采用mongodb8.高并发搜索改用elasticsearch,而不用mysql的模糊查询...原创 2021-03-31 07:53:32 · 28361 阅读 · 0 评论 -
Spring事务的传播机制
传播机制类型下面的类型都是针对于被调用方法来说的,理解起来要想象成两个 service 方法的调用才可以。PROPAGATION_REQUIRED (默认)支持当前事务,如果当前没有事务,则新建事务如果当前存在事务,则加入当前事务,合并成一个事务REQUIRES_NEW新建事务,如果当前存在事务,则把当前事务挂起这个方法会独立提交事务,不受调用者的事务影响,父级异常,它也是正常提交NESTED如果当前存在事务,它将会成为父级事务的一个子事务,方法结束后并没有提交,只有等父事务结束才提交原创 2021-03-31 07:52:35 · 28777 阅读 · 0 评论 -
聚簇索引和非聚簇索引的区别
聚簇索引是指索引和数据都保存在同一个文件(ibd)中,而非聚簇索引则是数据(MYD)和索引(MYI)分开InnoDB强制使用主键作为聚簇索引,B+Tree的叶子节点存储了行的所有数据,而二级索引的叶子节点存储的是主键的值而在Myisam中,主键索引和二级索引都是存储的数据行对应的地址...原创 2021-03-31 07:51:59 · 29156 阅读 · 0 评论 -
事务的隔离级别
事务的隔离级别包括: read uncommitted 读未提交 read committed 读已提交 repeatable read 可重复度 serializable 序列化隔离级别越低,系统开销越低,并发越高,隔离性越差跟隔离级别相关的读问题 脏读 读到的内容是别的事务还未提交的 不可重复读 事务前后两次读到的内容不一致 幻读 读取的内容是另一个事务刚增加或者删除的...原创 2021-03-31 07:51:06 · 29570 阅读 · 0 评论 -
事务的ACID特性
事务的ACID特性是指: 原子性(atomic):事务具有原子性,事务要么全部执行,要么全部失败 一致性(consistency):数据库总是从一个一致性状态转换到另一个一致性状态,不会出现预期以外的结果。 隔离性(isolation):一个事务所做的修改在最终提交以前,对其他事务是不可见的。 持久性(durability):一旦事务提交,所做的修改就会永久的保存到数据库。原子性的实现原理是通过undo log进行事务的回滚undo log属于逻辑日志,当发生回滚时,I...原创 2021-03-31 07:50:35 · 31367 阅读 · 0 评论 -
Mysql数据库优化方案
1、数据库设计:使用合适的数据类型,使用合适的存储引擎2、适当创建索引3、数据库扩展:数据库的分表分库,读写分离等4、SQL语句优化等原创 2021-03-30 23:20:21 · 30455 阅读 · 0 评论 -
Myisam和InnoDB的区别
Myisam和InnoDB的区别1、InnoDB支持事务2、InnoDB默认是行级锁,同时也支持表锁3、InnoDB支持外键4、InnoDB表必须要有主键5、InnoDB是聚簇索引,Myisam是非聚簇索引6、InnoDB的存储文件有frm、ibd,而Myisam是frm、MYD、MYI InnoDB:ibd数据文件 Myisam:MYD数据文件,MYI索引文件tips:InnoDB和Myisam的索引都是使用B+Tree索引结构...原创 2021-03-30 23:19:37 · 30627 阅读 · 0 评论 -
RabbitMQ的应用场景
1.异步处理消息队列的主要特点是异步处理,主要目的是减少请求响应时间,实现非核心流程异步化,提高系统响应性能。所以典型的使用场景就是将比较耗时而且不需要即时(同步)返回结果的操作,作为消息放入消息队列。2.应用解耦使用了消息队列后,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦。解耦是消息队列要解决的最本质问题。所谓解耦,简单点讲就是一个事务,只关心核心的流程。而需要依赖其他系统但不那么重要的事情,有通知即可,无需等待结果。换句话说,基于消息的模型,原创 2021-03-30 23:18:27 · 31925 阅读 · 0 评论 -
RabbitMQ工作方式
RabbitMQ工作方式:工作队列模式发布订阅模式路由模式通配符模式header转发模式RPC远程过程调用模式原创 2021-03-30 23:17:34 · 31364 阅读 · 0 评论 -
Redis缓存雪崩、穿透、击穿
一、缓存雪崩的情况是说,当某一时刻发生大规模的缓存失效的情况,比如你的缓存服务宕机了,会有大量的请求进来直接打到DB上面。结果就是DB 称不住,挂掉。二、这种查询不存在数据的现象我们称为缓存穿透。缓存和数据库都查询不到这条数据,但是请求每次都会打到数据库上面去三、大量的请求同时查询一个 key 时,此时这个key正好失效了,就会导致大量的请求都打到数据库上面去。这种现象我们称为缓存击穿。四、缓存雪崩如何解决? 1、事前 使用集群缓存,保证缓存服务的高可用性。 2、...原创 2021-03-30 23:17:00 · 31528 阅读 · 0 评论 -
Redis字符串string常用操作
Redis字符串string常用操作set name wangjget namemset age 30 sala 11111mget age salagetset name wanke //存取新值取出旧值//数字相关incr agedecr ageincrby age 2decrby age 2incrbyfloat num 2.3incrbyfloat num -2//字符串相关getrange name 0 -1setrange name 3 ke wangj -&g原创 2021-03-30 23:16:28 · 31918 阅读 · 0 评论 -
Redis列表相关操作
Redis链表相关操作lpush rpush lpop rpop出入链表listllen characterlrange character 0 -1lrem character -1 fltrim character 0 3 截取自身0-3的元素赋给自己rpoplpush source bak左出右进brpop blpop key timeout 等待删除原创 2021-03-30 23:15:54 · 32217 阅读 · 0 评论 -
Redis哈希hash相关操作
Redis哈希hash相关操作hset 10001 name wangjhmset 10001 age 30 sala 111111hget 10001 namehmget 10001 name age salahgetall 10001hkeys 10001hvals 10001hdel 10001 salahlen 10001 获取字段个数hexists 10001 sala 是否存在某个字段hincrby 10001 age 2hincrbyfloat 10001 sala原创 2021-03-30 23:15:16 · 32435 阅读 · 0 评论 -
Redis集合相关操作
Redis集合相关操作sadd gender male female nomalesmembers genderscard gendersmove gender unkown nomalespop gendersrem gender malesismember gender malesinter sunion sdiff 交并差原创 2021-03-30 23:14:35 · 32593 阅读 · 0 评论 -
Redis有序集合相关操作
Redis有序集合相关操作ZADD key score memberZREM key member ZINCRBY key increment member ZSCORE key member //获取member的scoreZCARD key // 成员总数ZCOUNT key min max // score 值介于 max 和 min 之间的成员个数ZRANGE key start stop // 从小到大下标区间start至top的成员ZREVRANGE key start st原创 2021-03-30 23:13:59 · 32929 阅读 · 0 评论