连接数

JAVA面试锦囊(二)

孤者浪人 提交于 2020-02-12 04:05:16
● MVC的各个部分都由哪些常见技术来实现? (1) M(Model):javaBean (2) V(View):html、jsp、volicity、freemaker (3) C(Control):Servlet、Action、 最经典的MVC模式:Jsp+Servlet+javaBean,实际上就是model2的实现方式,就是把视图和逻辑隔离开,而Model1的实现方式jsp+service+dao。 ● 简谈关系型数据库的三范式? 范式就是规范,就是关系型数据库在设计表要遵循的三个规范。要满足第二范式必须先满足第一范式,要满足第三范式必须满足第二范式。另外反三范式是指有的时候为了效率,可以设置重复的字段(如订单表总价与订单项单价)。 第一范式:是指数据库表的每一列都是不可分割的基本数据项,同一个列中不能有多个值。 第二范式:是指数据库表的每一行必须可以被唯一区分,(通常利用到的是主键列)。 第三范式:是要求一个数据表中不包含已在其他表中已包含的非关键字信息(通常利用外键,多个表的数据重复,用外键引入)。 ● 事务的四大特征? 事务是并发控制的单位,是用户定义的一个操作序列,这些操作要么都做,要么都不做,是一个不可分割的单位。事务的四大特征是: 原子性:表示事务内操作不可分割,要么都成功,要么都失败。 一致性:要么都成功,要么都失败。后面失败了要对前面的操作进行回滚。 隔离性

高并发系统中的限流算法

拈花ヽ惹草 提交于 2020-02-11 15:52:49
在高并发系统时有三把利器用来保护系统: 缓存、降级和限流 ,本文将介绍一些限流的相关概念、算法和常规的实现方式。 缓存 缓存比较好理解,在大型高并发系统中,如果没有缓存数据库将分分钟被爆,系统也会瞬间瘫痪,使用缓存不单单能够提升系统访问速度,提高并发访问量,也是保护数据库、保护系统的有效方式,大型网站一般主要是“读”,缓存的使用很容易被想到。 在大型“写”系统中,缓存也常常扮演非常重要的角色,比如累积一些数据批量写入,内存里面的缓存队列(生产消费),以及HBase写数据的机制等等也都是通过缓存提升系统的吞吐量或者实现系统的保护措施,甚至消息中间件,你也可以认为是一种分布式的数据缓存。 降级 服务降级是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放部分服务器资源以保证核心任务的正常运行。降级往往会指定不同的级别,面临不同的异常等级执行不同的处理。根据服务方式,可以拒绝服务,可以延迟服务,有时候也可以随机服务。 根据服务范围,可以砍掉某个功能,也可以砍掉某些模块。总之服务降级需要根据不同的业务需求采用不同的降级策略,主要目的就是服务虽然有损但是总比没有好。 限流 常见的限流算法有:计数器、漏桶和令牌桶算法。 1.计数器 计数器是最简单粗暴的算法,比如某个服务最多只能每秒钟处理100个请求,我们可以设置一个1秒钟的滑动窗口,窗口中有10个格子

线程池的原理和连接池的原理

岁酱吖の 提交于 2020-02-11 05:19:22
线程池的原理: 来看一下线程池究竟是怎么一回事?其实线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的流程如下:先启动若干数量的线程,并让这些线程都处于睡 眠状态,当客户端有一个新请求时,就会唤醒线程池中的某一个睡眠线程,让它来处理客户端的这个请求,当处理完这个请求后,线程又处于睡眠状态。可能你也许 会问:为什么要搞得这么麻烦,如果每当客户端有新的请求时,我就创建一个新的线程不就完了?这也许是个不错的方法,因为它能使得你编写代码相对容易一些, 但你却忽略了一个重要的问题??性能!就拿我所在的单位来说,我的单位是一个省级数据大集中的银行网络中心,高峰期每秒的客户端请 求并发数超 过100,如果为每个客户端请求创建一个新线程的话,那耗费的CPU时间和内存将是惊人的,如果采用一个拥有200个线程的线程池,那将会节约大量的的系统资源,使得更多的CPU时间和内存用来处理实际的商业应用,而不是频繁的线程创建与销毁。 数据库连接池: 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。 一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性能低下。 数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并讲这些连接组成一个连接池( 简单说:在一个“ 池”里放了好多半成品的数据库联接对象)

线程池的原理和连接池的原理

拟墨画扇 提交于 2020-02-11 04:45:39
来自: 线程池的原理和连接池的原理 线程池的原理 : 来看一下线程池究竟是怎么一回事?其实线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的流程如下:先启动若干数量的线程,并让这些线程都处于睡眠状态,当客户端有一个新请求时,就会唤醒线程池中的某一个睡眠线程,让它来处理客户端的这个请求,当处理完这个请求后,线程又处于睡眠状态。可能你也许会问:为什么要搞得这么麻烦,如果每当客户端有新的请求时,我就创建一个新的线程不就完了?这也许是个不错的方法,因为它能使得你编写代码相对容易一些,但你却忽略了一个重要的问题??性能!就拿我所在的单位来说,我的单位是一个省级数据大集中的银行网络中心,高峰期每秒的客户端请 求并发数超 过100,如果为每个客户端请求创建一个新线程的话,那耗费的CPU时间和内存将是惊人的,如果采用一个拥有200个线程的线程池,那将会节约大量的的系统资源,使得更多的CPU时间和内存用来处理实际的商业应用,而不是频繁的线程创建与销毁。 数据库连接池: 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。 一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性能低下。 数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并讲这些连接组成一个连接池( 简单说:在一个“ 池

浏览器同域名请求的最大并发数限制

空扰寡人 提交于 2020-02-11 04:38:14
当我们在浏览网页的时候,对浏览速度有一个重要的影响因素,就是浏览器的并发数量。并发数量简单通俗的讲就是,当浏览器网页的时候同时工作的进行数量。 如果同时只有2个并发连接数数量,那网页打开的时候只能依赖于这2条线程,前面如果有打开慢的内容,就会直接影响到后面的内容打开。但是如果同时有更多的并发连接数,这样就会大大的提高网页加载速度。详情可查看我们之前发布的文章: 并发连接数对浏览器加载速度的测试 。浏览器的并发连接数也并非越大越好。 下表概括了基于主机上运行的IE浏览器的版本的最大并发连接数、主机的连接速度和服务器的受支持的协议版本。 1,HTTP客户端一般对同一个服务器的并发连接个数都是有限制的。 实际上,浏览器确实使用并行连接,但它们将并行连接的总数限制为少量(通常为四个)。 服务器可以自由地关闭来自特定客户端的过多连接。 2,一些主流浏览器对HTTP 1.1和HTTP 1.0的最大并发连接数目,可以参考如下表格: 浏览器 HTTP / 1.1 HTTP / 1.0 IE 11 6 6 IE 10 6 6 IE 9 10 10 IE 8 6 6 IE 6,7 2 4 火狐 6 6 Safari 3,4 4 4 Chrome 4+ 6 6 歌剧9.63,10.00alpha 4 4 Opera 10.51+ 8 ? iPhone 2 4 ? iPhone 3 6 ? iPhone

oracle数据库连接池的使用

独自空忆成欢 提交于 2020-02-11 02:55:57
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。 数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素: 1) 最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费; 2) 最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。 3) 如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利

线程池的原理和连接池的原理

亡梦爱人 提交于 2020-02-11 01:19:37
一、 线程池的原理 : 线程池,究竟是怎么一回事?其实线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的流程如下: 先启动若干数量的线程,并让这些线程都处于睡眠状态,当客户端有一个新请求时,就会唤醒线程池中的某一个睡眠线程,让它来处理客户端的这个请求,当处理完这个请求后,线程又处于睡眠状态。 可能你也许会问:为什么要搞得这么麻烦,如果每当客户端有新的请求时,我就创建一个新的线程不就完了?这也许是个不错的方法,因为它能使得你编写代码相对容易一些,但你却忽略了一个重要的问题——性能! 就拿我所在的单位来说,我的单位是一个省级数据大集中的银行网络中心,高峰期每秒的客户端请 求并发数超 过100,如果为每个客户端请求创建一个新线程的话,那耗费的CPU时间和内存将是惊人的,如果采用一个拥有200个线程的线程池,那将会节约大量的的系统资源,使得更多的CPU时间和内存用来处理实际的商业应用,而不是频繁的线程创建与销毁。 二、 数据库连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。 一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性能低下。 数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并讲这些连接组成一个连接池(简单说:在一个“池”里放了好多半成品的数据库联接对象)

mysql 线程池 数据库连接池

不羁岁月 提交于 2020-02-10 17:53:49
当客户端请求的数据量比较大的时候,使用线程池可以节约大量的系统资源,使得更多的CPU时间和内存可以高效地利用起来。而数据库连接池的使用则将大大提高程序运行效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。本文我们主要就介绍一下线程池和数据库连接池的原理,接下来我们一起来了解一下这一部分内容。 线程池的原理: 其实线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的流程如下:先启动若干数量的线程,并让这些线程都处于睡眠状态,当客户端有一个新请求时,就会唤醒线程池中的某一个睡眠线程,让它来处理客户端的这个请求,当处理完这个请求后,线程又处于睡眠状态。可能你也许会问:为什么要搞得这么麻烦,如果每当客户端有新的请求时,我就创建一个新的线程不就完了?这也许是个不错的方法,因为它能使得你编写代码相对容易一些,但你却忽略了一个重要的问题?那就是性能!就拿我所在的单位来说,我的单位是一个省级数据大集中的银行网络中心,高峰期每秒的客户端请求并发数超过100,如果为每个客户端请求创建一个新线程的话,那耗费的CPU时间和内存将是惊人的,如果采用一个拥有200个线程的线程池,那将会节约大量的系统资源,使得更多的CPU时间和内存用来处理实际的商业应用,而不是频繁的线程创建与销毁。 数据库连接池的原理: 数据库连接是一种关键的有限的昂贵的资源

天啦噜!生产机器连接数飙升到上万,背后发生了什么?

十年热恋 提交于 2020-02-10 14:22:23
个人博客地址 studyidea.cn ,点击查看更多原创文章 0x00. 翻车现场 那是个月黑风高的夜晚,小黑哥成功将新版本发布到了生产,小心翼翼检查了应用日志,后续测试小姐姐验收成功。 恩,小黑哥我还是一如既往的稳~ 接着小黑哥就跑到楼下食堂吃个夜宵,谁知正吃到一半,线上运维同学发来几条告警信息,服务器连接数过多警告,连接数已经飙升到上万。 天啦撸,赶紧放下正在啃的鸡腿,火速跑到工位上查看问题。 0x01. 历尽艰辛,深入排查 打开电脑,首先确认生产交易一切还正常。查看这段时间日志,发现并没有什么异常情况,日志都是正常输出。没办法只好再次走查此次改动的代码,发现全是业务代码,并没有任何与网络连接有关的代码改动。 问题真的请奇怪,一时半会想不到解决方案,只好先实施重启大法。重启过后,连接数下降了,到达了正常阈值。但是不一会连接数持续升高,不一会还是升到上万。 这下重启解决不了办法,只好从应用出发,找找到底什么问题。 这个应用是一个路由服务,会根据上游系统指定路由编码,将交易分发到下游子系统。架构图如下: 之前在这篇文章 路由系统演化史 讲过,路由系统使用 Dubbo API ,代码如下: 由于我们还有另外一套系统,也部署这个应用,但是该系统生产机器连接数却很少。交叉比对了两套系统应用的系统配置值,只有 connections 设置不一样,当前有问题的系统设置为 1000

nginx安全

懵懂的女人 提交于 2020-02-09 07:38:43
隐藏版本号 http { server_tokens off; } 开启HTTPS server { listen 443; server_name ops-coffee.cn; ssl on; ssl_certificate /etc/nginx/server.crt; ssl_certificate_key /etc/nginx/server.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; } ssl on: 开启https ssl_certificate: 配置nginx ssl证书的路径 ssl_certificate_key: 配置nginx ssl证书key的路径 ssl_protocols: 指定客户端建立连接时使用的ssl协议版本,如果不需要兼容TSLv1,直接去掉即可 ssl_ciphers: 指定客户端连接时所使用的加密算法,你可以再这里配置更高安全的算法 添加黑白名单 白名单配置 location /admin/ { allow 192.168.1.0/24; deny all; } 上边表示只允许192.168.1.0/24网段的主机访问,拒绝其他所有 也可以写成黑名单的方式禁止某些地址访问,允许其他所有,例如 location /ops-coffee/ {