DBCP

Java面试题全集(8)

∥☆過路亽.° 提交于 2021-01-17 08:35:46
Java面试题全集(8) 白玉 IT哈哈 71、如何用Java代码列出一个目录下所有的文件? 答: 如果只要求列出当前文件夹下的文件,代码如下所示: import java.io.File; class Test12 { public static void main(String[] args) { File f = new File("/Users/Hao/Downloads"); for(File temp : f.listFiles()) { if(temp.isFile()) { System.out.println(temp.getName()); } } } } 如果需要对文件夹继续展开,代码如下所示: import java.io.File; class Test12 { public static void main(String[] args) { showDirectory(new File("/Users/Hao/Downloads")); } public static void showDirectory(File f) { _walkDirectory(f, 0); } private static void _walkDirectory(File f, int level) { if(f.isDirectory()) { for(File temp

springboot

ⅰ亾dé卋堺 提交于 2021-01-12 20:36:56
1)使用场景 对于Mysql主从复制实现读写分离来说,可以解决读的扩展性问题。但是写的话,面对庞大的数据量还是集中在Master上,并且Master挂载的slave不可能无限制多,因为slave依赖于Master的能力和负载的限制。因此需要对Master进行扩展来实现海量数据的需要。 2)分表 对于访问极为频繁,数据量又极大的表来说,最直接做的就是减少数据量的总条数,以便减少数据查询所需要的时间,可以对大数据表进行分表。 分表策略:用id来进行分表是最为常见的策略,因为大部分查询都要带上id,又不影响查询又能使得数据均衡的分布在各个表中。假设有一个订单表有1000w条数据,将该表分成16个表,将id%16进行存储,如果id不是数字可以先hash取值。拆分的记录根据取余的值进行存储,App应用根据取余的值进行表的访问。 3)分库 分表能解决数据量过大造成的查询效率低下的问题,但是无法有效提示数据的并发访问能力。将数据库拆分,提高数据库的写入能力就是所谓的分库。 与分表类似,分库策略可以通过对某一个字段如id进行取余操作,来对数据访问进行路由。如id=19,分成3个库,19%3=1,这时候就路由到第一个库。 4)sharding-jdbc 实现分库分表 sharding-jdbc 最先是当当网开源代码,后来被Apache集成。 sharding-jdbc能帮我们实现什么: 1

druid&HikariCP学习记录

家住魔仙堡 提交于 2020-12-22 17:26:00
一:druid 1.Druid是一个JDBC组件,它包括三部分: DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系,类似Serlvet的Filter,配置Filter拦截JDBC的方法调用,可以很方便编写JDBC层的扩展插件。可以在上面做任何事情,比如说性能监控、SQL审计、用户名密码加密、日志等等。 DruidDataSource 高效可管理的数据库连接池。 替换 DBCP 和 C3P0 等其他数据库连接池 SQLParser mycat使用 2.作者简介-温少 2001年毕业于深圳大学,毕业后到金蝶软件研发中心工作9年,工作内容包括工作流引擎、多数据库支持引擎、短信网网关等。2010年3月加入阿里巴巴至今,主要的工作是设计和实现阿里巴巴应用监控系统Dragoon,Druid和Fastjson都是监控系统实现的副产品。 3. 为什么选择druid 阿里巴巴是一个重度使用关系数据库的公司,我们在生产环境中大量的使用Druid,通过长期在极高负载的生产环境中实际使用、修改和完善,让Druid逐步发展成最好的数据库连接池。Druid在 监控、可扩展性、稳定性和性能 方面都有明显的优势。 稳定性。 In Taobao large-scale high concurrency environment, only two connection

JDBC编程:连接池技术DBCP、C3P0、Druid

强颜欢笑 提交于 2020-12-04 17:48:15
连接池 : 连接池是一种创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程所使用。数据库连接是一种关键的、昂贵的、有限的资源,使用数据库连接池能提高数据库连接的性能。 当一个线程需要JDBC对数据库进行操作时,它从池中请求一个连接,当线程使用完这个连接,将连接返回连接池中,以准备被其它线程使用。当连接从池中“借出”,它被请求它的线程专有地使用。从编程的角度来看,这和用户的线程每当需要一个 JDBC 连接的时候调用DriverManager.getConnection() 是一样的,采用连接池技术,可通过使用新的或已有的连接结束线程。 DBCP连接池: DBCP 是 Apache 软件基金组织下的开源连接池实现,要使用DBCP数据源,需要应用程序应在系统中增加如下两个 jar 文件: Commons-dbcp.jar:连接池的实现 Commons-pool.jar:连接池实现的依赖库 Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。 实现步骤: 步骤一:在类目录下添加dbcp的配置文件:dbcp.ini 连接设置: driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true

数据库线程池2——线程池调优

让人想犯罪 __ 提交于 2020-11-14 04:01:58
一、数据库Connection Pool 连接池是什么 每当程序需要读写数据库的时候。Connection.Open()会使用ConnectionString连接到数据库,数据库会为程序建立 一个连接,并且保持打开状态,此后程序就可以使用T-SQL语句来查询/更新数据库。当执行到Connection.Close()后,数据库就会关闭当 前的连接。 但是如果我的程序需要不定时的打开和关闭连接,(比如说 ASP.Net 或是 Web Service ),例如当Http Request发送到服务器的时候、,我们需要打开Connection 然后使用Select* from Table 返回一个DataTable/DataSet给客户端/浏览器,然后关闭当前的Connection。那每次都Open/Close Connection 如此的频繁操作对于整个系统无疑就成了一种浪费。 ADO.Net Team就给出了一个比较好地解决方法。将先前的Connection保存起来,当下一次需要打开连接的时候就将先前的Connection 交给下一个连接。这就是Connection Pool。 二、数据库Connection Pool连接池的注意事项    最小连接数:   是数据库一直保持的数据库连接数,所以如果应用程序对数据库连接的使用量不大,将有大量的数据库资源被浪费。    初始化连接数:  

java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection

旧街凉风 提交于 2020-11-09 20:28:56
Caused by: java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection   at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) ~[oracle-jdbc-driver-1.0.0.jar:Oracle JDBC Driver version - "10.2.0.1.0"]   at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) ~[oracle-jdbc-driver-1.0.0.jar:Oracle JDBC Driver version - "10.2.0.1.0"]   at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255) ~[oracle-jdbc-driver-1.0.0.jar:Oracle JDBC Driver version - "10.2.0.1.0"]   at oracle.jdbc.driver.T4CConnection

JDBC-文档

一世执手 提交于 2020-11-03 03:29:50
第 1章概述 在 Java中,数据库存取技术可分为如下几类: l JDBC直接访问数据库 l JDO技术(Java Data Object) l 第三方 O/R工具,如Hibernate, Mybatis 等 JDBC是java访问数据库的基石,JDO, Hibernate等只是更好的封装了JDBC。 1 、什么是 JDBC JDBC(是一个 独立于特定数据库管理系统( DBMS)、通用的SQL数据库存取和操作的公共接口 (一组 API),定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源 JDBC为访问不同的数据库提供了一种 统一的途径 ,为开发者屏蔽了一些细节问题。 JDBC的目标是使Java程序员使用JDBC可以连接任何 提供了 JDBC驱动程序 的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。 如果没有 JDBC,那么Java程序访问数据库时是这样的: 改装: 实际上: 结论: JDBC是SUN公司提供一套用于数据库操作的接口API,Java程序员只需要面向这套接口编程即可。 不同的数据库厂商,需要针对这套接口,提供不同实现。不同的实现的集合,即为不同数据库的驱动。 2、 JDBC API JDBC API是一系列的接口,它统一和规范了应用程序与数据库的连接、执行SQL语句

面试官:我就问了一个JVM性能调优,没想到他能吹半个小时

僤鯓⒐⒋嵵緔 提交于 2020-10-24 00:40:02
一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) 永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm不属于堆内存,由虚拟机直接分配,但可以通过-XX:PermSize -XX:MaxPermSize 等参数调整其大小。 年轻代(New):年轻代用来存放JVM刚分配的Java对象 年老代(Tenured):年轻代中经过垃圾回收没有回收掉的对象将被Copy到年老代 永久代(Perm):永久代存放Class、Method元信息,其大小跟项目的规模、类、方法的量有关,一般设置为128M就足够,设置原则是预留30%的空间。 New又分为几个部分: Eden:Eden用来存放JVM刚分配的对象 Survivor1 Survivro2:两个Survivor空间一样大,当Eden中的对象经过垃圾回收没有被回收掉时,会在两个Survivor之间来回Copy,当满足某个条件,比如Copy次数,就会被Copy到Tenured。显然,Survivor只是增加了对象在年轻代中的逗留时间,增加了被垃圾回收的可能性。 2.垃圾回收算法 垃圾回收算法可以分为三类,都基于标记-清除(复制)算法: Serial算法(单线程) 并行算法 并发算法

100道Java基础面试题

我们两清 提交于 2020-08-17 08:57:24
1.什么是B/S架构?什么是C/S架构 B/S(Browser/Server),浏览器/服务器程序 C/S(Client/Server),客户端/服务端,桌面应用程序 2.你所知道网络协议有那些? HTTP:超文本传输协议 FTP:文件传输协议 SMPT:简单邮件协议 TELNET:远程终端协议 POP3:邮件读取协议 3.Java都有那些开发平台? JAVA SE:主要用在客户端开发 JAVA EE:主要用在web应用程序开发 JAVA ME:主要用在嵌入式应用程序开发 4.什么是JVM?java虚拟机包括什么? JVM:java虚拟机,运用硬件或软件手段实现的虚拟的计算机,Java虚拟机包括:寄存器,堆栈,处理器 5.Java是否需要开发人员回收内存垃圾吗? 大多情况下是不需要的。Java提供了一个系统级的线程来跟踪内存分配,不再使用的内存区将会自动回收 6.什么是JDK?什么是JRE? JDK:java development kit:java开发工具包,是开发人员所需要安装的环境 JRE:java runtime environment:java运行环境,java程序运行所需要安装的环境 7.什么是数据结构? 计算机保存,组织数据的方式 8.Java的数据结构有那些? 线性表(ArrayList) 链表(LinkedList) 栈(Stack) 队列(Queue) 图(

设计模式在 Spring 中的应用解析(建议收藏系列)

橙三吉。 提交于 2020-08-11 13:34:21
设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记只是一直没有记忆 。 今天,就设计模式的内在价值做一番探讨,并以spring为例进行讲解,只有领略了其设计的思想理念,才能在工作学习 中运用到“无形”。 Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行内典范 。 spring中常用的设计模式达到九种,我们一一举例 : 第一种:简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。 spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象 ,但是否是在传入 参数后创建还是传入参数前创建这个要根据具体情况来定。 如下配置,就是在 HelloItxxz 类中创建一个 itxxzBean 。 第二种:工厂方法(Factory Method) 通常由应用程序直接使用new创建新的对象,为了将对象的创建和使用相分离,采用工厂模式, 即应用程序将对象的创建及初始化职责交给工厂对象。 一般情况下,应用程序有自己的工厂对象来创建bean. 如果将应用程序自己的工厂对象交给Spring管理,那么Spring管理的就不是普通的bean,而是工厂Bean。