c语言 面向过程和面向对象的程序设计思想面向过程:是一种以事件为中心的编程思想。就是分析出解决问题所需要的步骤,然后使用函数将这些步骤一一实现,使用的时候一个一个调用就可以了。面向对象:是一种以事务为中心的编程思想。概述:常量:在程序执行过程中,其值不发生改变的量称为常量。符号常量: 用一个标识符代表一个常量。在c中。可以用一个标识符来表示一个常量,称为符号常量。符号常量在使用之前必须定义,其一般形式为:# define 标识符 常量其中#define也是一条预处理命令(预处理命令都以#开头
Python基础-pymysql的使用(数据库与py的连接)(21) 引入模块pip install pyMySQLConnection对象: 用于建立与数据库的连接构造方法和参数创建对象: connect()方法host参数:连接mysql主机的ip地址port:mysql主机的端口号user:用户名password: 密码charset:编码方式对象方法:close():关闭连接commit():提交rollback():放弃之前操作cursor():返回Cursor对象,用于执行sql语句并获得结果。Cursor对象执行sq
Python基础-协程(20) 协程概念:比线程更小的执行单元某个函数,可以在任何地方保存当前函数的一些临时变量信息,然后切换到另一个函数去执行进程和线程是系统切换,协程自己主动让出CPU协程的切换只是单纯的操作CPU的上下文,比线程的切换更快速1:N模式,就是让一个线程作为容器,里面放置多个协程IO密集型程序适用于协程,CPU密集型程序不适用于协程协程编程-greenletpy中greenlet模块对协程进行了封装安装模块:sudo pip install greenletfrom greenlet imp
Python基础-多线程(线程创建方式/线程同步/死锁问题/消息队列(Queue)/ThreadLocal)(19) 多线程概念线程是进程中一个“单一的连续控制流程”/执行路径线程被称为轻量级进程一个进程可以拥有多个并行的线程一个进程中的线程共享相同的内存单元/内存地址空间(可以访问相同的变量和对象),而且他们从同一个堆中分配对象(通信,数据交换,同步操作)由于线程间的通信是在同一地址空间上进行的,所以不需要额外的通信机制,这使得通信更简便并且信息传递的速度更快。线程几种状态多线程程序的执行顺序是不确定的,当执行到sleep时,线程将被阻塞(bloceed),到sleep结束后,线程进入就绪(runab
Python基础-fork/多进程/Process/进程池/消息队列(Queue)(18) fork在unix/linux操作系统中,提供了一个fork()系统函数,它非常特殊。普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次。因为操作系统自动把当前进程(父进程)复制了一份(子进程),然后分别在父进程和子进程内返回。子进程永远返回0,父进程返回子进程的ID。一个父进程可以fork()出很多个子进程。因此,父进程要记下每个子进程的ID,而子进程只需要调用getppid()就可以拿到父进程的id。getpid()可以拿到当前进程id父进程、子进程执行顺序没有规律,完全
Python基础-内建函数/partial(偏函数)/wraps函数/pdb调试(调试器)(17) 内建函数:在py中输入dir(_ builtins _)可以看到py解释器默认加载的属性和函数,这些函数称为内建函数,这些函数因为在编程中使用较多,因从py解释器使用c语言实现了这些函数,启动解释器时默认加载。常用内建函数range(start,stop[,step]): 计数从start开始,默认从0开始,到stop结束,不包含stop,步长为step,默认为1map(function,sequence[,sequence],…)根据提供的函数对指定序列做映射,序列可以为多个序列。作用就是把序列
Python基础-对象池/内存管理机制/属性访问拦截器(16) 对象池py为了优化速度,使用了小整数[-5,257)对象池,避免为整数频繁申请和销毁内存空间,就是说,比如5这个数,我们频繁使用。为了不频繁创建和销毁5这个对象,所以就创建了一个小整数对象池将5放进去,永远不会被销毁。如果使用,被引用即可。同理,单个字符因为因为使用频繁,也有自己的对象池。常驻内存。每一个大整数,均创建一个新的对象对于字符串中的单个单词,不可修改。默认开启intern机制,采用引用计数机制共用对象,计数为0则进行销毁。内存管理机制(垃圾回收GC)为新生成对象分配内存识别垃圾
Python基础-动态语言特性/类装饰器(15) 动态语言特性它是一类可以在运行时改变其结构的语言,如新的函数,对象,甚至代码都可以被引进,已有的函数可以被删除或是其他结构上的变化。动态语言:可以在运行过程中修改代码静态语言:编译时已经确定好代码,运行过程中不可以被修改为对象动态添加属性类定义时没有此属性,在对象创建后,动态添加此属性In [1]: class Person(object): ...: def __init__(self,name): ...: self.name=name ...:
Python基础-生成器/迭代器/作用域/闭包/装饰器(14) 生成器(generator)py中把一边循环一边计算的机制称为生成器,你不调用它,他就不进行计算。使用next()函数获取生成器的下一个返回值生成器是一个对象当迭代到生成器最后一个对象时,继续迭代会抛出StopIteration异常生成器是可以使用for循环的,因为生成器是可迭代对象。生成器只能使用一次特点:节约内存迭代到下一次的调用时,所使用的参数都是第一次所保留下来的生成器的创建:lambda表达式创建生成器a=(x for x in range(2))%创建生成
Python基础-python中的访问权限(私有化)/property使用(get/set方法)(13) 几个概念:名字重整:比如有一个Test类,定义了私有属性__name,并实例化了对象a,无法调用该属性。我们可以看到__name属性的名字被变成_Test__name,这就是名字重整。魔法属性/方法:魔法方法就如同它的名字一样神奇,总能在你需要的时候为你提供某种方法来让你的想法实现。魔法方法是指Python内部已经包含的,被双下划线所包围的方法,这些方法在进行特定的操作时会自动被...
Python基础-python中的深拷贝和浅拷贝(12) 概述:浅拷贝是对于一个对象的顶层拷贝,通俗的理解是:拷贝了引用,并没有拷贝内容,就是对要拷贝的对象复制(复制属性和对象引用)一份,但是对于其内部的子对象就不复制了,而是直接引用深拷贝是对于一个对象所有层次的拷贝,并将其存在新开辟的空间里。等号只是将该对象的引用复制一份,任何一个引用的对象发生变化,其它引用的对象也会发生变化,因此多个引用本身就是指向一个对象。注意:is和==区别is...
Python基础-模块的创建和使用(11) 模块的导入py中模块的导入相当于java中jar包的引入,py有以下模块的导入方式import 模块名这种方法导入模块,在应用模块中的功能时,需要加上模块名import randomprint(random.randint(0,5))from 模块 import 模块中类/方法/属性这种方法不需要在写模块名,如果调用多个方法,import后的内容可以使用逗号隔开from...
Python基础-异常处理(10) 几个注意:当某行代码抛出异常后,它后面的代码不会被执行,如果异常代码在try-except块中,并且被except捕获,则except后面的代码可以执行Exception是所有异常的父类,因此Exception可以捕获所有异常自定义异常必须继承Exception或者其子类finally块只有有,就必须被执行,其在最后执行当有else块时,只有不发生异常,else代码才会被执行rais...
Python基础-单例模式/简单工厂模式/工厂方法模式(9) 单例模式:一个类只创建一次。单例模式1:缺点是若对象需要传值,只会得到第一次的传值属性。#单例模式1 通过类方法获取实例#单例模式1 通过类方法获取实例class User(object): __instance=None def __init__(self,name): self.name=name @classmethod #类方法 ...
Python基础-类的继承/属性方法(8) 什么是类的继承?类的继承就是让子类拥有父类的属性和方法。类继承格式:class 子类名(父类1,父类2)几个注意:py支持多继承子类继承的父类只能初始化一次,如果父类1和父类2有共同的父类或者祖先类,则类初始化的时候会失败。当父类具有相同方法时,会调用最先继承的父类中的方法,如果要指定父类,则需要重写此方法,并通过父类名.方法名来调用指定父类方法。class Parent:...
Python基础-类和对象(7) 类的创建和调用py中,每个类都有自己的属性和方法,是这个类所有实例共享的,每个实例都可以调用所有的属性和方法。类的创建和调用步骤:类的创建:class语句类的属性创建:赋值语句实例方法创建:def method(self):类的实例化: 实例名= 类名调用类的属性:实例名.属性调用类的方法: 实例名.方法()类的创建需要注意的是,类中的方法调用类中的属性或者方法时,必须通过se...
Python基础-高级特性【迭代/列表生成式】(6) 迭代:任何可迭代对象都可以使用for循环进行进行迭代。判断当前对象是否有可迭代性list,tuple.dict,string等对象都是可迭代的,但是数字不行。from collections import Iterablea=[1,2,3,4]print(isinstance(a,Iterable))dict={'a':1,'b':20,'c':3}#对key值进行迭代,顺序不唯...
Python基础-函数/函数式编程/lambda表达式/装饰器(5) 函数:函数也是一个对象,函数可以用来保存一些可以执行的代码,并且可以进行多次调用。函数创建:def 函数名([形参…])def fun(): print('进来了')print('要调用了')fun()当函数有返回值时:def fun(a,b,**c): return 'rel'print(fun(a=1,b=3,c=2,e=4,h=6)) #relpyt...
Python基础-列表/元组/字典/集合(4) 1.序列(sequence):序列是py中最基本的一种数据结构可变序列列表不可变序列字符串元组序列基本操作:+可以将相同的序列拼接成一个序列*: 将序列重复指定次数in : 检查元素是否存在于指定列表/元组中not in:检查元素是否不存在指定列表/元组中list=(12,None,'sh',True,3,5,6)+(5,5)print(list*5)pri...
Python基础-条件判断/循环语句(3) py代码在执行时是按照自上而下的顺序执行的,通过流程控制语句可以让程序反复执行。条件判断语句if语句语法:if 条件表达式 : 代码块代码块:代码块中保存着一组代码,同一个代码块中的代码,要么都执行要么都不执行。py的代码块是以缩进开始,缩进结束。缩进有两种方式:使用tab键使用空格(四个)py推荐使用空格,py代码中的缩进方式必须统一。# 一行也需要缩进a=T...
Python基础-对象/运算符(2) 对象:py是一门面向对象的语言,在程序运行时,所有的数据都是存储在内存当中再去运行的。对象就是内存中专门用来存储数据的一块区域。对象实际上就是一个容器,专门用来存储数据。数值,字符串,布尔值,None都是对象。对象分为可变对象和不可变对象,可变仅针对值。对象结构:每个对象都要保存三种数据.id(标识):id用来标识对象的唯一性,每个对象都有唯一的id。可以通过id()函数查看对象的id...
Python基础-数据类型/类型转换(1) 1.注释:单行注释# 注释1多行注释'''注释2'''"""注释3"""2.语句:一条语句一行,结束不加分号一行显示多条语句,语句之间加分号一条语句需要多行显示时,用====进行换行3.缩进:py中一样代码的开头不能随便缩进(空格或制表符)py语法要求必须有缩进的位置,一定要加缩进4.标识符:py中使用变量不需要声明,直接赋值,不能使用没有赋...
SSM-SSM框架下mysql主从分离(动态加载数据源)代码实现及配置 服务器部署MySQL主从请看此博客Docker-一台服务器用docker实现mysql主从配置在dao包下编写的拦截器代码。DynamicDataSourceHolder:package com.dao.split;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * @Created with Intel...
Docker-一台服务器用docker实现mysql主从配置 前言:如何下载docker,并且拉取mysql镜像,请点击这篇博文。创建mysql容器进行持久化&设置远程连接&导入sql文件(centos7)主/从服务器配置文件我们需要在服务器上创建两个文件master.cnf和slave.cnf。并将两个文件的独有配置,配置进去。master.cnf 独有配置[mysqld] server-id=1#开启二进制记录log-b...
SSM-图形验证码的实现以及校验逻辑 引入依赖:<!--验证码--> <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version> ...
SSM-Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileUploadException 引言:本文,我先讲解决办法,异常描述在最下面。异常出现原因:在启动tomcat时,此异常并没有出现,但当我在网页调用项目中的静态资源文件时,此错误出现:Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileUploadException at org.apache.catalina.l...
Image-如何给图片加水印/得到操作系统路径(java实现) 首先在pom文件中引入jar包 <!--图片处理--> <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</versi...
Log-ssm中日志文件的配置 首先在我们在pom文件中引入日志jar包 <!--日志引入--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3...
matlab-小型物体三维轮廓测量技术(数据处理) 实验:使用双目相机对棋盘靶标进行拍摄,左右相机同步进行拍照。数据处理使用matlab处理图像:打开应用程序导入图像图像处理跑出来图像误差太大,有个别柱状图相比其它柱状图高度差距过大。点击误差最大最大的柱状图,看上方图像,发现好多红色十字并未在蓝色圆圈里删除误差较大的图像:点击柱状图,会自动跳到对应图像组,右键会出现remove选项 点击进行删除,...
前端-html页面如何隐藏播放音乐 <audio loop src="/music/music.mp3" id="audio" autoplay preload="auto">该浏览器不支持audio属性</audio><script type="text/javascript">//--创建页面监听,等待微信端页面加载完毕 触发音频播放document.addEventListener('...
Mysql-ERROR 2013 (HY000):异常解决 问题描述:在打开sqlYang时,遇见报错。于是使用cmd手动登陆mysql,但是依然报错,错误提示如下:ERROR 2013 (HY000): Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0问题解决:解决方法有两种:重启电脑。打开任务管理器,找到m...
HTTPS你知多少? 概述http有以下安全性问题:使用明文进行通信,内容可能会被窃听;不验证通信方的身份,通信方的身份可能遭到伪装。无法证明报文的完整性,报文有可能遭篡改。https并不是新协议,而是让http先和ssl进行通信,再由ssl和tcp进行通信,也就是说https使用了隧道进行通信。通过使用ssl,https具有了加密(防窃听),认证(防伪装)和完整性保护(防篡改)加密1,对称密钥加...
HTTP-HTTP这些基础知识点你会几个? 基础概念:URL:uri包含url和urn。目前web只有url比较流行。URI: 统一资源标识符URL:统一资源定位符URN:统一资源名称请求和相应报文:请求报文:响应报文:HTTP方法:客户端发送的请求报文 第一行 为请求行,包含了方法字段。get:获取资源当前网络中绝大部分请求是get方法。head: 获取报文首部和get方法一样,但是不返回报文实体的主...
Docker-概述 docker解决的问题:由于不同的机器有不同的操作系统,以及不同的库和组件,将应用部署到多台服务器上需要进行大量的环境配置操作。docker主要解决环境配置问题,它是一种虚拟化技术,对进程进行隔离,被隔离的进程独立于宿主机操作系统和其它隔离的进程。使用docker可以不用修改程序代码,就能够实现将应用程序部署到不同的机器上。docker和虚拟机的区别:虚拟机也是一种虚拟化技术,它与doc...
Docker-本地图形验证码测试正常,使用docker上线后报空指针问题 问题描述:最近搭建一个项目,本地测试正常。使用docker做server服务器。图形验证码代码逻辑报空指针异常。java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264) at sun.awt.FontConfiguration.readF...
SpringBoot-自定义解决Redis序列化问题(包含自定义时间序列化方式) 此自定义方式解决了取出来的value值都是linkedhashmap问题。import com.fasterxml.jackson.annotation.JsonTypeInfo;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.module.SimpleModul...
Docker-docker 容器时区差8个小时的解决办法(无需重启容器) mysql001 为容器名字,其他代码直接copy就好[root@iz2zei9wv79ob7vwy7y1jcz tmp]# docker cp /etc/localtime mysql001:/etc/localtime[root@iz2zei9wv79ob7vwy7y1jcz tmp]# dateThu Aug 8 01:16:47 CST 2019[root@iz2zei9wv79...
Docker-设置redis容器主从模式&哨兵模式 主从复制模式设置:首先开启三个reids容器:分别使用宿主机的6381 6382 6382 端口,[root@iz2zei9wv79ob7vwy7y1jcz redis]# docker run -p 6381:6379 --name redis001 -v $PWD/data:/data -d redis redis-server --appendonly yesa5e55a28854...
Docker-如何设置mysql容器中字符集 docker的mysql镜像为1.8版本首先去mysql容器中寻找mysql.cnf文件通常在以下地址:[root@iz2zei9wv79ob7vwy7y1jcz tmp]# docker exec -it mysql01 bashroot@e868fadad232:/# lsbin dev entrypoint.sh home lib64 mnt proc run...
Docker-创建mysql容器进行持久化&设置远程连接&导入sql文件(centos7) 1,下载镜像//下载镜像[root@iz2zei9wv79ob7vwy7y1jcz /]# docker pull mysql//查看已下载镜像[root@iz2zei9wv79ob7vwy7y1jcz /]# docker imagesREPOSITORY TAG IMAGE ID ...
maven-如何使用maven对springboot项目进行打包 步骤:使用dos窗口进入我们项目所在的根目录:E:\javaSource2\maven\WorkSpaces\miaoshao>使用命令:mvn clean package 完成打包E:\javaSource2\maven\WorkSpaces\miaoshao>mvn clean package[INFO] Scanning for projects...[IN...
MySQL-如何windows环境下备份mysql数据 备份步骤:首先进入本机mysql安装包的bin目录下使用以下命令:e:\share\为对应要存放sql的目录。E:\MySQL\mysqlanzhuang\bin>mysqldump -uroot -proot --databases miaosha > e:\share\miaosha.sql...
Linux-linux安装jdk失败(-bash:/usr/local/jdk1.8/jdk1.8.0_181/bin/java:/lib/ld-linux.so.2:badELFinterpret) 问题描述:jdk1.8 解压安装后出现错误:-bash: /usr/local/jdk1.8/jdk1.8.0_181/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory解决方法:yum install glibc.i686错误原因:glibc是GNU发布的libc库,即c运行库。gli...
杂谈-将Date/DateTime转化为字符串时遇到的月份大于12的问题 问题:将DateTime转为字符串进行如下操作:DateTime dateTime=new DateTime(promoDO.getStartDate());dateTime.toString("yyyy/mm/dd/HH/mm/ss");结果为 2019/50/08/19/50/00后经排查发现月份与分钟都为mm 将其区分开,问题得以解决。 DateTime dateTime...
JS-如何生成倒计时计时器 描述:我们从后端传到前端的时间戳一般为字符串形式,其形式可以为yyyy-mm-dd HH-mm-ss也可以在后端直接将特殊符号去掉得到传时间字符串。时间字符串转日期时,使用new date()new Date(2009,1,1); //正确new Date(“2009/1/1”); //正确因此我们需要将时间字符串处理为/形式 //后端已进...
MySQL-设置datatime默认值(0000-00-00 00:00:00)错误问题 问题描述:最近在做一个项目,需要用到datetime属性,在设置datetime默认值为0000-00-00 00:00:00 会出现错误下面错误"Invalid default value for 'start_date‘“原因为:mysql默认为:ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DAT...
杂谈-java8如何生成时间戳 代码实现 public static void main(String[] args) { LocalDateTime now=LocalDateTime.now(); //年月日时分秒毫秒 System.out.println(now.format(DateTimeFormatter.ofPattern("yyyymmddHHmmssSSS"))...
Jquery-Jquery读取url中的参数 function getParam(paramName) { paramValue = "", isFound = !1; if (this.location.search.indexOf("?") == 0 && this.location.search.indexOf("=") > 1) { ...
Mybatis-Mybatis缓存机制&Mybatis动态代理机制 Mybatis缓存机制:我们一般都会使用mybatis的默认缓存配置,但是mybatis的缓存机制有不足之处,使用中可能会造成脏数据问题。Mybatis一级缓存:mybatis一级缓存是sqlsession级别的。一级缓存的作用域是一个sqlsession。mbatis默认开启一级缓存 。在同一个sqlsession中,执行相同的查询sql。第一次会去查询数据库,并写道缓存中,第二次直接从...
springboot- hibernate-validator(校验框架)使用 概述:hibernate-validator是Hibernate项目中的一个数据校验框架,是Bean Validation 的参考实现,hibernate-validator除了提供了JSR 303规范中所有内置constraint 的实现,还有一些附加的constraint 。使用hibernate-validator能够将数据校验从业务代码中脱离出来,增加代码可读性,同时也让数据校验变得更加...
jQuery ajax - ajax() 方法 jQuery 参考手册 - AjaxjQuery ajax - ajax() 方法实例通过 AJAX 加载一段文本:jQuery 代码:$(document).ready(function(){$("#b01").click(function(){htmlobj=$.ajax({url:"/jquery/test1.txt",async:false});$("#myDiv")....
Mybatis-mybatis使用&xml文件配置 一,概述:Mybatis介绍:Mybatis是一款优秀的持久层框架,它支持定制化SQL,存储过程以及高级映射。mybaits 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集 。Mybatis可以使用简单的xml或注解来配置和映射原生信息,将接口和java的POJO(Plain Old java Objects,普通java对象)映射成数据库中的记录。Mybatis是基于JDBC做...
SpringBoot-跨域请求问题解决 问题呈现:在使用ajax向出于安全原因,浏览器禁止对驻留在当前源之外的资源进行AJAX调用。跨源资源共享(CORS)是大多数浏览器实现的W3C规范,允许您以灵活的方式指定授权的跨域请求类型,而不是使用IFrame或JSONP等安全性较低且功能较弱的方式。问题解决:最开始,在对应controller类加 @CrossOrigin@Controller("user")@RequestM...
JVM-java命令 java命令位于JDk的bin目录下。java命令目录: JPS(java process status): 显示当前所有java进程pid的命令。 Jstack: Jstack是java虚拟机自带的一种堆栈跟踪工具,用来分析JVM当前时刻的快照,快照是JVM中每一个线程正在运行的方法堆栈集合。 Jmap: Jmap 用于打印指定java进程的共享对象内存映射或堆内存细节。...
Redis-分片&预分片&Redis集群(Redis Cluster) 分片:分片是将数据划分为多个部分的方法,可以将数据存储到多台服务器里面,这种方法在解决某些问题时可以获得线性提升。范围分片:例如将用户id 0-10000 存到redis 1 中,10001-20000 存到 redis2中。但是这样需要维护一张映射范围表,维护操作代价很高。hash分片:使用CRC32哈希函数将键转换为一个数字,在对redis实例数量求模就能直到存储的redis实例。...
Redis-事务&事件&复制过程&sentinel(哨兵)详解 事务:一个事务包含了多个命令,事务中所有的命令都会系列化,按顺序的执行,服务器在执行事务期间,不会改去执行其它客户端的命令请求。事务是一个原子性操作,要么全部被执行,要么都不执行。事务中多个命令被一次性发送给服务器,而不是一条一条发送,这种方式被称为流水线,它可以减少客户端与服务端之间的网络通信次数从而提升性能。redis最简单的事务实现方式是使用multi和exec命令将事务操作包围起来...
Redis-数据淘汰策略&持久化方式(RDB/AOF)&Redis与Memcached区别 Redis与Memcached区别:两者都是非关系型数据库。主要有以下不同:数据类型:Memcached仅支持字符串类型。redis支持:String,List,set,zset,hash 可以灵活的解决问题。数据持久化:Memcached不支持持久化。Redis采用两种持久化策略:RDB快照和AOF日志。分布式:Mencached不支持分布式,只能在客户端使用一致性h...
Redis-Redis命令&数据类型&使用场景 Redis概述:redis是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串,列表,集合,有序集合,散列表Redis支持很多特性。例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能。Redis命令Redis 命令不区分大小写,键值区分大小写Redis命令具有原子性, 不会...
算法-动态规划(硬币数量/最长子序列/最长连续子序列/三角数组最大和) 算法描述通过把原问题分解为相对简单的子问题来求解复杂问题。动态规划常常适用于有重叠子问题和最优子结构性质的问题。算法总体思想动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题与分治法的区别在于:适用于动态规划算法求解的问题,经分解得到的子问题往往不是互相独立的;若用分治法求解,则分解得到的子问题数目太多,导致最终解决原问题需指数时间, 原因在于:虽然子问题的数目常常只...
hashCode和equals equals()用于判断两个对象是否相等,这是大家公认的。hashCode()被设计是用来使得哈希容器能高效的工作。为什么这么说?在java中,有一些哈希容器,比如Hashtable,HashMap等等。当我们调用这些类的诸如get(Object obj)方法时,容器的内部肯定需要判断一下当前对象obj在容器中是否存在,以便进行后续的操作。判断是够存在,肯定是要比较两个对象是否相等,我们"应该...
数据结构-SkipList(跳跃表) 前面概念性以及图例引用了这位博主博客:请点击跳跃表概述:红黑树实现了一颗高效的二叉查找树,其增删查的时间复杂度为O(log2N),但是其实现起来有点复杂。跳跃表是一种以更加便捷的方式实现了和红黑树增删查操作时间复杂度一样的数据结构。JUC并发包中提供了一个ConcurrentSkipLIstSet的实现,是一个线程安全的跳跃表,基于CAS实现的线程安全。缺点:跳跃表会浪费大量内存,在海...
JDBC-JDBC组件&JDBC编程步骤 JDBC概述java提供的一套操作数据库数据的应用编程接口,在用连接jdk所提供的相应实现类。JDBC组件DriverManager: 一系列的数据库驱动程序,匹配连接使用通信协议从java应用程序中获取合适的数据库驱动程序。Connection: 所有和数据库相关的上下文操作通过该接口的实现类来提供数据库的事务操作,Statement对象等接口方法。Statement:使用创建该接口...
算法-回溯算法-子集树(装载问题/0-1背包问题) 什么是解空间:解空间就是问题所有解的可能取值构成的空间,一个问题的解往往包含了得到这个解的每一步,就是对应解空间树中一条从根节点到叶子结点的路径。回溯算法:在问题的解空间树中,按深度优先策略,从根节点出发搜索解空间树,算法搜索至解空间的任意节点时,先判断该节点是否包含问题的解,若不包含则跳过对以该节点为根节点的子树的搜索,逐层向其祖先节点回溯。否则进入该子树,继续按根深度优先搜索。子集树:...
数据结构-RBTree(红黑树) 概述:红黑树是不是一颗平衡树:不是,其高度差可以达到n红黑树结点左右子树高度差:长的不能超过短的二倍。因为需要保证所有路径上黑色节点数量相等,因此若一条节点路径全部是黑色,另一条路径红黑相间也只能插入2n个。红黑树的增删效率?高于AVL树,红黑树插入最多调整两次,删除调整三次。AVL树最多调整次数达到层数次。红黑树特点:每个节点都有颜色,非黑即红。所有叶子节点都是黑色的,叶...
剑指Offer-二叉树的下一节点 题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:中序遍历为LVR。我们进行分析,若当前节点有右子树,那么下一节点肯定在其右子树,对右子树一直进行向左遍历。若当前节点为父节点的左子树,直接返回父节点,若不是,则一直向上遍历满足条件的父节点。代码实现:/*public class Tree...
剑指Offer-二叉搜索树的第k个节点 题目:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。思路:求第k大或者第k小这种顺序遍历。我们使用中序遍历。求第K小我们使用LVR。求第K大我们使用RVL。代码实现:/*public class TreeNode { int val = 0; TreeNode left = null...
剑指Offer(39_2)-判断一颗二叉树是不是平衡二叉树 题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。思路:采用后续遍历,判断返回的左右子树的高度差是不是大于1。代码实现:public class Solution { private int TreeDepth(TreeNode root) { if(root==null) return 0; int l=TreeDept...
剑指Offer(39)-二叉树的深度 题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路:我们每次比较左右子树的深度,得到深度最大的,加一在返回上层递归调用。代码实现:/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right ...
剑指Offer(27)-二义搜索树与双向链表 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:对于二叉树,只要想到有序,那么我们直接想到中序遍历。中序遍历为LVR。此题让我们返回有序链表的头结点。如果我们使用LVR,并且L返回的是头结点,那么再代码实现:/**public class TreeNode { int val = 0; Tr...
剑指Offer(25)-二叉树中和为某一值的路径 题目:输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路:我们采用递归的思路进行处理,每当深度递归时将当前节点值压入临时链表list中。若当前节点恰好为叶子节点并且target为0时,那么这就是我们找到的一条路径。我们将此条路径压入lis...
剑指Offer(24)-二叉搜索树的后续遍历序列 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路:后序遍历为LRV。因此数组最后一位为根节点。数组前半段为其左子树,后半段为其右子树,再每层递归时,我们找到左右子树的分割点,分别判断左右子树是否小于/大于根节点,然后在对左右子树进行递归。代码实现:public class Solution...
剑指Offer(23)-从上往下打印二叉树 题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:使用一个队列,将左右孩子分别压入队列中,每次取出一个元素重复之。那么实际上就是按层进行存放的。代码实现:import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNod...
剑指Offer(19)-二叉树的镜像 题目:题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树8/ 6 10/ \ / 5 7 9 11镜像二叉树8/ 10 6/ \ / 11 9 7 5思路:采用递归,每次递归前先将左右孩子调换,然后再对左右孩子进行递归。代码实现:/**public class TreeNode { int ...
剑指Offer(18)-判断是不是子树 题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:这道题我们要注意的是,其是二叉树,而不是BST树。因此其节点可能会重复,也不会存在左边小,右边大的情况。因为我们再寻找子树的过程中,需要穷举,只要没有找到子树,那么我们就继续寻找root1和root2相同的根节点再去判断子树。代码实现:/**public class TreeNode ...
LeetCode(626)-换座位 题目:小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。其中纵列的 id 是连续递增的小美想改变相邻俩学生的座位。你能不能帮她写一个 SQL query 来输出小美想要的结果呢?示例:±--------±--------+| id | student |±--------±-...
LeetCode(180)-连续出现的数字 题目:编写一个 SQL 查询,查找所有至少连续出现三次的数字。±—±----+| Id | Num |±—±----+| 1 | 1 || 2 | 1 || 3 | 1 || 4 | 2 || 5 | 1 || 6 | 2 || 7 | 2 |±—±----+例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。±...
LeetCode(178)-分数排名 题目:编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。±—±------+| Id | Score |±—±------+| 1 | 3.50 || 2 | 3.65 || 3 | 4.00 || 4 | 3.85 || 5 | 4.0...
LeetCode(176)-第二高的薪水/第N高的薪水 题目:编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。±—±-------+| Id | Salary |±—±-------+| 1 | 100 || 2 | 200 || 3 | 300 |±—±-------+例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么...
LeetCode(184)-部门工资最高的员工 题目:Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id。±—±------±-------±-------------+| Id | Name | Salary | DepartmentId |±—±------±-------±-------------+| 1 | Joe | 70000 | 1 ...
LeetCode(183)-从不订购的客户 题目:某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。Customers 表:±—±------+| Id | Name |±—±------+| 1 | Joe || 2 | Henry || 3 | Sam || 4 | Max |±—±------+Orders 表:±—±--...
LeetCode(181)-超过经理输入的员工 题目:Employee 表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。±—±------±-------±----------+| Id | Name | Salary | ManagerId |±—±------±-------±----------+| 1 | Joe | 70000 | 3 || 2 ...
LeetCode(175)-组合两个表 题目:表1: Person±------------±--------+| 列名 | 类型 |±------------±--------+| PersonId | int || FirstName | varchar || LastName | varchar |±------------±--------+PersonId 是上...
LeetCode(196)-删除重复的电子邮箱 题目:编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。±—±-----------------+| Id | Email |±—±-----------------+| 1 | john@example.com || 2 | bob@example.com || 3 | john@exampl...
LeetCode(182)-查找重复邮箱 题目编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。示例:±—±--------+| Id | Email |±—±--------+| 1 | a@b.com || 2 | c@d.com || 3 | a@b.com |±—±--------+根据以上输入,你的查询应返回以下结果:±--------+| Email |±-------...
LeetCode(596)-超过5名学生的课 题目:有一个courses 表 ,有: student (学生) 和 class (课程)。请列出所有超过或等于5名学生的课。例如,表:±--------±-----------+| student | class |±--------±-----------+| A | Math || B | English || C ...
LeetCode(620)-有趣的电影 题目:某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述。作为该电影院的信息部主管,您需要编写一个 SQL查询,找出所有影片描述为非 boring (不无聊) 的并且 id 为奇数 的影片,结果请按等级 rating 排列。例如,下表 cinema:±--------±----------±------...
LeetCode(627)-交换工资 题目:给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值。交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求只使用一个更新(Update)语句,并且没有中间的临时表。注意,您必只能写一个 Update 语句,请不要编写任何 Select 语句。例如:idnamesexsalary1Am25002B...
JDBC-自定义数据库连接池 配置文件:#驱动路径driver=com.mysql.cj.jdbc.Driver#JDBC连接URLurl=jdbc:mysql://localhost:3306/sqldemo?useSSL=false&serverTimezone=UTC#账号username=root#密码password=123456#初始连接池大小initPoolSize=3#最大空闲时间...
JDBC-数据库连接池 概述:对于简单的数据库连接,在使用之前创建一个连接,使用之后释放一个连接,当系统比较复杂时,频繁的进行资源的连接和释放很消耗系统性能。数据库连接池:负责分配,管理和释放数据库的连接,允许服务重复使用一个数据库既有的数据库连接,不需要重复创建和释放连接。优势:资源复用。更快的系统相应速度。新的一种资源分配方式。统一的连接管理,避免数据库连接泄漏。常见的连接池:c3p0:简单...
JDBC-Druid数据库连接池使用演示 maven中依赖:<!--Druid连接池依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.26</version> ...
JDBC-DBCP数据库连接池使用演示 maven依赖:<!--DBCP连接池依赖--> <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>1.5.4</version&...
JDBC-c3p0数据库连接池使用演示 步骤:首先在maven中配置依赖:<!--JDBC驱动包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16<...
JDBC-SQL注入攻击问题及解决方案 什么是SQL注入:由于dao层中执行的SQL语句是拼接出来的,其中一部分内容是用户从用户端输入的,当传入数据包含SQL关键字时,就有可能通过这些关键字来改变SQL的语义,从而执行一些特殊的操作,这就称为SQL注入问题。SQL注入攻击演示:首先我们创建一张用户表,里面包含用户名和密码。mysql> select * from user;+----------+----------+...