6. 交换排序—快速排序(Quick Sort)基本思想:1)选择一个基准元素,通常选择第一个元素或者最后一个元素,2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。3)此时基准元素在其排好序后的正确位置4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。快速排序的示例:(a)一趟排序的过程:(b)排序的全过程算法的实现:递归实现:void print(int a[], int n){
不同环境下的问题排查开发环境可以随意使用任何熟悉的工具排查。只要问题能重现,排查就不会太难,最多就是把程序调试到各种框架源码,所以这也是为何面试都会问源码,不求都看过,但要有思路知道如何去看能解决问题。测试环境相比开发环境少了调试,不过也可使用jvisualvm或Arthas,附加到远程的JVM进程排查问题。注意测试环境允许造数据来模拟出我们需要的场景,因此遇到问题,可联系测试人员去造一些数据让bug复现。生产环境排查难度最大:生产环境权限管控严格,一般不允许调试工具从远程附加进程生产环
第一章 对象的概念计算机革命起源机器。编程语言就像是那台机器。它不仅是我们思维放大的工具与另一种表达媒介,更像是我们思想的一部分。语言的灵感来自其他形式的表达,如写作,绘画,雕塑,动画和电影制作。编程语言就是创建应用程序的思想结构。面向对象编程(Object-Oriented Programming OOP)是一种编程思维方式和编码架构。抽象所有编程语言都提供抽象机制。从某种程度上来说,问题的复杂度直接取决于抽象的类型和质量。这里的“类型”意思是:抽象的内容是什么?汇编语言是对底层机器的轻微抽象。接
什么是连接池?结构连接池对外提供接口:获得连接归还连接并暴露客户端可配置的参数:最小空闲连接数最大连接数在内部则实现功能:连接建立连接心跳保持连接管理空闲连接回收连接可用性检测连接池结构示意图业务中经常也会用到各种连接池:数据库连接池Redis连接池HTTP连接池客户端SDK是否基于连接池在使用三方客户端进行网络通信时,首要确定客户端SDK是否是基于连接池技术实现的。若客户端SDK没有使用连接池,而直接是TCP连接,就需要考
使用 class 声明创建一个基于原型继承的具有给定名称的新类。class Animal { // 和 java 一样,未指定时有默认的空构造器 constructor(name, age) { this.name = name; this.age = age; }}const a1 = new Animal('狗蛋儿', 3);console.log(a1);console.log(a1.name);console.log(a1.age
Java NIO的Channel类似流,是用于传输数据的数据流,但有不同:既可从通道中读取数据,又可写数据到通道。但流的读写通常单向通道可异步读写通道中的数据总要先读到一个Buffer或从一个Buffer中写入从Channel读数据到缓冲区,从缓冲区写数据到Channel。Channel的实现Java NIO中最重要的Channel的实现:FileChannel从文件中读写数据DatagramChannel通过UDP读写网络中的数据SocketChannel通过TCP读写网络
连接池的结构连接池对外提供接口:获得连接归还连接并暴露客户端可配置的参数:最小空闲连接数最大连接数在内部则实现功能:连接建立连接心跳保持连接管理空闲连接回收连接可用性检测连接池结构示意图业务中经常也会用到各种连接池:数据库连接池Redis连接池HTTP连接池客户端SDK是否基于连接池在使用三方客户端进行网络通信时,首要确定客户端SDK是否是基于连接池技术实现的。若客户端SDK没有使用连接池,而直接是TCP连接,就需要考虑每次建
点击上方“JavaEdge”,关注公众号设为“星标”,好文章不错过!1 逃逸分析JVM中高深的优化技术,如同类继承关系分析,该技术并非直接去优化代码,而是一种为其他优化措施提供依据的分...
理论上利用管程,几乎可以实现并发包里所有的工具类。在并发编程领域,有两大核心问题:互斥同一时刻只允许一个线程访问共享资源同步线程之间如何通信、协作。这两问题,管程都能解决。并发包通过Lock和Condition两个接口来实现管程Lock解决互斥问题Condition用于解决同步问题Java语言本身提供的synchronized也是管程的一种实现,既然Java从语言层面已经实现了管程了,那为什么还要在SDK里提供另外一种实现呢?难道Java标准委员会还“重复造轮子”?显然它们之间是有
0 线程状态概述分类6个状态定义: java.lang.Thread.StateNew: 尚未启动的线程的线程状态。Runnable: 可运行线程的线程状态,等待CPU调度。Blocked: 线程阻塞等待监视器锁定的线程状态。处于synchronized同步代码块或方法中被阻塞。Waiting: 等待线程的线程状态。下 列不带超时的方式:Object.wait、Thread.join、 LockSupport.parkTimed Waiting:具有指定等待时间的等待线程的线程状态。下
使用this.put(“String”, “String”)方法添加一个键值对。但是,它会覆盖现有值,而我想使用同一个键存储和配对多个值。使用可以存储多个对象的ArrayList,当为HashMap分配一个值(例如,称为myHashMap)时,首先检查该键之前是否已使用过,如果尚未使用过,则可以创建一个具有要添加值的新ArrayList(如果有的话),则只需将值添加到列表中即可。假设key和value具有所需的值:ArrayList<String> list;if(myHashMap.c
文章目录流支持流创建随机数流int 类型的范围generate()iterate()流的建造者模式Arrays正则表达式中间操作跟踪和调试流元素排序移除元素应用函数到元素在 `map()` 中组合流Optional类便利函数创建 OptionalOptional 对象操作Optional 流终端操作数组循环集合组合匹配查找信息数字流信息本章小结集合优化了对象的存储,而流和对象的处理有关。流是一系列与特定存储机制无关的元素——实际上,流并没有“存储”之说。利用流,无需迭代集合中的元素,就可以提取和操
Condition实现了管程模型里面的条件变量。Java 语言内置的管程里只有一个条件变量,而Lock&Condition实现的管程是支持多个条件变量的,这是二者的一个重要区别。在很多并发场景下,支持多个条件变量能够让我们的并发程序可读性更好,实现起来也更容易。例如,实现一个阻塞队列,就需要两个条件变量。那如何利用两个条件变量快速实现阻塞队列呢?一个阻塞队列,需要两个条件变量,一个是队列不空(空队列不允许出队),另一个是队列不满(队列已满不允许入队),这个例子我们前面在介绍管程的时候详细说过
JAVA媒体提供任务机制来安全的终止线程。但是它提供了中断(interruption),这是一种写作机制,能够使一个线程终止另外一个线程。一般来说没人希望立即终止,因为必要时总要先清理再终止。开发一个应用能够妥善处理失败、关闭、取消等过程非常 重要也有挑战。任务取消一定不要使用Thread.stop和suspend这些机制。一种协作机制就是“标记位”。例如使用volatile类型的field来保存取消状态。@ThreadSafepublic class PrimeGenerator imple
网络数据的基本单位永远是 byte(字节)。Java NIO 提供 ByteBuffer 作为字节的容器,但该类过于复杂,有点难用。ByteBuf是Netty当中的最重要的工具类,它与JDK的ByteBuffer原理基本上相同,也分为堆内与堆外俩种类型,但是ByteBuf做了极大的优化,具有更简单的API,更多的工具方法和优秀的内存池设计。1 APINetty 的数据处理 API 通过两个组件暴露——abstract class ByteBuf 和 interfaceByteBufHolder。下
文章收录在我的 GitHub 仓库,欢迎Star/fork:Java-Interview-Tutorialhttps://github./Wasabi1234/Java-Interview-Tutorial1 毕业之际概况其实在
一般有两种方式可以给一个类或对象增加行为:继承通过继承一个现有类,可以使得子类在拥有自身方法同时还拥有父类方法。但这种方法是静态的,用户无法控制增加行为的方式和时机。关联将一个类的对象嵌入另一个对象中,由另一个对象决定是否调用嵌入对象的行为以便扩展自己的行为,这个嵌入的对象就叫做装饰器(Decorator)产生原因装饰模式以对用户透明的方式动态地给一个对象附加上更多功能。用户不会觉得对象在装饰前和装饰后有何不同。装饰模式可以在不需要创造更多子类情况下,扩展对象功能。定义对象结构型模式。
1 动机类似于电源适配器的设计和编码技巧。一般客户端通过目标类的接口访问它所提供的服务。有时,现有类可以满足客户类需要,但所提供接口不一定是客户类所期望的,可能因为现有类中方法名与目标类中定义的方法名不一致这时,现有接口需要转化为客户类期望的接口,保证复用现有类如果不进行这样的转化,客户类就不能利用现有类所提供的功能,适配器模式可以完成这样的转化。在适配器模式中可以定义一个包装类,包装不兼容接口的对象包装类指的就是适配器(Adapter)所包装的对象就是适配者(Adaptee),即被适配的类
,为什么要使用重载?而不是把一个方法名字换成不同的。
Java5之前只能用synchronized和volatile,5后Doug Lea加入了ReentrantLock,并不是替代内置锁,而是当内置锁机制不适用时,作为一种可选择的高级功能不适用包括无法中断一个正在等待获取锁的线程无限的锁等待内置锁必须放在代码块里面(编程有些局限性)所以提供了J.U.C的Lock1. Lock和ReentrantLock之所以叫ReentrantLock,可理解为两部分Re-entrant可重入,lock多少次都没关系,只需要unlock即可,或
1 简介定义定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新类型行为型2 适用场景关联行为场景,建立一套触发机制3 优点观察者和被观察者之间建立一个抽象的耦合观察者模式支持广播通信4 缺点观察者之间有过多的细节依赖、提高时间消耗及程序复杂度使用要得当,要避免循环调用5 实例接下来,来到观察者- Teacher的代码区中6 源码应用JDK应用Gu
还在摸鱼发文的我,自己之前写的SQL也都测过还是挺快的。突然领导在紧急群里艾特我!看了下监控图,发现总有一些时刻看起来随机持续时间又短,难以复现。WAL 机制:InnoDB在处理更新语句时,只做写日志这个磁盘操作(redo log),在更新内存写完redo log后,就返回给客户端,本次更新成功。
新的更安全更快的的认证方式管理5.7中无管理新增三个管理相关配置项password_histroy=3 (不能和最近三次使用过的相同)password_reuse_inter
本章节“三部曲”,程序猿的必备技:1、前奏:【业务分析】欲善其事,必三思而行;2、高潮:【逻辑设计】范式化VS反范式化;3、结束:【物理设
关系键是关系数据库的重要组成部分。关系键是一个表中的一个或几个属性,用来标识该表的每一行或与另一个表产生联系。 其中就包括外键0 主键(primary key或unique key)又称主码,数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。 从技术的角度来看,primary key和unique key有很多
自增主键可以让主键索引尽量保持递增顺序插入,避免了页分裂,因此索引更紧凑。有的业务设计依赖于自增主键的连续性,即该设计假设自增主键是连续的。但这样的假设是错的,自增主键是无法保证连续递增的!何时自增主键会出现 “空洞”?测试表如何存储的自增值执行show create tableSHOW CREATE TABLE tbl_name:显示创建指定命名表的 CREATE TABLE 语句。要使用此语句,必须对该表具有一定的权限。此语句也适用于视图。更改表的存储引擎时,不适用于新存
显示TIMESTAMP列的显示格式与DATETIME列相同。 换句话说,显示宽度固定在19字符,并且格式为YYYY-MM-DD HH:MM:SS。范围datetime 以’YYYY-MM-DD HH:MM:SS’格式检索和显示DATETIME值。支持的范围为’1000-01-01 00:00:00’到’9999-12-31 23:59:59’TIMESTAMP值不能早于1970或晚于2037
0 系统环境1 查询当前 MySQL 是否支持 binlog如下OFF代表不支持2 修改 my.cnf 文件以支持 binlog2.1 查看my.cnf路径mysql --help --verbose | grep my.cnf2.2 在/etc 新建文件my.cnf并添加如下内容注意添加 mysqld 组重启 MySQL再次查看是否支持binlog3 常见...
1 面试题有没有做过MySQL读写分离如何实现MySQL的读写分离主从复制原理如何解决MySQL主从同步的延时问题准备好面对这炮轰式面试了吗?2 考点分析高并发阶段,肯定需要做读写分离.实际上大部分互联网公司/网站/APP,都是读多写少针对现状,写一个主库,挂着多个从库,然后从多个从库来读,那不就可以支撑更高的读并发压力了吗?3 MySQL读写分离的实现基于主从复制架构...
1 功能2 用户国际国内3 特点◆ 结合Java、Scala两种语言◆ 从基础到实战◆ 系统学习Flink的核心知识◆ 快速完成从入门到上手企业开发的能力提升4 安排◆ 初识Flink◆ 编程模型及核心概念◆ DataSet API编程◆ DataStream API编程◆ Flink Table&SQL◆ Window和Time操作◆ Flink...
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号