java
文章平均质量分 76
21秋招拒做分母
这个作者很懒,什么都没留下…
展开
-
设计原则总结
简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。子类必须实现父类的抽象方法,但不得重写(覆盖)父类的非抽象(已实现)方法。原创 2022-11-16 15:46:33 · 220 阅读 · 1 评论 -
常见问题整理(2): Mysql+Redis
Database 事务的特性 1、原子性(Atomic):指的是事物所有的操作要么全做、要么全不做。 2、一致性(Consistency):事物应该确认数据库从一个一致状态转变为另一个一致状态。(数据库中的数据应满足完整性约束) 修改丢失:丢失修改是事务A和B先后更改数据数据x(假设初始是x0),但是在A未正式更改前,B已经读取了原先的数据x0,最后A更改后为x1,B更改的并不是A更新后的x1,而是更改的x0,更改后假设为x2,这时x2将x1覆盖了,相当于事务A针对x的更改丢失了。 脏读: 读到原创 2021-01-22 23:37:56 · 425 阅读 · 0 评论 -
JVM复盘
编译流程 内部组成 栈: 三部分:类装载子系统+内存模型+字节码执行引擎 内存模型: 虚拟机栈(线程栈):局部变量就是放在栈帧里 操作数栈:和字节码+程序计数器有关。程序在运行过程中放数字的(例如a=1的1),临时存放数字的空间。 程序计数器:程序计数器是用于存放执行指令的地方。 为了保证程序(在操作系统中理解为进程)能够连续地执行下去,CPU必须具有某些手段来确定下一条指令的地址。而程序计数器正是起到这种作用,所以通常又称为指令计数器。 它的值是字节码执行引擎来修改的。 动态链接:把符号引用转变为原创 2021-03-29 18:41:58 · 76 阅读 · 0 评论 -
常见问题整理(4): 框架+项目
框架 你说说数据绑定是什么?只记得v-model。 jdbc用过吗,说说原理 jdbc和mybatis区别 Mybatis的执行流程? 1.书写主配置文件mybatis-config.xml,配置环境****,连接Mysql数据库的,指定事务管理,Java的JDBC,控制事务的提交与回滚,dataSource是连接源配置,POOLED是JDBC连接对象的数据源连接池的实现,其中还要映射mapper文件 2.获取Sqlsession对象,将该对象提取到MybatisUtil工具类中,...原创 2021-01-23 21:59:42 · 225 阅读 · 0 评论 -
JVM性能调优和GC的心得
一些问题 调优主要在堆中: JVM中如何判断垃圾:可达性分析算法(用来判断对象是否存活) 根:GCRoots 切断以后就可以被回收了。而可达意味着不是垃圾,不可达意味着是垃圾。 python中用的是计数器法,如果有对象引用它,就计数,计数为0,则为垃圾。但是相互引用就有问题了。 为什么要根可达算法? Long l = 1200L; 涉及到装箱拆箱操作,本质上等于Long l = Long.valueof(1200);会new Long();ß ß 由于成员变量的引用不是.原创 2021-03-08 21:28:26 · 147 阅读 · 0 评论 -
常见问题整理(3):计网+操作系统
Network TCP/IP分为几层 重定向转发区别 重定向resp,请求转发req 请求转发:request.getRequestDispatcher("/test.jsp").forword(request,response); 重定向:response.sendRedirect("/test.jsp"); 1、请求次数:重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址;重定向至少请求两次,转发请求一次;原创 2021-01-08 19:47:49 · 2216 阅读 · 0 评论 -
常见问题整理(1): 数据结构+JUC+JVM
算法数据结构 排序算法快排(分区) 1. 在数组中选一个基准数(通常为数组第一个); 2. 将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边; 3. 对于基准数左、右两边的数组,不断重复以上两个过程,直到每个子集只有一个元素,即为全部有序。 hash的loadfactor和容量/hashmap原理 扩容 线程安全 https://www.cnblogs.com/wengshuhang/articles/9866856.html HashMap 内部结构:可以看作是数组和链表结.原创 2021-01-08 19:43:17 · 616 阅读 · 0 评论 -
JUC(3):线程池+函数式接口+流式计算+ForkJoin+异步回调
11. 线程池(重点) 线程池:三大方法、7大参数、4种拒绝策略 池化技术 程序的运行,本质:占用系统的资源! 优化资源的使用!=>池化技术 线程池、连接池、内存池、对象池///..... 创建、销毁。十分浪费资源 池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我 线程池的好处: 降低资源的消耗 提高响应速度 方便管理 线程复用、可以控制最大并发数、管理线程 (1) 线程池:三大方法 //创建一个固定大小的线程池 public static ExecutorS.原创 2020-12-31 23:31:40 · 312 阅读 · 0 评论 -
JUC(4):JMM+Volatile+单例模式+CAS+AtomicReference+锁和死锁
16. JMM 请你谈谈你对 Volatile 的理解: Volatile是java虚拟机提供轻量级的同步机制 1、保证可见性 2、不保证原子性 3、禁止指令重排序 什么是JMM JMM : Java内存模型,不存在的东西,概念!约定! 关于JMM的一些同步的约定: 1、线程解锁前,必须把共享变量立刻刷新回主存 2、线程加锁前,必须读取主存中的最新值到工作内存中 3、加锁和解锁是同一把锁! 线程工作内存 、主内存 内存交互操作有8种,虚拟机实现必须保证每一个操作都是原子...原创 2020-12-31 23:30:56 · 280 阅读 · 0 评论 -
JUC(2):Callable+CountDownLatch+读写锁+阻塞队列
7.Callable 可以有返回值 可以抛出异常 方法不同,run() / call() public class CallableTest { public static void main(String[] args) throws ExecutionException, InterruptedException { // new Thread(new Runnable()).start(); // new Thre...原创 2020-12-31 10:22:23 · 238 阅读 · 0 评论 -
JUC(1): 线程+生产者消费者+不安全集合
1. JUC基础 并发(多线程操作同一个资源):CPU 一核 ,模拟出来多条线程,天下武功,唯快不破,快速交替 并行(多个人一起行走):CPU 多核 ,多个线程可以同时执行; 线程池 并发编程的本质:充分利用CPU的资源 线程:Java默认线程:2个main, GC 对于Java而言:Thread、Runnable、Callable Java 真的可以开启线程吗? 开不了 1.1 线程的六个状态 public enum State { // 新生 NEW, // 运行 RUNNABLE,原创 2020-12-30 20:16:19 · 132 阅读 · 0 评论 -
Java: 注解+反射
1.注解 内置注解: 元注解: 自定义注解: 2.反射 反射Java变得动态。 动态语言和静态语言: 1)机制: 2)例子: Class.forname 3)Class类: 3.类加载内存分析 4.类初始化 5.类加载器 双亲委派机制:如果要定义一个java.lang.String,会先去Application Classloader,再去Extension,再去Bootstap根加载器。如果根里有,...原创 2020-12-22 20:09:49 · 56 阅读 · 0 评论