摘要:总结 1.画图,画图,画图。直观观察规律 2.排序,排序,排序。按照起点/终点排序,或者混合排序。 int[][] points = new int[][]{{1,2},{1,4},{10,18},{7,11},{3,6}}; // 按照起点升序排列;起点相同时,终点按照降序排列 Arrays.so
阅读全文
摘要:贪心 vs 动态规划 联系 都是一种推导算法 都是分解成子问题来求解,都需要具有最优子结构 区别 如果把所有的子问题看成一棵树的话: 贪心:贪心从根出发,每次向下寻找(原文:遍历)最优子树即可。通常这个“最优”都是基于当前情况下显而易见的“最优”,仅需看本节点的情况,不需要知道该节点的所有子树情况,
阅读全文
摘要:总结 模板 int left = 0, right = 0; while (right < s.size()) { // 增大窗口 window.add(s[right]); right++; while (window needs shrink) { // 缩小窗口 window.remove(s
阅读全文
摘要:1. 总结 binary_search:普通的二分搜索,就是搜索target本身的值 left_bound:搜索比target小的数字的个数。有序数组nums = [2,3,5,7],target = 1,算法会返回 0,含义是:nums中小于 1 的元素有 0 个;nums = [2,3,5,7]
阅读全文
摘要:总结 1.当JVM通过GC Roots可达性分析,判断某对象可以被回收后,会判断是否重写了finalize方法,如果没有,直接回收 2.如果重写了,把该对象放入F-Queue队列,有线程(一个级别很低的daemon线程)专门遍历并执行这些的finalize方法 3.执行finalize()后,等下一
阅读全文
摘要:总结 -Xms256m:初始化堆大小为 256m; -Xmx2g:堆最大内存为 2g; -Xmn50m:新生代的大小50m; -XX:+PrintGCDetails 打印 gc 详细信息 -XX:+HeapDumpOnOutOfMemoryError 在发生OutOfMemoryError错误时,来
阅读全文
摘要:总结 -XX:+UseConcMarkSweepGC ,表示新生代使用ParNew,老年代的用CMS CMS 是英文 Concurrent Mark-Sweep 的简称,是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动 JVM 的
阅读全文
摘要:总结 并行:垃圾收集的多线程的同时进行。并发:垃圾收集的多线程和应用的多线程同时进行。 吞吐量 = CPU在用户应用程序运行的时间 / (CPU在用户应用程序运行的时间 + CPU垃圾回收的时间) 垃圾回收器算法比较: 串行回收算法:会停止当前应用进程,回收垃圾,停顿时间久,吞吐量大,响应时间长 并
阅读全文
摘要:功能方面:对象存储在堆上;基本数据类型的变量(int、short、long、byte、float、double、boolean、char等)以及对象的引用变量存储在栈上。 共享性:堆是线程共享的,栈是线程私有的。 空间大小:堆大小远远大于栈。 补充:栈帧的知识 https://www.cnblogs
阅读全文
摘要:类加载器(ClassLoader) 运行时数据区(Runtime Data Area) 执行引擎(Execution Engine) 本地库接口(Native Interface) 作用: 首先通过类加载器(ClassLoader)会把 .class字节码文件加载到内存中——运行时数据区(Runti
阅读全文
摘要:1. JMM是干嘛的? 作用: 是一个“缓存一致性协议”,用于定义数据读写的规则 : JMM定义了线程工作内存和主内存之间的抽象关系: 线程之间的共享变量存储在主内存(Main Memory)中, 每个线程都有一一个私有的本地内存(Local Memory) 而在多线程环境下,可能会存在主内存和线程
阅读全文
摘要:1. Jprofiler有什么用? MAT是Eclispe里用来分析OOM故障的工具,和Jprofiler类似。 2. Jprofiler 安装 2.1 Jprodiler插件安装 2.2 Jprofiler客户端安装 百度搜索“Jprofiler安装包”即可 2.3 Jprofiler配置 3.
阅读全文
摘要:总结 JVM中的堆: jdk1.7之前:一般分为三大部分:新生代、老年代、永久代 jdk1.8起:一般分为两大部分:新生代、老年代(永久代已经移除,1.8后用元空间代替,并移出堆) GC算法:JVM - 垃圾回收算法 对象object在堆heap的分配过程 1.Java新对象的会在新生代的Eden区
阅读全文
摘要:总结 N代表内存的大小。 复制算法只访问一半的内存,所以它最快; 标记清除要遍历一整个内存N; 标记压缩除了遍历一遍内存N,还要走一遍移动的过程; 1. 标记-清除算法(Mark-Sweep) 算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。
阅读全文
摘要:一般有两种方法来判断: 引用计数器:为每个对象创建一个引用计数,有对象引用时计数器 +1,引用被释放时计数 -1,当计数器为 0 时就可以被回收。它有一个缺点不能解决循环引用的问题; 可达性分析:从 GC Roots 开始向下搜索,搜索所走过的路径称为引用链。当一个对象到 GC Roots 没有任何
阅读全文
摘要:栈上分配 虚拟机提供的一种优化技术,基本思想是,对于线程私有的对象,将它打散分配在栈上,而不分配在堆上。好处是对象跟着方法调用自行销毁,不需要进行垃圾回收,可以提高性能。栈上分配需要的技术基础,逃逸分析。逃逸分析的目的是判断对象的作用域是否会逃逸出方法体。注意,任何可以在多个线程之间共享的对象,一定
阅读全文
摘要:总结 静态分配,用于方法的重载 动态分配,用于方法的多态 请看蓝色的标记部分: 当通过h1, h2去调用共同的接口方法时,就是常见的多态应用。这时是动态分配,看“实际类型 Actual Type”。 当把h1, h2作为参数传给“重载的方法”时,这时是静态分配,要看“静态类型 Static Type
阅读全文
摘要:总结 1. 加载阶段 (Loading) 简单描述: 在Java程序运行之前JVM会把编译完成的.class二进制文件加载到内存,后续提供程序使用,这里用到的就是类加载器ClassLoader(JVM - 双亲委派机制 Parent-Delegation Model)。 详细描述: 虚拟机需要完成以
阅读全文
摘要:1. 双亲委派模型 不是继承关系,而是委托关系。 从Java虚拟机的角度来讲,只存在两种不同的类加载器: 一种是启动类加载器(Bootstrap ClassLoader),仅按照文件名识别,如rt.jar,名字不符合的类库即使放在lib目录中也不会被加载。这个类加载器使用C++语言实现,是虚拟机自身
阅读全文
摘要:1. 各版本之间的变化 黄色的模块是线程私有的;绿色的模块是线程共有的。 JVM的优化,都集中在线程共有的区域(99%都是堆) jdk 1.6 jdk 1.7 jdk 1.8 2. 运行时数据区 各部分的作用 程序计数器 program counter register Java栈 java sta
阅读全文
摘要:1. 什么是SpringCloud config分布式配置 1.1 springcloud config的本质(重要) 客户端config-client要通调用服务端config-server,获取git上的配置文件。这样,客户端config-client和服务端config-server的配置文件
阅读全文
摘要:总结 参考文献:https://juejin.cn/post/6844903705553174541?utm_source=tuicool&utm_medium=referral%3Futm_source%3Dtuicool&utm_medium=referral Zuul:如果前端、移动端要调用后
阅读全文
摘要:前言 通常情况下的Hystrix是通过注解@HystrixCommand的fallbackMethod属性实现回调的。 在Feign中,由于Feign是用借口实现的声明式Rest,所以Hystrix的通用方法在这里就不适用于Feign了。 一、服务降级 - 通过@HystrixCommand (fa
阅读全文
摘要:1. Ribbon是什么? 多个“微服务提供者”在eureka集群里注册服务,然后消费者要调用服务时,通过ribbon从eureka集群里查询到可用的服务列表(分别有8001,8002,8003) 然后根据ribbon的load balance算法,选择一个进行调用 2. Ribbon能干嘛? 3.
阅读全文
摘要:1. 什么是Eureka Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。 Eureka包含两个组件:Eureka Server和Eureka Client Eureka
阅读全文
摘要:<packaging>常见的取值: jar: 默认是jar类型。如果只是内部调用或者是作服务使用,则推荐打包成jar类型 war: 如果是需要部署的项目,则需要打包成war类型。 pom: 项目里没有java代码,也不执行任何代码,只是为了聚合工程或传递依赖用的.一般用于父级项目。
阅读全文
摘要:父模块 vs 子模块 多模块开发中,使用父模块对子模块的管理非常方便。 父模块pom中的<properties>属性会被子模块继承 父模块pom中,在<dependencyManagement>中可以进行子模块依赖的版本管理,子模块继承父模块之后,提供作用:锁定版本 + 子模块不用再写 versio
阅读全文
摘要:1. 什么是SpringCloud 2. SpringCloud与SpringBoot的关系 3. SpringCloud版本号的故事
阅读全文
摘要:1. 微服务架构 1.1 微服务架构的四大问题 本质: 1.2 要解决的四大技术点(重点) 上面的四大问题,翻译成技术点,就是以下4点: 1.3 解决方案 2. 微服务 2.0 单体应用架构 vs 微服务 https://www.cnblogs.com/frankcui/p/14088145.htm
阅读全文
摘要:1. 什么是分布式系统? 2. RPC 2.1 什么是RPC 2.2 RPC基本原理 3. Dubbo 3.1 什么是Dubbo? 3.2 Dubbo架构原理(重要) zookeeper是下图中,“Registry”那一部分用到的。 3.3 安装Dubbo和zookeeper https://www
阅读全文
摘要:1. 异步操作 主函数,添加@EnableAsync注解 具体方法上,加上@Async标签 2. 邮件操作 2.1 导入包 2.2 去QQ 邮箱开启POP3/SMTP服务 这里的授权码,待会会替代真正的密码,写在application.properties里面 2.3 在application.pr
阅读全文
摘要:总结 创建SpringBoot项目,导入Swagger依赖 Swagger2 Swagger-ui 创建Swagger配置类 添加@Configuration注解,标识配置类 添加@EnableSwagger2注解开启Swagger 配置Swagger的Docket的Bean实例 配置Swagger
阅读全文
摘要:1. SpringSecurity简介 拦截器,过滤器:大量的原声代码,很冗余 SpringSecurity:简化配置 2. SpringSecurity实战 2.1 需求明确 首页:谁都可以访问(下图就是首页) 其他levelX页面:必须有想用的role才能进入 2.2 代码实现 2.2.1 授权
阅读全文
摘要:背景 mybatis整个spring时,需要一个mybatis-spring包 mybatis整个springboot时,需要一个mybatis-spring-boot-starter包 整合步骤 1-创建项目,勾选组件 2-配置数据库 测试DB配置是否正确:可以直接@Autowire 一个Data
阅读全文
摘要:1. 导入静态资源 在WebMvcAutoConfiguration.java中找到 webjars方式 --> classpath:/META-INF/resources/webjars/目录 是由于导入jQuery, bootstrap等maven坐标后,才有的目录结构。这些组件原本就是静态资源
阅读全文
摘要:不同配置文件位置 按照优先级顺序排序,1的优先级最高 多环境配置 .properties方式 .yaml方式 顶层的spring:profiles:active: dev决定真正使用哪个profiles
阅读全文
摘要:1. SpringBoot的配置文件(推荐使用application.yaml) 名称是固定的,只能叫application.yaml/.properties 2. yaml语法 2.1 基本语法 2.2 占位符语法 2.3 松散绑定 yaml这边,可以设置为first-name 也能和代码中fir
阅读全文
摘要:1. 为何引入一些SpringBoot依赖的时候,不需要指定版本? 总结: spring-boot-dependencies:作为父工程,存放了SpringBoot的核心依赖。我们在写或者引入一些SpringBoot依赖的时候,不需要指定版本,正是因为SpringBoot的父依赖已经帮我们维护了一套
阅读全文
摘要:1.SpringBoot准备工作 2.SpringBoot目录结构 3.SpringBoot的maven结构 4.编写HTTP接口(只写一个controller即可) 5.打jar包 双击“package” 6.运行jar包 通过Windows powershell(cmd的升级版本,详见这里)的j
阅读全文
摘要:背景 SSM框架,打war包,tomcat运行 SpringBoot,打jar包(内嵌tomcat) 单体应用架构 vs 微服务 单体应用架构 微服务架构
阅读全文
摘要:过滤器 vs 拦截器 两个不同点:使用范围(红色1);拦截范围(蓝色2) 过滤器的配置(在tomcat web.xml配置) 拦截器的配置(在SpringContext.xml配置) 自定义过滤器
阅读全文
摘要:简介 类似百度的输入框,每输入一个字就会显示新的联想搜索词,但是整个页面并没有刷新。说明只有搜索框这一栏目进行了刷新。 视频教程 https://www.bilibili.com/video/BV1aE41167Tu?p=24
阅读全文
摘要:@RequestMapping vs @RequestBody @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。 @RequestBody:注解实现接收http请求的json数据,将json转换为ja
阅读全文
摘要:1-准备工作 环境要求 数据库环境 maven依赖设置 静态资源导出设置 连接数据库 MySQL - 使用IDEA连接数据库 建立项目目录 2-Mybatis整合(看视频) .https://www.bilibili.com/video/BV1aE41167Tu?p=17 3-Spring整合(看视
阅读全文
摘要:什么是JSON? JSON本质就是字符串。 {}表示一个对象 []表示一个集合,对象之间用逗号分开 JSON vs JavaScript Jackson - json解析工具 1-导入包 2-代码示例 JSON化一个对象: JSON化一个集合: 结果: 3-解决JSON乱码问题 QA:为什么JSON
阅读全文
摘要:1.页面乱码 页面相对是最为容易解决的,往往是在相应的jsp页面或者html页面设置相关的字符集即可。如 <%@page language= "java" contentType= "text/html; charset=utf-8" pageEncoding= "utf-8" %> 2.传值乱码
阅读全文
摘要:总结 必看链接:SpringMVC中Map、Model、ModelMap、ModelAndView之间的关系及区别 SpringMVC在调用方法前会创建一个隐含的数据模型(Model,ModelMap),作为模型数据的存储容器, 成为”隐含模型”。 如果controller方法的参数为Model或M
阅读全文
摘要:总结 转发vs重定向: JavaWeb - 转发forward vs 重定向redirect 转发,http状态码:307 重定向,http状态码:302 (301 表示被请求 url 永久转移到新的 url;302 表示被请求 url 临时转移到新的 url) “test”的情况,是大多数的情况,
阅读全文
摘要:转发,http状态码:307 重定向,http状态码:302
阅读全文
摘要:Restful 背景 Restful方式 vs 传统方式 传统方式:通过不同的URL(不同的参数/queryItem, /updateItem),来实现不同的效果 restful方式:通过相同的URL,但不同的请求方式GET, POST,PUT,DELETE,来实现不同的效果 传统方式 实现 cas
阅读全文
摘要:总结【记住】 用实际的例子来记忆:http://localhost:8080/SpringMVC/login 1.***重要*** SpringMVC执行流程 实线:SpringMVC帮忙做的 虚线:需要自己实现 Controller实现具体的逻辑 在ViewResolver里,设置/拼接视图返回的
阅读全文
摘要:总结 声明式事务:非侵入式,本质是AOP,推荐! 编程式事务:侵入式,需要在代码中调用 commit()、rollback()等事务管方法,还需要在代码中通过try catch,不推荐! ①编程式事务管理使用TransactionTemplate。 ②声明式事务管理建立在AOP之上的。其本质是通过A
阅读全文
摘要:方式一 1-导入mybatis-spring包 2-在application-context.xml中,配置DataSource,SqlSessionFactory,SqlSession 原本,DataSource,SqlSessionFactory,SqlSession都是在mybatis里配置
阅读全文