- 博客(41)
- 资源 (20)
- 收藏
- 关注
原创 equals和==和hashcode
1、 ‘==’号比较对象的时候,比较的是两个对象的地址2、Object类的equals()方法对比的是两个对象的地址public boolean equals(Object obj) { return (this == obj);}3、String类的equals方法之所以能比较两个值相同,是因为重写了equals方法public boolean equals(Object anObject) { if (this == anObject) {
2020-08-30 15:48:55 270
原创 5500. 乘积为正数的最长子数组长度
看起来很简单,做起来很捉急,唉,记录下来以后看 ????import java.util.LinkedList;import java.util.List;class Solution{ public int getMaxLen(int[] nums) { int pre = -1; List<Integer> ls = new LinkedList<>(); int res = 0; for(
2020-08-30 15:01:18 252
原创 417. 太平洋大西洋水流问题
开始的思路:遍历每个点,进行递归搜索,然后记录下能够到达太平洋和大西洋的点,从别的点再次遍历到能达到的点时,直接返回(因为遍历到的点能够到大西洋和太平洋,所以该点也能到,就不用递归了)然后,超时!!!其实有个小技巧,就是直接从四个边界的点开始搜索,凡是从上边界和左边界能搜索到的,都是能达到太平洋的,凡是从下边界和右边界能搜索到的,都是能到达大西洋的,然后两个记录的数组进行对比,直接就能得出来能到达大西洋和太平洋的点代码:class Solution{ List<Li..
2020-08-29 09:16:17 321
原创 Stream
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 Stream API 可以极大提高 Java 程序员的生产力,让程序员写出高效率、干净、简洁的代码。 这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。Stream 特性: 不是数据结构:它没有内部存储,它只是用操作管道从 source(数据结构、数组、generator function、IO channel
2020-08-28 17:31:58 537
原创 LocalDateTime
在 JDK1.8 之前,Java 处理日期、日历和时间的方式一直为社区所诟病 将 java.util.Date 设定为可变类型,以及 SimpleDateFormat 的非线程安全使其应用非常受限 因此推出了 java.time 包,该包下的所有类都是不可变类型而且线程安全关键类 Instant:瞬时时间。、 LocalDate:本地日期,不包含具体时间, 格式 yyyy-MM-dd。 LocalTime:本地时间,不包含日期. 格式 yyyy-MM-dd HH:mm:ss.
2020-08-28 16:56:47 1275
原创 Lambda 表达式
Lambda 表达式 (lambda expression) 是一个匿名函数,Lambda 表达式基于数学中的λ演算得名,直接对应于其中的 lambda 抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda 虽然简化了代码的编写,但同时也减少了可读性。遍历集合使用:map: Map<Integer, Integer> map = new HashMap<>(); map.put(1,1); m
2020-08-28 16:31:53 276
原创 九、Docker-私有仓库
⚫搭建私有仓库⚫上传镜像到私有仓库⚫从私有仓库拉取镜像一、私有仓库搭建# 1、拉取私有仓库镜像 docker pull registry# 2、启动私有仓库容器 docker run -id --name=registry -p 5000:5000 registry# 3、打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库 搭建成功# 4、修改daemon.json v...
2020-08-26 15:00:46 154
原创 八、Docker- 服务编排
⚫服务编排概念⚫Docker Compose 概述⚫案例服务编排Docker Compose一、安装Docker Compose# Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我们以编译好的二进制包方式安装在Linux系统中。curl-Lhttps://github.com/docker/compose/releases/download/1.22.0/docker-com...
2020-08-26 14:57:31 168
原创 七、Docker-Dockerfile
⚫Docker 镜像原理⚫Dockerfile概念及作用⚫Dockerfile关键字⚫案例一、Docker 镜像原理二、Dockerfile概念及作用三、Dockerfile 关键字关键字 作用 备注 FROM 指定父镜像 指定dockerfile基于那个image构建 MAINTAINER 作者信息 用来标明这个dockerfile谁写的 LABEL 标签 用来标明docke...
2020-08-26 11:33:27 198
原创 六、Docker-应用部署(mysql、nginx、redis)
MySQL部署1、搜索mysql镜像docker search mysql2、拉取mysql镜像docker pull mysql:5.63、创建容器,设置端口映射、目录映射# 在/root目录下创建mysql目录用于存储mysql数据信息mkdir ~/mysqlcd ~/mysqldocker run -id \-p 3307:3306 \--name=c_mysql \-v $PWD/conf:/etc/mysql/conf.d \-v $PWD/l
2020-08-26 11:18:37 173
原创 三、Docker-架构
•镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。•容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。•仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。...
2020-08-26 10:11:37 153 1
原创 二、Docker-概念
•Docker 是一个开源的应用容器引擎•诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc)•Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux 机器上。•容器是完全使用沙箱机制,相互隔离•容器性能开销极低。•Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: ...
2020-08-26 10:04:59 146
原创 一、Docker-环境迁移不兼容问题
我们写的代码会接触到好几个环境:开发环境、测试环境以及生产环境:因为不同环境的jdk版本不同,造成项目运行冲突!如果我们把jdk一并和项目放进一个所谓的容器中进行不同环境之间的传递,那就不会产生环境迁移造成的不兼容问题!...
2020-08-26 10:02:20 475
原创 吃掉 N 个橘子的最少天数(emmm)
这道题看起来很简单,我一眼就看出来可以用动态规划去做了,然后我就: for(int i=1; i<=n; i++){ if(i % 2 == 0 && i % 3 == 0){ dp[i] = Math.min(Math.min(dp[i-1]+1, dp[i/2]+1), Math.min(dp[i-1] + 1, dp[i-2*(i/3)]+1)); } ...
2020-08-16 16:14:31 263
原创 Spring事务实现
Spring事务一、没有添加事务的实现1、实体类:2、Dao:3、Service:4、XML文件配置:5、测试:6、结果:没有事务管理,所以异常上面的代码成功执行,下面的代码不执行,导致钱转出去了,没收到,总金额少了!二、编程式事务实现1、XML配置事务:在applicationContext.xml中添加事务管理器和事务管理器模版的配置2、注解方式配置事务:注解方式配置事务管理器和事务管理器模版3、修改UserSe
2020-08-08 16:22:56 354
原创 H2O 生成
H2O 生成下面这道题真的难到我了,看了解析后是用信号量机制去做了,看了半天看明白(平时没写过信号量????)下面的信号量机制保证了O和H在资源获取不到时,去获取资源,在资源释放不掉时,就去释放资源h.acquire(); // 获取一个H资源 o.release(); // 释放一个O资源 o.acquire(2); // 获取两个O资源(这里容易理解错,并不是获取两个O,这里是保证一次只能有一个进程执行O,看输出) h.release(2); // 释放两个H资源上面的所以四个,
2020-08-07 16:13:48 649 1
原创 打印零与奇偶数
打印零与奇偶数class ZeroEvenOdd { private int n; private volatile int i = 0; private volatile int sign = 1; public ZeroEvenOdd(int n) { this.n = n; } // printNumber.accept(x) outputs "x", where x is an integer. public v
2020-08-07 16:05:37 262
原创 交替打印FooBar
交替打印FooBarclass FooBar { private int n; private int i = 0; public FooBar(int n) { this.n = n; } public void foo(Runnable printFoo) throws InterruptedException { synchronized (this){ while(i < n *
2020-08-07 16:04:26 315
原创 按序打印
按序打印一开始这样写的,错了,大家知道为什么吗?class Foo { private int volatile n = 0; public Foo() { } public void first(Runnable printFirst) throws InterruptedException { synchronized (this){ if(n % 3 == 0){ // pri
2020-08-07 16:02:18 266 1
原创 哲学家进餐
哲学家进餐这道题其实考的是死锁,死锁产生的四个条件:1、互斥2、占有并等待3、不可抢占4、循环等待可以直接让一个人去吃,吃完释放,其他人再去吃也可以,就是速度会慢: synchronized (this){ pickLeftFork.run(); pickRightFork.run(); eat.run(); putLeftFork.run();
2020-08-07 15:42:32 217
原创 十、NIO之Select/Poll、Epoll区别
Linux系统将所有设备都当作文件来处理,而Linux用文件描述符fd来标识每个文件对象。select:(1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大(2)同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大(3)select支持的文件描述符数量太小了,默认是1024poll的原理与select非常相似,差别如下: 描述fd集合的方式不同,poll使用 pollfd 结构而不是select结构fd_se
2020-08-06 21:14:33 864
原创 九、Netty快速入门实例-TCP服务
实例要求:使用IDEA 创建Netty项目 Netty 服务器在 6668 端口监听,客户端能发送消息给服务器 "hello, 服务器~" 服务器可以回复消息给客户端 "hello, 客户端~" 创建maven工程,导入maven依赖: <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artif
2020-08-06 19:50:03 241
原创 八、Netty模型简介
工作原理示意图-简单版 Netty 主要基于主从 Reactors 多线程模型做了一定的改进,其中主从 Reactor 多线程模型有多个 Reactor:流程:BossGroup 线程维护Selector , 只关注Accecpt 当接收到Accept事件,获取到对应的SocketChannel, 封装成 NIOScoketChannel并注册到Worker线程(事件循环), 并进行维护 当Worker线程监听到selector 中通道发生自己感兴趣的事件后,就进行处理(handl.
2020-08-06 19:29:29 185
原创 七、Reactor模式小结
Reactor 模式小结:3 种模式用生活案例来理解:单 Reactor 单线程:前台接待员和服务员是同一个人,全程为顾客服 单 Reactor 多线程:1 个前台接待员,多个服务员,接待员只负责接待 主从 Reactor 多线程:多个前台接待员,多个服务生 Reactor 模式具有如下的优点: 响应快,不必为单个同步时间所阻塞,虽然 Reactor 本身依然是同步的 可以最大程度的避免复杂的多线程及同步问题,并且避免了多线程/进程的切换开销 扩展性好,可以方便的通过增加 Re
2020-08-06 16:55:11 160
原创 六、主从Reactor多线程模式介绍
主从Reactor多线程模式:(多Reactor)针对单 Reactor 多线程模型中,Reactor 在单线程中运行,高并发场景下容易成为性能瓶颈,可以让 Reactor 在多线程中运行。优点:父线程与子线程的数据交互简单职责明确,父线程只需要接收新连接,子线程完成后续的业务处理。 父线程与子线程的数据交互简单,Reactor 主线程只需要把新连接传给子线程,子线程无需返回数据。缺点:编程复杂度较高结合实例:这种模型在许多项目中广泛使用,包括 Nginx 主从 Reac.
2020-08-06 16:51:30 895
原创 五、单Reactor多线程模式介绍
单Reactor多线程模式:Reactor 对象通过select 监控客户端请求事件, 收到事件后,通过dispatch进行分发 如果建立连接请求, 则右Acceptor 通过 accept 处理连接请求, 然后创建一个Handler对象处理完成连接后的各种事件 如果不是连接请求,则由reactor分发调用连接对应的handler 来处理 handler 只负责响应事件,不做具体的业务处理, 通过read 读取数据后,会分发给后面的worker线程池的某个线程处理业务 worker
2020-08-06 16:40:36 459
原创 四、单Reactor单线程模式介绍
单 Reactor 单线程模式:优点:模型简单,没有多线程、进程通信、竞争的问题,全部都在一个线程中完成缺点:(一个CPU工作,其他空闲、Handler处理业务耗时时,线程忙,其他事件无法处理、线程中断,系统崩)性能问题,只有一个线程,无法完全发挥多核 CPU 的性能 Handler 在处理某个连接上的业务时,整个进程无法处理其他连接事件,很容易导致性能瓶颈 可靠性问题,线程意外终止,或者进入死循环,会导致整个系统通信模块不可用,不能接收和处理外部消息,造成节点故障使用场景:客户
2020-08-06 16:12:56 380
原创 三、Reactor模式(线程池 + IO多路复用)简介
Reactor 模式(反应器模式、分发者模式(Dispatcher) 、通知者模式(notifier) )假设你是一个老师,让30个学生解答一道题目,然后检查学生做的是否正确,你站在讲台上等,谁解答完谁举手。这时C、D举手,表示他们解答问题完毕,你下去依次检查C、D的答案,然后继续回到讲台上等。此时E、A又举手,然后去处理E和A......1、针对传统阻塞 I/O 服务模型的 2 个缺点的改进:(IO多路复用 + 线程池)1、每个连接创建一个线程:(线程池)基于线程池复用线程资源2、每个连
2020-08-06 16:10:13 2654
原创 二、IO线程模型+传统阻塞IO模型介绍
一、线程模型基本介绍不同的线程模型,对程序的性能有很大影响。目前存在的线程模型有:传统阻塞 I/O 服务模型 Reactor 模型根据 Reactor 的数量和处理资源池线程的数量不同,有 3 种典型的实现 :单 Reactor 单线程 单 Reactor 多线程 主从 Reactor 多线程 Netty 线程模式(Netty 主要基于主从 Reactor 多线程模型做了一定的改进,其中主从 Reactor 多线程模型有多个 Reactor) 二、传统阻塞 I/O 服..
2020-08-06 16:06:39 395
原创 一、Netty简介
1、什么是netty?Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github上的独立项目。 Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。 Netty主要针对在TCP协议下,面向Clients端的高并发应用,或者Peer-to-Peer场景下的大量数据持续传输的应用。 Netty本质是一个NIO框架,适用于服务器通讯相关的多种应用场景 Netty 可以帮助你快速、简单的开发出一个网络应用,相当于简化和流程化了 N.
2020-08-06 15:21:25 1499
原创 注册bean到容器的三种方法
spring在启动时会自己把bean(java组件)注册到ioc容器里,实现控制反转,在开发人员使用spring开发应用程序时,你是看不到new关键字的,所有对象都应该从容器里获得,它们的生命周期在放入容器时已经确定!三种注册bean的方法:@ComponentScan @Bean @Import一、@ComponentScan注册指定包里的bean(找到指定路径下,指定注解的类,注册到IOC容器中)Spring容器会扫描@ComponentScan配置的包路径,找到标记@Compo.
2020-08-04 16:58:45 903
原创 Spring容器:BeanFactory和ApplicationContext
spring容器:spring容器负责了对象的整个生命周期--创建、装配、销毁。 而这里对象的创建管理的控制权都交给了Spring容器,所以这是一种控制权的反转,称为IOC容器。BeanFactory和ApplicationContext之间的关系(都是IOC容器!!!)BeanFactory和ApplicationContext是Spring的两大核心接口,而其中ApplicationContext是BeanFactory的子接口。 它们都可以当做Spring的容器,Spring容器是.
2020-08-04 16:49:38 205
原创 @EnableAutoConfiguration注解
借助@Import的支持,收集和注册特定场景相关的bean定义。@EnableAutoConfiguration也是借助@Import的帮助,将所有符合自动配置条件的bean定义注册到IoC容器,仅此而已!@EnableAutoConfiguration会根据类路径中的jar依赖为项目进行自动配置,如:添加了spring-boot-starter-web依赖,会自动添加Tomcat和Spring MVC的依赖,Spring Boot会对Tomcat和Spring MVC进行自动配置。@Enabl
2020-08-04 16:20:20 3101
原创 @ComponentScan注解
一、@ComponentScan注解作用:(扫描指定注解的类注册到IOC容器中)@ComponentScan用于类或接口上主要是指定扫描路径,spring会把指定路径下带有指定注解的类注册到IOC容器中。 会被自动装配的注解包括@Controller、@Service、@Component、@Repository等等。 其作用等同于<context:component-scan base-package="com.maple.learn" />配置。二、@ComponentSca.
2020-08-04 15:53:31 11338 1
原创 @Configuration注解
被该注解标识的类,表明该类是一个JavaConfig形式的Spring Ioc容器的配置类一、基于JavaConfig的配置方式:@Configurationpublic class MockConfiguration{ //bean定义}任何一个标注了@Configuration的Java类定义都是一个JavaConfig配置类。二、注册bean定义层面:@Configurationpublic class MockConfiguration{ @Bean
2020-08-04 15:26:21 1368
原创 GC垃圾收集器
新生代: Serial 垃圾收集器:单线程、复制算法、STW ParNew 垃圾收集器:多线程、复制算法、默认开启和CPU相同数量线程、STW Parallel Scavenge 收集器:多线程、复制算法、吞吐量(CPU 用于运行用户代码的时间/CPU 总消耗时间)、自适应调节策略、STW 老年代: Serial Old 收集器:单线程、标记整理算法 Parallel Old 收集器:多线程、标记整理算法、吞吐量优先 CMS 收集器:
2020-08-04 08:37:24 151
转载 线程池
在Java编码的过程中,我们经常会创建一个线程来提高程序的执行效率,虽然这样实现起来很方便,但是会有一个问题:如果并发的线程数多,并且每个线程都是执行一个时间很短的任务就结束了,这样会造成频繁的创建和销毁线程从而导致降低系统的效率。那么问题来了,有没有办法可用复用创建好的线程呢,也就是线程执行完一个任务后,不被销毁,继续执行其他的任务?在Java可以通过线程池来实现这样的效果。下面从三个方面和大家一起来探讨一下Java线程池相关的内容。Java中的ThreadPoolExecutor类 J
2020-08-03 10:59:08 433
Linux网站搭建流程
2017-12-22
数学建模教材(精品)
2017-09-27
Linux操作系统实验教程_南大版
2017-09-23
2016年考研核心考点——计算机组成原理
2017-09-23
2016年考研核心考点-----计算机网络
2017-09-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人