- 博客(54)
- 收藏
- 关注
原创 简单工厂、工厂、抽象工厂
简单工厂:唯一工厂类,一个产品抽象类,工厂类的创建方法依据入参判断并创建具体产品对象。工厂方法:多个工厂类,一个产品抽象类,利用多态创建不同的产品对象,避免了大量的if-else判断。抽象工厂:多个工厂类,多个产品抽象类,产品子类分组,同一个工厂实现类创建同组中的不同产品,减少了工厂子类的数量。在下述情况下可以考虑使用工厂模式:在编码时不能预见需要创建哪种类的实例。系统不应依赖于产品类实例如何被创建、组合和表达的细节# 简单工厂# 缺点:如果增加新的产品类型,就需要在if-else里增.
2022-04-26 15:06:07 386
原创 Python 多线程例子
'''线程里面的锁'''import threadingimport timelock = threading.Lock() # 创建了锁share_date = 0 # 创建了一个变量def tstart(): time.sleep(0.1) global share_date if lock.acquire(): # 获取了锁 share_date += 1 lock.release() # 释放锁# tstart(1)
2022-04-19 14:27:34 552
原创 Python 设计模式实例
工厂模式class Operation: def __init__(self, num1=0, num2=0): self.num1 = num1 self.num2 = num2 def calculate(self): passclass Add(Operation): def calculate(self): return self.num1 + self.num2class Sub(Operati
2022-04-19 14:20:06 261
原创 Shuffle an Array & Linked List Random Node
leetcode 384class Solution: def __init__(self, nums: List[int]): self.nums = nums self.ori = nums[:] self.n = len(nums) def reset(self) -> List[int]: self.nums = self.ori[:] return self.nums def sh
2022-03-14 14:28:12 432
原创 滑动窗口模版
def findSubstring(s): N = len(s) # 数组/字符串长度 left, right = 0, 0 # 双指针,表示当前遍历的区间[left, right],闭区间 counter = collections.Counter() # 用于统计 子数组/子区间 是否有效 res = 0 # 保存最大的满足题目要求的 子数组/子串 长度 while right < N: # 当右边的指针没有搜索到 数组/字符串 的结尾 co
2022-02-25 10:33:00 65
原创 排序算法(Python)
import randomclass Selection(object): @staticmethod def sort(nums): n = len(nums) for i in range(n): min_idx = i for j in range(i + 1, n): if nums[j] < nums[min_idx]:
2022-01-09 20:31:46 398
原创 线段树代码
学习资源:https://www.bilibili.com/video/av47331849/# 线段树# 对于满二叉树来说,当前节点下标i, 左儿子下标2i+1, 右儿子下标2i+2# 0# 1 2# 3 4 5 6def build_tree(arr, tree, node, start, end): # node为根节点下标 if start == end: tree[node] = a
2021-11-30 15:41:40 295
原创 迪克斯特拉算法
参考:算法图解# 在未处理的节点中找到开销最小的节点def find_lowest_cost_node(costs, processed): lowest = float("inf") lowest_cost_node = None for node in costs: cost = costs[node] if cost < lowest and node not in processed: lowest = co
2021-11-01 13:55:13 119
原创 简单快速排序 (python)
def q_sort(arr): if len(arr) < 2: return arr else: pivot = arr[0] less = [i for i in arr[1:] if i <= pivot] greater = [i for i in arr[1:] if i > pivot] return q_sort(less) + [pivot] + q_sort(greater)
2021-10-29 10:27:34 121
原创 二分查找(递归/非递归)
def b_search(arr, target): left = 0 right = len(arr) - 1 while left <= right: mid = left + (right - left) // 2 if arr[mid] == target: return True elif arr[mid] < target: left = mid + 1
2021-10-29 10:04:59 78
原创 Git 学习
本地操作windows下安装msysGit运行Git Bash设置全局name和email:$ git config --global user.name "qinyuchen"$ git config --global user.email "xxx@xxx.xxx"创建目录,并将此目录设置为版本库(repository),这个目录里面的所有文件都可以被Git管理起来,每个文件的修...
2020-03-20 12:10:13 121
原创 Python tuple / namedtuple
# ****************************开始#元组拆包#只提取color,尺码没用,所以赋值给_占位符tshirts = [('black','xl'),('white','l'),('red','s')]for color,_ in tshirts: print(color)#元组拆包:平行赋值color,size,brand = ('red','xl'...
2020-03-17 14:57:56 157
原创 Ubuntu 下安装 MongoDB
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
2020-03-08 16:48:52 132
原创 Python 使用pipenv安装虚拟环境 + PyCharm打开
安装 virtualenv提前修改好国内源,加快下载速度。C:\Users\qinyu>pip install virtualenv创建虚拟环境在目标目录下:ENV为环境名virtualenv ENV可选参数:比如要创建不同python版本的虚拟环境virtualenv -p E:\Python\python.exe ENV是否继承系统的三方库(如果不加此项,到时候只...
2020-03-03 00:28:45 478
转载 ubuntu下pip3下载慢解决方法
一次性:pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名例如:pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas国内源:清华:https://pypi.tuna.tsinghua.edu.cn/simple阿里云:http://mirrors...
2020-03-01 17:29:38 1326
原创 Python 面向对象
dir 内置函数在 标识符 / 数据 后输入一个 .,然后按下 TAB 键,iPython 会提示该对象能够调用的 方法列表使用内置函数 dir 传入 标识符 / 数据,可以查看对象内的 所有属性及方法提示 __方法名__ 格式的方法是 Python 提供的 内置方法 / 属性定义类方法 的定义格式和之前学习过的函数 几乎一样区别在于第一个参数必须是 self创建对象对象变量...
2020-02-24 20:14:46 222
原创 随机快速排序
/** * 快速排序3.0 —— 随机快排,时间复杂度收敛于 O(NlogN) */public class QuickSort { /** * * @param arr 需要排序的数组 * @param L 需要排序部分的左边界 * @param R 需要排序部分的右边界 */ public static ...
2020-01-31 18:33:38 168
原创 使用异或运算交换数组中不同位置的值
private static void swap(int[] arr,int i,int j){ arr[i] = arr[i]^arr[j]; arr[j] = arr[i]^arr[j]; arr[i] = arr[i]^arr[j]; }
2020-01-31 18:00:18 253
原创 荷兰国旗问题(给出划分值的partition)
public class NeitherLandFlag { /** * * @param arr 目标数组 * @param L 需要分组的范围的左边界 * @param R 需要分组的范围的右边界 * @param p 划分值 * @return */ public int[] partiti...
2020-01-31 17:18:58 377
原创 Spring揭秘——读书笔记
第2章 IoC的基本概念2.1 控制反转IoC的全称为Inversion of Control,中文通常翻译为“控制反转”,它还有一个别名叫做依赖注入(Dependency Injection)。(也有另一种说法,把依赖注入看成是IoC的一种方式)以前我们每次依赖某个对象时,都要主动去获取(直接new对象)。如今,IoC帮我们管理这些对象,被注入对象需要什么,IoC就把相应的依赖对象注...
2020-01-21 20:13:36 300
原创 工厂模式
定义定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。** 抽象产品类 **public abstract class Product { //产品类的公共方法 public void method1(){ //业务逻辑 } //抽象方法 public abstract void method2();}具体产品类可以有许多个,...
2020-01-16 21:58:57 112
原创 单例模式
设计原则1. 单一职责原则要求一个接口或者类只有一个原因引起变化,也就是一个接口和类只有一个职责。2. 里氏替换原则只要父类能出现的地方子类都可以出现,而且替换为子类也不会产生任何错误或者异常。3. 依赖倒置原则 Dependence Inversion Princple实现类间不发生直接的依赖关系,其依赖关系通过接口或抽象类产生。接口或抽象类不依赖于实现类。实现类依赖接口或者抽象...
2020-01-16 20:42:46 116
原创 深入Java虚拟机——读书笔记
书:深入JAVA虚拟机第二版第一章Java体系结构包括4个技术:Java程序设计语言Java class文件格式Java应用编程接口Java虚拟机一个Java程序可以有两种装载器:启动类装载器(系统中唯一的),包括Java API自定义装载器(多个)每个类被装载时,Java虚拟机都会监视这个类。当被装载的类引用了另外一个类时,虚拟机会使用装载这个类的类装载器装载被引用...
2020-01-16 16:37:13 185
原创 MySQL 主从复制读写分离(mysql-proxy & Amoeba)
Linux安装MySQL 5.71. 打开虚拟机(此处使用Xshell)2. 更换yum源 执行 yum install wget -y 执行 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 执行 wget -O /etc/yum.repos.d/CentOS-Base.repo ...
2020-01-10 12:29:57 249
原创 MySQL锁机制
概念**锁是计算机协调多个进程或线程并发访问某一资源的机制。**表级锁开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用,如Web应用。行级锁开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。行级锁则更适合于有大量按索引条件并发更新少量不同数据,同时又有 并发查询的应用,如一...
2020-01-09 00:21:58 85
原创 MySQL索引、架构(redolog, undolog, binlog)
基础知识:操作系统:包括操作系统内核、shell、驱动、运行库、引导程序等各种东西都是操作系统的一部分。对于Windows来说,大部分Windows目录下的东西都属于操作系统的一部分。对于Linux来说,/lib,/boot下的大多数东西都属于操作系统内核:操作系统最核心的部分,一般来说,内核特指某一个或者几个文件。对于Windows来说,内核文件是\Windows\system32...
2020-01-06 14:38:52 347
原创 二叉树、AVL树、红黑树
二叉树:左子树小于根节点,右子树大于根节点。缺点:当最高子树和最低子树高度相差太多时,查询的时间复杂度太高,变成了O(n)。AVL树:平衡二叉树,满足最高子树和最低子树之差不能超过1在元素插入时,会进行自旋,以满足上面的性质。缺点:频繁的自旋影响性能,适合插入少,查询为主的场景。左旋:右旋:红黑树最高子树和最低子树高度之差小于2倍即可,如最低子树高度是4,最高子树高度最多是...
2020-01-05 17:40:24 161
原创 数据库连接池,resultSet映射为实体类
数据库连接池的目的是为了减少频繁开关连接的时间,提高整个系统的响应能力。一个数据库连接池应具备以下属性值:初始大小每次扩容的大小连接池的最大个数空闲连接的死亡时间常见据库连接池:DBCPC3P0DruidhikariCP测试前先导入jar包。public class DBCPTest { public static void main(String[] ar...
2020-01-05 01:00:52 676
原创 DBUtils
概念DBUtils 是封装的JDBC工具类,可以方便的进行增删改查。使用导入DBUtils的jar包。最好自己先写一个工具类来获取Connection对象。DBUtils 提供了多种 ResultSetHandler 的实现类来转换ResultSet中的数据,我们也可以自己定义实现类。ArrayHandler :将ResultSet中第一行的数据转化成对象数组 。ArrayLis...
2020-01-04 21:29:01 94
原创 Java 反射
概念JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的属性和方法;对于任意一个对象,都能够调用它的任意一个属性和方法;这种动态获取的信息以及动态调用对象的方法的功能称为JAVA的反射机制。想要解剖一个类,必须要先获取该类的字节码文件对象。而解剖使用的就是Class类中的方法,所以要先获取到每一个字节码文件对应的Class类型的对象。类加载过程当Java程序需要使用某个...
2020-01-04 21:12:51 88
原创 JDBC
概念java database connectivityJava 反问控制数据库里面数据的一套标准java.sql.Driver : 驱动java.sql.Connection 连接java.sql.Statement 静态处理块java.sql.PreparedStatement 预处理块java.sql.ResultSet 结果集java.sql.ResultSetMetaDa...
2020-01-04 11:23:15 89
原创 Orale 创建表、修改表结构、约束、索引、数据库设计三范式
创建表CREATE TABLE [sheme.]table(column datatype [default expr] , …);例子:建立一张存储学生信息的表create table student(stu_id number(10) primary key,name varchar2(20) not null,age number(3) check(age>0 and...
2020-01-03 16:53:28 269
原创 数据库事务
事务的开始:DML(增删改) 语句事务的结束:执行commit 或者 rollback 语句自动提交(一般情况下关闭自动提交,效率太低)一般进行批量操作后,一起提交用户关闭会话后,会自动提交事务系统奔溃或断电时会回滚事务使用保存点进行回滚:使用savepoint 保存点后可以 使用 rollback to 回到保存点,控制回到某个节点DML语句…savepoint sp...
2020-01-03 16:53:19 114
原创 Oracle 序列
在oracle中如果需要完成一个列的自增操作,必须要使用序列。(Mysql比较简单)创建语法:create sequence seq_name increment by n 每次增长几 start with n 从哪个值开始增长 maxvalue n|nomaxvalue 10^27 or -1 最大值 minvalue n|no minvalue 最小值 cyc...
2020-01-03 16:52:53 103
原创 Oracle 视图
如果普通用户第一次创建视图,提示没有权限,要使用管理员去修改权限:--创建视图create view v_emp as select * from emp where deptno = 30;--视图的使用select * from v_emp;--向视图中添加数据,执行成功之后,需要提交事务,绿色表示提交事务,让数据生效,红色表示回滚事务,让数据恢复原状态insert into...
2020-01-03 16:52:23 103
原创 Oracle 关联查询
表emp:表dept:表salgrade:92语法查询雇员名称和部门对应的名称:select e.ename,d.dname from emp e,dept d where e.deptno = d.deptno;输出:这种关联查询叫做 等值连接,即两个表中包含相同的列名。查询雇员名称和自己的薪水等级:select e.ename,sg.grade from em...
2020-01-03 16:52:07 252
原创 Oracle 函数
SQL 函数▪函数一般是在数据上执行的,它给数据的转换和处理提供了方便。只是将取出的数据进行处理,并会改变数据库中的值。▪Sql函数可以分为组函数和单行函数。组函数又称为聚合函数-输入多个值,最终只会返回一个值-组函数仅可用于选择列表或查询的having子句单行函数-输入一个值,输出一个值单行函数: 字符函数:--字符函数--concat:表示字符串的连接 等同于||sel...
2020-01-03 16:51:50 246 1
原创 排序算法 (Java)
时间复杂度 Big O算法花费时间随着问题规模的扩大的变化不考虑必须要做的操作:循环、赋初值、程序初始化…;不考虑常数项;不考虑低次项;一般时间复杂度都是“最差”的情况E.g.:访问数组某个位置的值: O(1)访问链表某个位置的值: O(n)求数组平均数:O(n)选择排序 SelectionSort最简单最没用: O(n^2), 不稳定找到最小的数的位置(索引)...
2019-12-24 17:31:54 103
原创 Oracle 数据库入门
数据库作用:数据持久化使用Oracle数据库必须开启的服务:第一次使用CMD打开:设置 scott 密码为 root 并使用 scott 登录。测试SQL:常用命令:a) sqlplus1.sqlplus /nolog2.conn scott/root@orcl3.show user4.set linesize 1505.set pagesize 206.passw...
2019-12-18 21:18:56 209
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人