1 | public class JDBCUtil { |
1 | public class JDBCUtil { |
一、首先什么是JDBC
JDBC是sun公司提供一套用于数据库操作的接口,java程序员只需要面向这套接口编程即可。
不同的数据库厂商,需要针对这套接口,提供不同实现。不同的实现的集合,即为不同数据库的驱动。 ————面向接口编程
1.注册驱动
首先我们要new出Driver类,Driver接口在java.sql.Driver()中,Driver接口实现类在com.mysql.jdbc.Driver()中,两者包名不同但名字相同,注意正确地导包
这篇文章将会比较两种常见的回溯体型,一种是全排列问题,一种是求子集的问题,两者都是利用回溯解法,但是两者的for循环选取下一个可选值时的起始坐标是不同的,先上部分代码我们来比较以下
1 | //子集求法 |


我们观察两者的区别,发现前者的代码for循环是从startIndex开始的,而后者的代码for循环总是从0开始的,这是为什么呢?
因为全排列是有顺序的1,2和2,1是不同的,而对于集合来说1,2和2,1是相同的,所以在变量集合的过程中,我们不能回头,否则会产生重复,正是因为子集求法没有回头,所以我们不需要创建used数组来判断数字是否使用过,仔细品味上述的图片和代码就会明白其中的道理!!
一、介绍:
1.servlet接口来自于Servlet规范下一个接口,这个接口存在Http服务器提供的jar包中
2.TomCat服务器下lib文件有一个servlet-api.jar存放servlet接口
3.servlet规范中规定,Http服务器能调用的【动态资源文件】必须是一个Servlet接口实现类
1 | 计算给定二叉树的所有左叶子之和。 |
主要思路:
本题在于判断一个节点是否为左叶子节点,如何判断一个节点是否是左叶子节点的?
我们单单通过当前节点是无法判断的,我们需要根据其父节点来判断
1 | if(root.left!=null&&root.left.left==null&&root.left.right==null){ |
普通版:
1 | class Solution { |
简洁进化版:
1 | public static int sumOfLeftLeaves(TreeNode root) { |
一、网络协议包:
1.在网络中传递信息都是以二进制形式催在的
2.接收方[浏览器/服务器]在接受信息后,要做的第一件事就是将[二进制数据]进行编译[文字,图片,视频,命令]
3.传递信息数据量往往比较巨大,导致接收方很难在一组连续二进制得到对应的数据
4.网络协议包一组有规律的二进制数据,在这组数据中存在了固定的空间,每一个固定的空间存放特定的信息,这样接收方在接受网络协议包之后就可以得到固定空间的对应的信息,网络协议包极大降低了接收方接受对应二进制数据编译的难度
二、常见的网络协议:
1.FTP网络协议包
2.Http网络协议包
三、Http网络协议包:
在基于B/S结构下互联网通信过程中,所有在网络中传递信息都是保存在Http网络协议包中分为Http请求协议包和Http响应协议包
四、Http请求协议包与Http响应协议包介绍:
1.Http请求协议包:
在浏览器准备发送请求时,负责创建一个Http请求协议包,浏览器将请求信息以二进制的形式保存在请求协议包各个空间中,由浏览器负责将Http请求协议包推送到指定服务端计算机
2.Http响应协议包:
Http服务器在定位到被访问的资源后负责创建一个Http响应协议包,Http服务器将定位文件内容以二进制写入到Http响应协议包中推送会发起请求的浏览器上
五、Http请求协议包内部空间
1.按照自上而下划分,分为4个空间
2.空间划分,自上而下:
请求行
1 | url:请求地址 |
请求头
1 | 请求参数信息[当请求方式为GET] |
空白行
1 | 没有任何内容,起到隔离作用 |
请求体
1 | 请求参数信息[当请求方式为POST] |
六、Http响应协议包内部结构
1.按照自上而下的划分,分为4个空间
2.空间划分,自上而下:
状态行
1 | Http状态码 |
响应头
1 | content-type:指定浏览器采用对应的编译器。对响应体二进制数据进行解析 |
空白行
1 | 没有任何内容,起到隔离作用 |
响应体
1 | 可能被访问静态资源文件内容 |

title: 全排列II
categories: 数据结构与算法
1 | 给定一个可包含重复数字的序列,返回所有不重复的全排列。 |
主要思路:整体思路和全排列是大致相同的,本题的难点在于如何剪枝,如何去重
如图所示,当我们把nums数组排好序后,我们思考一个问题,什么时候会产生重复的组合,红色框内标注的情况是和1是一样的,所以当num[i-1]==nums[i]时,可能会发生重复,当我们是要判断层重复,而不是枝重复,如果仅仅只有这个条件那么最左边一条路径在选取第二个i时,也无法选择
所以我们还需要另一个判重条件
我们在深入分析可以发现,其实我们要剪枝的部分是满足上述条件且刚刚撤销选择的部分,当我们撤销选择时,在重新选取下一个数时,如果num[i-1]==num[i]说明下面的情况都相同
剩下的代码和全排列相同
1 | public class PermuteUnique { |
一、如何下载安装TomCat,安装及配置
1.下载:https://tomcat.apache.org/ 官方网址,一般下载Tom9,64位,下载后直接安装
2.配置TomCat环境变量
①.配置JAVA_HOME,将jdk的路径配置到环境变量中C:\Program Files\Java\jdk-14.0.1
②.配置CATALINA_HOME,将TomCat的路径加入到环境变量中 D:\apache-tomcat-9.0.37-windows-x64\apache-tomcat-9.0.37
二、如何启动和关闭TomCat服务器
1.进入tomCat,bin目录下的startup和shutdown的exe后缀文件,或是在bin目录下使用cmd输入startup和shutdown。
注意事项
一般在开启服务前,先关闭服务,防止忘记关闭服务再次打开失败
当成功启动tomCat服务器后,localhost:8080访问后出现连接成功的页面则表示连接成功
三、如何利用idea启动TomCat服务器
1.File(文件)->setting(设置)->构建、执行、部署->application service->点击+号,tomCat service设置tomCat的路径
2.准备开关:运行->编辑配置->+tomCat service->默认选项
3.当运行按钮后弹出页面,在地址后加上想要访问的目录既可运行成功
四、idea创建网站
1.创建modea文件,Java Enterprise下Web Application此处位网站起名时可以添加中文
2.创建myWeb后下的文件结构:
①.src放置作为动态文件资源的Java文件
②.web文件架存放作为静态资源文件例如:图片,html,css,js
–web下的WEB_INF中存放网站的核心配置文件(web.xml)
–WEB-INF下的lib文件夹存放网站运行的核心配置文件时依赖的jar文件
3.为开关设置发布行为,运行->编辑配置->选到相应开关->deployment->+artifat->为网站起英文别名
4.运行即可
title: 解数独
categories: 数据结构与算法
1 | 编写一个程序,通过已填充的空格来解决数独问题。 |
主要思路:
1.首先这里用到了几个技巧,首先是visited数组的设置来标记行使用,列使用,和3*3的方格内的使用情况
2.关于返回值为booelan型的递归时,如何确定返回条件
1 | class Solution { |
1 | 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 |
这道题如果不限制时间和空间的复杂度其实有很多种解法,接下来我们着重讲三种做法,不在于结果而在于解决这个问题过程种的分析
一、利用hashMap对应存储每个数字的次数,最后取出次数为1的数字,但时间复杂度为o(n)
1 | class Solution { |
二、我们如果利用暴力方法对每一个数组在后面的集合中查找时间复杂度为o(n^2),但我们思索一下,如果我们将数组排序一下,就可以讲复杂度降到o(n),且是线性复杂度
1 | public static int singleNumber(int[] nums) { |
三、接下来的方法非常牛,利用位运算来解决问题,接下来就来分析一下位运算,以及如何利用位运算来解决这个问题,由于输入问题我们用#代替^符号
首先我们来理解一下或与运算符的规则,位运算有以下三种性质
即根据操作数的二级制数来运算,对应位相同则为0,不同则为1,利用这个衍生处三个性质
1.任何与0做位运算的数字结果都为数字本身:0#a=a
2.任何数于本事做位运算结果都为0:a#a=0
3.位运算满足交换律和结合律即:a#b=b#a,a#b#c#d=(a#b)#(c#d)
所以我们利用上述的结论,对数组进行分析,我们假设该数组有2*m+1个数字,其中m组数组均为出现2次,剩余一个数字出现1次,那么我们总可以将这个数组化成下列形式
(a1#a1)#(a2#a2)……(am#am)#am+1,其中成对的结果都为0最终就是0#am+1就是只出现了一次的数字
1 | public static int singleNumber2(int [] nums) { |
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent:
meta: false
pages: false
posts:
title: true
date: true
path: true
text: false
raw: false
content: false
slug: false
updated: false
comments: false
link: false
permalink: false
excerpt: false
categories: false
tags: true