自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zjgyjd的博客

程序小白的日常

  • 博客(59)
  • 收藏
  • 关注

原创 sql语句的优化

一、为什么要对SQL进行优化我们开发项目上线初期,由于业务数据量相对较少,一些SQL的执行效率对程序运行效率的影响不太明显,而开发和运维人员也无法判断SQL对程序的运行效率有多大,故很少针对SQL进行专门的优化,而随着时间的积累,业务数据量的增多,SQL的执行效率对程序的运行效率的影响逐渐增大,此时对SQL的优化就很有必要。二、SQL优化的一些方法1.对查询进行优化,应尽量避免全表扫描,首先...

2019-10-24 21:56:54 186

转载 Linux常用命令

Linux常用命令全集 http://www.jb51.net/linux/系统信息arch 显示机器的处理器架构(1)uname -m 显示机器的处理器架构(2)uname -r 显示正在使用的内核版本dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)hdparm -i /dev/hda 罗列一个磁盘的架构特性hdparm -tT /dev/sda 在磁盘...

2019-10-24 21:52:22 215 1

原创 TCP的三次握手和四次挥手

TCP的三次握手TCP中所有的问题,都要先建立连接,需要先看连接维护的问题,TCP的连接建立,常被称为三次握手;A:您好B,我是A.B:您好A,我是B.A:您好B采用 请求->应答->应答之应答的方式,保证二者的消息传送都是有来有回的;三次握手除了双方建立连接外,主要还是为了沟通一件事情,就是TCP包的序号的问题。 每个连接都要有不同的序号。这个序号的起始序号是随着时间变化...

2019-09-10 22:43:35 179

原创 数据库连接池

数据库连接池  数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态的对池中的连接进行申请、使用、释放;  (1)程序初始化时创建连接池 (2)使用时向连接池申请可用连接 (3)使用完毕,将连接返还给连接池  (4)程序退出时,断开所有的连接,并释放资源创建数据库连接池DBCP : Apache组织下面的一个开源...

2019-09-09 23:39:16 222

原创 Mysql数据库多表联合查询

表连接的方式内连接外连接自连接我们接下来将对这三种连接进行详细的介绍。先准备两张表Student表字段解释ID学号name姓名collegeID校园IDcollege表字段解释collegeId学院ID(主键)collegeName学院名内连接内连接就是表间的主键与外键相连,只取得键值一致的,可以...

2019-09-06 23:44:47 1719

原创 数据库的范式

当我们想要设计出合理的关系型数据库时,需要遵从不同的规范要求,这些不同的规范要求就被称为范式。各种范式呈递次规范,越高的范式数据库冗余程度越小。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。但是在实际的使用中,我们只需要了解前三个范式,也就是我们常说的“数据库三范式”。第一范...

2019-09-05 23:05:41 239

原创 关于Java的单例模式

单例模式是最常用到的设计模式之一,熟悉设计模式的朋友对单例模式都不会陌生。一般介绍单例模式的书籍,文章都会提到 饿汉式 和 懒汉式 这两种实现方式。但是除了这两种方式,实际上还有很多中方式。模式简介单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存...

2019-09-04 23:51:17 113

原创 三种工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

工厂模式是用工厂方法代替new操作的一种模式。在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。3种:简单工厂模式、工厂方法模式、抽象工厂模式。适用场景(1)在编码时不能预见需要创建哪种类的实例。(2)系统不应依赖于产品类实例如何被创建、组合和表达的细节(3)Spring框架的IOC就是使用的工厂模式优点(1)一个调用者想创建一个对象,只要知道其...

2019-09-03 23:31:35 337

原创 Mysql索引相关

为什么要用索引?通过创建唯一性索引可以保证数据库中的每一条数据的唯一性。主要原因可以大大加快数据的读取速度。(主要原因)帮助服务器避免排序和零时表将随机IO变为顺序IO可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。索引那么多优点,为什么不对表中的每一个列创建索引呢?当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。索引...

2019-09-02 22:56:16 82

原创 Java中的线程池

线程池的优势当我们线程创建过多时,容易引发内存溢出,因此我们就有必要使用线程池的技术了。(1) 降低资源消耗 。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。(2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。(3)提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。创建线...

2019-08-31 17:39:06 92

原创 volatile和synchronized的区别和联系

1.volatile关键字是线程同步的轻量级实现,所以volatile性能肯定要比synchronized关键字要好。但是volatile关键字只能用于变量而synchronized关键字可以修饰方法以及代码块。2.synchronized关键字在JDK1.6之后进行了主要包括为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁以及其它各种优化之后执行效率有了显著提升,实际开发中使用 s...

2019-08-30 23:49:39 159

原创 Java四种引用类型

强引用在Java中最常见的就是强引用,==把一个对象赋给一个引用变量,这个引用变量就是一个强引用,当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,==即使该对象以后永远都不会被用到JVM也不会回收,因此强引用是造成Java内存泄漏的主要原因之一。软引用软引用需要用SoftReference类来实现,对于只有软引用的对象来说,当系统内存足够时它不会被回收,当系统内...

2019-08-29 22:58:09 199 1

原创 Java-动态规划学习(五)背包问题

有 n 个物品和一个大小为 m 的背包. 给定数组 A 表示每个物品的大小和数组 V 表示每个物品的价值,问最多能装入背包的总价值是多大?Example 1:Input: m = 10, A = [2, 3, 5, 7], V = [1, 5, 2, 4]Output: 9Explanation: Put A[1] and A[3] into backpack, getting the m...

2019-08-29 00:39:53 249

原创 归并排序

归并排序归并排序是建立在归并操作上的一种有效的排序算法,1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。基本思想归并排序算法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列算法描述归并排序可通过两种方式...

2019-08-27 23:45:41 104

原创 关于Java中的Atomic

为什么会出现Atomic类在多线程或者并发环境中,我们常常会遇到这种情况 int i=0; i++ 但这种写法是线程不安全的。为了达到线程安全的目的,我们通常会用synchronized来修饰对应的代码块。还有一种办法就是使用J.U.C包下的atomic类。Atomic类的原理是什么呢atomic类是通过自旋CAS操作volatile变量实现的。CAS(O,V,A)V:主内存存放的实际...

2019-08-26 15:18:45 1052

原创 死锁产生的条件,以及如何避免死锁,产生死锁时该怎样避免

产生死锁的四个条件 1.互斥: 资源x的任意一个时刻只能被一个线程持有 2.占有且等待:线程1占有资源x的同时等待资源y,并不释放x 3.不可抢占:资源x一旦被线程1占有,其他线程不能抢占x 4.循环等待:线程1持有x,等待y,线程2持有y,等待x 当全部满足时才会死锁死锁的预防1.破坏“互斥”条件:就是在系统里取消互...

2019-08-26 14:21:54 1281

原创 数据库事务的四大特性和隔离级别

最近经常会被问到这个问题,以便自己日后查漏补缺。一.事务的概念以及事务的四大特性事务(Transaction):简单的说就是对数据库进行的一个完整的操作,这个操作要么全部成功,要么全部失败,不能够被分割。 事务的四大特性(ACID):原子性(Atomicity): 不可分割,要么全部执行,要么全部失败回滚,失败回滚后,数据库的状态与改事务执行之前的数据库状态相同。一致性(Cons...

2019-08-22 22:45:37 86

原创 Java-动态规划(四)矩阵取数问题

一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走,求能够获得的最大价值。例如:3 * 3的方格。1 3 3 2 1 3 2 2 1能够获得的最大价值为:11。将问题进行转换 :Fi,j表示到每一步的最大价值,那么一个N*N的矩阵,最大价值就是求Fn,n分析的关键在于,我当前Fi,j是如何得到的,由规则知只能从当前数的上方,和...

2019-08-20 14:20:46 649

原创 Java-动态规划学习(三)编辑距离

不多说了,放题编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 例如将kitten一字转成sitting: sitten (k->s) sittin (e->i) sitting (->g) 所以kit...

2019-08-20 12:58:04 158

原创 Java-动态规划学习(二)数塔取数问题

了解了基本概念后,多做几个题来完善对动态规划的认识数塔取数问题一个高度为N的由正整数组成的三角形,从上走到下,求经过的数字和的最大值。 每次只能走到下一层相邻的数上,例如从第3层的6向下走,只能走到第4层的2或9上。该三角形第n层有n个数字,例如:第一层有一个数字: 5第二层有两个数字: 8 4第三层有三个数字: 3 6 9第四层有四个数字: 7 2 ...

2019-08-19 18:09:36 886

原创 Java-动态规划学习(一)

动态规划的定义动态规划的意义就是通过采用递推(或者分而治之)的策略,通过解决大问题的子问题从而解决整体的做法。动态规划的核心思想是巧妙的将问题拆分成多个子问题,通过计算子问题而得到整体问题的解。而子问题又可以拆分成更多的子问题,从而用类似递推迭代的方法解决要求的问题。动态规划的核心解题步骤第一步: 状态的定义第二步: 状态转移方程的定义状态指的是在求解问题时对问题的转换。状态的定义:...

2019-08-19 15:43:51 153

原创 关于Java中的类加载器

相信大家都遇到过java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这个异常背后涉及到的是Java技术体系中的类加载机制。其中Java有三种加载器:1)根类加载器:Bootstrap ClassLoader(我们使用的String等类)也称为引导类加载器,负责java核心类的加载。比如,System Object String等,在JDK中的JRE的lib目录...

2019-08-18 01:15:45 136

原创 JVM的运行时数据区域

JVM的运行时数据区域JVM会在执行Java程序的过程中把它管理的内存划分为若干个不同的数据区域,这些数据区域各有各的用处,各有各的创建与销毁时间,有的区域随着JVM进程的启动而存在,有的区域则依赖于用户线程的启动和结束而创建与销毁,一般来说:JVM管理的内存将会包含以下几个运行时的数据区域:线程私有区域:程序计数器、Java虚拟机栈、本地方法栈线程共享区域:Java堆、方法区、运行时常量池...

2019-08-17 01:27:35 91

原创 对于Tomcat中的websocket的了解

Tomcat自7.0.5版本开始支持WebSocket,并且实现了Java WebSocket规范(JSR356 ),而在7.0.5版本之前(7.0.2版本之后)则采用自定义API,即WebSocketServlet。本节我们仅介绍Tomcat针对规范的实现。根据JSR356的规定,Java WebSocket应用由一系列的WebSocket Endpoint组成。Endpoint是一个Java...

2019-08-16 23:04:51 677 1

原创 对http协议的理解

http协议是什么?http协议全称为Hyper Text Transfer Protocol(超文本传输协议),是用于万维网(WWW : World Wide Web)服务器传输超文本到本地浏览器的传送协议。。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)的一个应用层协议。在Internet中所有的传输都是通过TCP/IP进行的。HTTP协议作为...

2019-08-15 22:12:19 1697

转载 http 中的session和cookie

session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在浏览需要认证的服务页面以及页面统计中却相当关键。我们先来了解一下session和cookie怎么来的?考虑这样一个问题:如何抓取一个访问受限的网页?如新浪微博好友的主页,个人微博页面等。显然,通过浏览器,我们可以手动输入用户名和密码来访问页面,而所谓的“抓取”,其实就是使用程序来模拟完成同样的工作,...

2019-08-15 14:28:23 195

原创 String的replaceAll方法替换目标为File.separator抛出异常原因

因为文件分隔符需要统一的问题,今天遇见了要将String中的"/"全部替换成File.separator,可是这行代码却抛出了异常java.lang.IllegalArgumentException: character to be escaped is missingString url = "/index/start.html"url.replaceAll("/",File.separa...

2019-08-11 23:46:23 1137

原创 fail-fast策略以及fail-safe是什么?

什么是fail-fast?简单的来说就是优先考虑出现异常的场景,当异常产生时,直接抛出异常,程序终止。在jcl中的fail-fast?jcl中的fail-fast只要是体现在当我们在遍历集合元素的时候,经常会使用迭代器,但在迭代器遍历元素的过程中,如果集合的结构被改变的话,就会抛出异常ConcurrentModificationException,防止继续遍历。这就是所谓的快速失败机制。这...

2019-08-10 22:56:25 1307

原创 Java的双冒号操作符

简单的理解,双冒号运算符就是java中的"方法引用",格式为:类名 :: 方法名例如 :() -> new HashMap<>();//可以被替换为HashMap::new这种[方法引用]或者说[双冒号运算]对应的参数类型是Function<T,R> T表示传入类型,R表示返回类型。//原版//lists数据类型为: HashMap<Strin...

2019-08-09 21:02:20 338

原创 Java 8 的Lambda 表达式

早在2014年oracle发布了jdk 8,在里面增加了lambda模块。于是java程序员们又多了一种新的编程方式:函数式编程,也就是lambda表达式。一、什么是函数式编程函数式编程(functional programming)或称函数程序设计,又称泛函编程,是一种编程典范,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda...

2019-08-09 00:08:23 102

原创 Java中的三个点"..."也就是动态参数

在Java1.5之后在方法上传参时便出现了**"…"**,这三个点的学名叫做可变长参数,也就是相当于一个数组,能够传入0个至n个参数 public static void main(String[] args) { String[] t1 = {}; String[] t2 = {"java","C++"}; String t3 = "java";...

2019-08-08 19:32:48 15945

原创 Java中final、finally、finalize的区别以及注意点

1.区别:final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。虽然这个单词在Java中都存在,但是并没太多关联:final:java中的关键字,修饰符。A).如果一个...

2019-08-07 16:49:49 118

原创 Java的基础BFS,利用BFS实现单词接龙

什么是BFS?BFS是比较常用的搜索算法,全名为Breadth First Search(广度优先算法),相当于在考虑问题的时候,可以将所有下一步会遇到的情况考虑好,然后推演每一步直到走到想要的结果。应用场景1.求出到达指定目标的最小值2.树的层序遍历基本框架Bfs(){ 1. 建立起始步骤,队列初始化 2. 遍历队列中的每一种可能,whlie(队列不为空) { 通过队头元...

2019-08-07 02:11:14 297

原创 关于redis常见的基本了解

什么是Redis?Redis 是一个使用 C 语言写成的,开源的 key-value 数据库和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的...

2019-08-03 17:45:31 130 1

原创 Java集合类ArrayList与Vector的区别

区别与联系:1.相同点:1.ArrayList出现于jdk1.2,vector出现于1.0.两者底层的数据存储都使用的Object数组实现,因为是数组实现,所以具有查找快(因为数组的每个元素的首地址是可以得到的,数组是0序的,所以: 被访问元素的首地址=首地址+元素类型字节数*下标 ),增删慢(因为往数组中间增删元素时,会导致后面所有元素地址的改变)的特点2.继承的类实现的接口都是一样...

2019-08-01 16:57:42 663

原创 String中会遇见的几个问题

String的简介Java中的String类是一个经常使用的,String 类代表字符串。这个字符串属于常量,它们的值在创建之后就不能更改这一点可以从String的成员变量源码中看出。/** String的属性值 */ private final char value[]; /** The offset is the first index of the storage ...

2019-07-31 22:36:07 336

原创 Java的参数传递为值传递,为什么要复制引用的地址?

值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。Java中的值传递在Java中只有值传递,而且这个过程发生在栈上,栈的作用主要是存放一些基本数据类型的变量...

2019-07-30 17:46:53 261 1

原创 多线程Java聊天室

实现聊天室应该将内容分为两个模块,客户端模块和服务器模块;一.服务端创建1.1 ServletSocket,并绑定端口号; ServerSocket serverSocket = new ServerSocket(6320); System.out.println("服务器启动 "+ serverSocket.getLocalSocketAddress());1.2 创建一个存储连接...

2019-03-13 21:14:27 2461

转载 三种mysql存储引擎

数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySql的核心就是存储引擎。如果要想查看数据库默认使用哪个引擎,可以通过使用命令:SHOW VARIABLES LIKE 'sto...

2019-03-07 18:37:42 109

原创 Java四舍五入及保留小数点位数

之前有看过网上有的方法,比如可以利用字符串截取,还有就是运用DecimalFormat类来完成 /** * 格式化double&lt;br&gt; * 对 {@link DecimalFormat} 做封装&lt;br&gt; * * @param pattern 格式 格式中主要以 # 和 0 两种占位符号来指定数字长度。 * 0 表示...

2019-03-02 21:19:13 6494 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除