自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(116)
  • 问答 (1)
  • 收藏
  • 关注

原创 java单元测试简介(基于SpringBoot)

通常,在我们写单测时,会遇到被测试类与外部类有依赖的时候,尤其是与数据库相关的这种费时且有状态的类,很难做单元测试。特点:该对象是一个mock对象,其行为已经和原始对象不同,其public方法返回值已被mock,基本对象返回初始值,包装类型返回null。当测试的单元依赖这个mock对象的返回值时,我们可以通过提前申明这个函数的返回值来测试各种各样的场景。存根也可以设置回调函数,在回调函数中,我们可以获取到对应方法调用时的入参,以及返回值。除了实例方法,mockito还可以mock静态方法,具体使用如下。

2023-03-05 23:03:18 440

原创 AlpineLinux配置宽带拨号上网

alpha中配置 ppp 拨号上网是相对简单的,主要参考wiki中的内容,但我在实践中发现,wiki的内容操作完毕后还是无法上网,所以来记录下完整正确的操作步骤。

2022-08-16 21:22:43 914 1

原创 记录一次ClassNoDefException解决方案

这里写自定义目录标题问题原因解决jar包问题静态工具类使用报错问题原因一般出现这个错误,伴随的错误提示会这样:java.lang.NoClassDefFoundError: Could not initialize class之后会指明出现错误的class产生的原因是在编译时找到了对应的class,但运行时没找到(或者说没能初始化出来)。解决一般两种可能jar包问题jar包损坏或者没加载到classpath中这种需要重新下载jar包静态工具类使用报错这种更常见一些,是由于该工具类中有部

2020-12-22 20:52:27 839

原创 java中的浅拷贝与深拷贝

java中的浅拷贝与深拷贝浅拷贝实现方法:要拷贝的类,实现Cloneable接口,然后重写clone方法,即可实现浅拷贝。但缺点在于,如果该类的成员包含其他类,则其他类并没有被拷贝,只是拷贝了一个引用对象,其指向的地址和之前的对象一致,因此,修改people1的宠物信息,people的宠物信息也变了。package cn.flycold.深浅拷贝.浅拷贝;import lombok.A...

2019-11-27 20:25:06 313

原创 lombok @Builder注解

lombok @Builder注解作用@Builderpublic class Card { private int id; private String name; private boolean sex;}使用:Card card = Card.builder().id(10).name("dasd").sex(true).build();优点不需...

2019-04-10 20:19:23 34063 5

原创 哈希表的实现

哈希表的实现何为哈希表简单来说,哈希表是一种存储结构,它存储的数据是 key:value 类型的。通过空间换时间的方法来加快查询速度,具体思想是如下:使用一个较大的一维数组存储value,这个数组为Array实现一个哈希函数,使得hash(key)的值在上一步的一维数组下标范围内如此,对于任意的key:value,使用hash(key),之后就可以知道value在数组中存储的下标,存取...

2018-10-09 20:17:14 510

原创 FormData以及原生Ajax上传图片

Ajax对于表单提交来说,是一个很好的工具,他提供了异步提交的效果,这使得用户提交表单时不需要刷新页面就可获知提交成功与否,但一直以来,网上的示例大都是JQuery上传的教程,原生Ajax似乎并不受大家热爱,更别提原生Ajax上传图片的教程了,本篇将为你讲述JavaScript中使用FormData上传文件的教程FormDataFormData对象用以将数据编译成键值对,以便用XMLHtt...

2018-06-20 20:29:20 5595

原创 ECharts——一款特别好用的javascrip统计图插件

ECharts官网的内容已经非常详细了,我就不再赘述。下面写写我使用时遇到的问题:饼状图无法添加标题: 实际上也是设置title字段,只是这个字段是在option下而非series下(刚开始大意了)饼状图添加内容百分数显示:tooltip : { trigger: 'item', formatter: "{a} <br/...

2018-06-11 10:42:59 3016

原创 mako模板基础

mako模板算是Python里面比较出色的一个模板了,它宣称有比Jinja2更快的解析速度已经更多的语法支持,本篇博客对它的使用做一个小结。安装使用pip可以方便的安装# 无需root权限,安装到用户目录下 pip install mako --user #python2pip3 install mako --user #python3使用Template通过f...

2018-06-03 22:01:58 7267

原创 凤凰os安装super su

最近得知凤凰os,给自己平板也装了个这个系统,感觉蛮不错的,系统的tty1有root权限,但是安装的apk却没有root权限,直接安装super su提示su文件被占用,原因是系统自带的su文件动手脚了,只能给tty1用,我们的解决方法就是下载官方的su文件。遂寻找解决办法,参考网络,方法如下: 1. 去官网下载zip包。解压到本地。假定解压到了/sdcard/Download/su/ 2. ...

2018-05-08 10:55:55 5702

原创 浅析WSGI

关于Python的web application,可以参考PEP-3333。另外,我还找到了一篇翻译,英文有困难的童鞋可以点这里。WSGIPython Web Server Gateway Interface,翻译过来时Python web服务器网关接口,实际上就是一种协议,我们的应用(Django,Flask)实现了WSGI,就可以配合实现了WSGI(uWSGI,gunicorn)的服务...

2018-05-04 13:58:49 3209

原创 Python异步IO

本文是我看了http://python.jobbole.com/88291/后加上自己的一些感想所创我们都知道,IO比CPU慢很多个数量级,而传统的IO,是阻塞型的,CPU花在等待IO上的时间很多,那么想要提高并发量,选择解决CPU在等待IO上花费的大量时间是一个比较好的出路。 先来看一个阻塞型IO的例子。同步阻塞下载程序该脚本的功能是下载10个网页。import s...

2018-04-24 23:53:57 552

原创 Python推导式

Python中一共有三种推导式,做一个简述。 推导式的结构开始符号 处理结果 迭代对象 过滤条件 结束符号列表推导式读取输入的内容并转成整数。[int(x) for x in sys.stdin.readline().split() if x != '\n']开始符号:[ 结束符号:] 处理结果:int(x) 迭代对象:for x in sys.stdin.read...

2018-04-22 10:23:44 356

原创 Python实现累加函数

这个需求比较奇怪,要求实现Sum和MagaSum函数,实现以下功能Sum(1) =>1Sum(1,2,3) =>6MegaSum(1)() =>1MegaSum(1)(2)(3)() =>6实际上Sum就是Python自建的sum函数,它支持变参,变参怎么实现,自然是*args,所以很容易写出雏形: Sumdef Sum(*args): count = 0 for i in

2018-04-15 20:50:14 63111 1

原创 Python装饰器

很多时候,我们需要对已经实现的功能进行扩展,即增加新的功能,那么,最容易想到的就是就是对原有功能进行修改,这个时候免不了要修改原始代码,但面向对象编程的一个思想是开放封闭原则,即:开放:对扩展开发封闭:对已实现的功能模块已实现的功能可以被扩展,不能被修改需求来了现在有一个函数def do(msg): print("do %s..." % msg)现在要...

2018-04-10 18:20:13 317

原创 Python闭包

本文需要您有Python变量查找的知识,如果您不知道,可以参考上篇博文Python变量查找LEGB原则 构成闭包的条件外函数中定义了内函数内函数使用了外函数的变量外函数的返回值是内函数的引用以下是一个简单的闭包的定义def outer(): b = 1 def inner(): #外部函数内定义了内部函数 print(b) #内部函数使用...

2018-04-08 21:02:36 244

原创 在Linux上升级jetbrains产品

实际上很简单,贴上方法。首先,你应该有.desktop文件,这个文件相当于win的快捷方式,通过这个可以找到安装目录。下载最新版本的.tar.gz包解压。譬如我的在/opt/中安装着,那么tar zxf idea.tar.gz -C /opt/把原始的目录重命名,之后把刚解压的修改为新的原始的名字。启动idea,弹框选择从老版本导入配置没问题后就可以把老版本的删除了

2018-04-08 20:05:14 671

原创 Python变量查找LEGB原则

两种类型首先要知道Python的基本数据类型分为2种,可变以及不可变类型。 可变类型list dict set 不可变类型 number tuple string变量访问LEGBL-Local(function);函数内的名字空间E-Enclosing function locals;外部嵌套函数的名字空间(例如closure)G-Global(module);函数定...

2018-04-08 14:39:42 1721

原创 Python __call__ 方法

这篇博文比较简单,就不分那么多的层次。 实现了__call__方法的对象,相当于重载了(),可以实现调用功能。 egclass A(): def __call__(self,name): print("%s is running!" % name)>>> a = A()>>> a("people")people is ...

2018-04-01 21:52:52 11086

原创 Python元类

python中的类type这个方法有什么用?首先纠正一个错误,type并非一个方法,而是一个类(扎心了老铁)。>>> type(dict)<class 'type'>>>> type(type)<class 'type'>>>> type(object)<class 'type'&am

2018-03-31 21:16:43 337

原创 实现Linux tail -f功能

循环这个比较好像,不停的去读文件,读到就打印出来f = open('a','r')print(f.read(),end='')while True: try: print(f.read(),end='') except KeyboardInterrupt: f.close() breakCPU占用100%,不是一个...

2018-03-28 22:29:31 5327 3

原创 编程题-magic操作

背景出处:2018今日头条实习生笔试题4 原因是我的代码通过率只有30%提示时间超限,但是没时间去修改了,所以很不甘心,写出优化后的代码。magic操作给一个包含n个元素的集合a和包含m个元素的集合b,定义一magic种操作,从一个集合中取出一个元素放入另一个集合中,使得两个集合的平均值都变大了。问一共可以进行多少次magic操作。分析要达到magic操作,那么取出的...

2018-03-25 14:23:25 974

原创 编程题-求最长递增子序列的数量

最长递增子序列的数量出处:今日头条内推一面编程题题目:有一个无序数组,现需要你找到最长的递增的子序列的个数。eg1: 1 2 4 3 5 最长的递增子序列是 1 2 4 5 和 1 2 3 5,所以应输出2。 eg2:1 1 1 1 1 输出5,即是5个长度为1 的 1思路我们从数组下标为0开始,0下标时,包含当前位置的最大长度只能是1,并且次数是1,下标为1时,包含1下标的最长递

2018-03-25 11:00:43 1514

原创 彻底搞清Python协程

基础协程实现方法协程的实现主要靠的是yield关键字,yield的作用挂起当前函数,将yield后面的值当做返回给调用生成器的地方;能够在唤醒生成器函数的时候,回复代码继续紧接着从上次执行的地方执行(可以接受额外的参数)def func1(n): for i in range(n): print('func1:before yield,i=%d' % i)...

2018-03-20 14:33:48 546

原创 观察者模式以及Python3的实现

何为观察者模式例子引出问题现在有一颗苹果树,以及两个人,一个是负责种树的人,一个是负责吃苹果的人。如果苹果树病了,种树的人要去治疗树,否则什么也不干;如果树结果了,吃苹果的人要去吃,否则什么也不干;那么如果苹果树的状态发生变化,种树者和食果者都要去得知树的状态,决定自己是否该行动。但是,两个人都不可能知道什么时候树产生变化,而时时刻刻去查看树的变化显然是不理想的。解决...

2018-03-13 16:00:46 1143

原创 Python变量赋值,浅拷贝,深拷贝区别

从C说起在C语言里,普通变量进行赋值,赋的是值,数组赋值,赋的是地址 egint a = 10;int b = a;==>a=b=10a = 20;==>a=20≠b=10char c[10] = "apple";char *d = c;==>c=d->"apple"c[0] = 'b';==>c=d=>"bpple"在Pyt..

2018-03-12 22:32:41 370

原创 编写Python3的C扩展

为何要编写C扩展保护核心代码解决性能瓶颈创建C一些特有的东西环境:Linux .13.9-300.fc27.x86_64Python 3.6.3开始目标这次我么来实习制作Python3的扩展,实现两个功能:求一个整数的绝对值求一个字符串的逆序用c实现这个功能:int my_abs(int n){ if(n<0) ...

2018-03-11 22:17:36 3750

原创 python函数参数

Python函数参数默认参数def func0(name='lyt'): print(name)func0();-->lytfunc0('zxw')-->zxw一个坑点由于默认参数在函数定义第一次被解释器解释时,便计算出了默认参数,因此,如果默认参数是可变类型(列表,字典),则可能不会按照预期的想法进行。def func1(l = []...

2018-03-08 16:00:34 188

原创 部署在腾讯云上的APP不能发邮件了?可能是你的25端口被禁了

起因最近遇到个问题,我的web app经常会504,经过我的分析,504的页面都有一个特性就是会给用户发邮件啊,不过app以前还好着,怎么突然坏了呢,最后百般求证,发现是腾讯云的问题。腾讯云公告 都怪自己没有留心看消息,直接忽略,栽了大坑。解决办法点进去自己填写信息就好了。...

2018-03-01 09:01:31 3890

原创 python住你微信跳一跳拿高分

前言最近微信的跳一跳很火,大家看到排行榜上几百上千的分数,再看看自己百分左右的分数肯定很难过,我手残怪我吗?没关系,如果你跟着我来,也能让你分数霸榜。原理首先大家是有一个直观感受,根据两个箱子距离的不同,需要按压的时间也是不一样的,一般来说,一个大胆的猜测是按压时间和距离是成正比的。这是我们的工作原理:在跳一跳页面截图计算出初始点和终点的距离想办法测出距离与按压时间的系数想办法让手机按压指定

2018-01-04 20:54:33 3227 1

原创 Python特性学习——可迭代对象,迭代器(重新修正)

以前学习python都是马马虎虎,导致很多特性只是知道完全不会用,现在将他们重新学习可迭代对象(Iterable)简单来说,所有可以放入for循环中的对象都是可迭代对象,如列表,元组,字符串,字典…如何判断对象是否是可迭代对象?实际上,只要实现了__iter__方法的对象就是可迭代对象,这个方法用来返回迭代器本身(特别重要)。 eg:>>&gt...

2018-01-02 19:16:42 869

原创 按钮问题

题目现有两个按钮,按下按钮0会执行2x+1,按下1执行2x+2。x初值为0,现要求出任意正整数n应使用何种按法使得x能变成n。大眼一看这题就是遍历啊,找所有解法,但是不同于别的简单题,需要你有一个顺序去遍历。递归呗。使用深度优先搜索。 具体如下。#include<stdio.h>#include<stdlib.h>int success;int max(int s){ int n =

2017-12-24 20:49:00 496

原创 redis源码分析(3)——redis链表

定义adlist.htypedef struct listNode{ struct listNode *prev; struct listNode *next; void *value;}可以看出,redis的链表是一个双向链表,拥有前驱和后继,数据域为void型指针,意味着数据域可以指向需要的类型。管理链表adlist.htypedef struct list{

2017-12-24 20:31:44 340

原创 单链表找交点

两个可能相交的单链表,找出他们的交点模型heada1 a2\ / \ / \ / | | | | tail注意是单链表,所以他们的形状会是Y型而非X型。分析首先,最简单的一种方法是遍历,只是时间复杂度特别高。 简单来说,这两条链表的相交前长度都是不同的,但相交后的长度一致,那么只要想办法让他们从后往前遍历,就很容易找到交点。 - 存数组

2017-12-21 17:56:11 703

原创 redis源码分析(2)——SDS API详解

源码分析章节,我尽量使用原生的redis源码,不去看黄建宏的注释,提高自己阅读源码的能力,此外,redis版本还是3.0 源码下载,大家可以到这 http://download.redis.io/releases/sdsnewtypedef char *sds;sds sdsnewlen(const void *init, size_t initlen) { struct sdshd

2017-12-19 22:48:51 550

原创 redis源码分析(1)——简单字符串的实现

本系列所有文章基于《Redis设计与实现》学习而做的随笔,以后不再赘述c语言的字符串首先,我们都知道,Redis是用c语言实现的,而c语言,有个很大的弊端,那就是没有原生的字符串,字符串,是使用字符数组实现的。 基于这个原因,我们可以分析一下c字符串的缺点。 1. 字符串的拼接需要提前判断空间是否足够,否则可能造成缓冲区溢出。此外还必须进行malloc分配内存占用大量系统资源。 2. 字符串

2017-12-18 22:56:14 327

原创 servlet获取请求参数

get、post很简单,直接request.getParameter(“name”)其他方式例如delete,put。 如上的方法可能无法获取,找到的原因说可能是tomcat api的问题。 解决办法:BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));String s

2017-12-11 22:05:56 1920

原创 使用redis仅保存最新的token并分析redis存储结构

背景最近在学习restful api的开发,遇到这样的问题,书上使用itsdangerous生成token,但是同一个用户可以短时间内生成多个token,而这些token在有效期内都是可以使用的。现在就是要实现的需求是仅最新的token有效。老的token失效。说明假设一共开发了三种客户端:WEB,ANDROID,IOS,同一种客户端的token只保存最新的一份。思路使用数据库保存token,每次生

2017-12-04 17:03:36 12496 2

原创 masm汇编之——过程与宏的区别

定义方法宏格式:宏指令名 MACRO 形参 · · · (宏定义体) ENDM调用 宏名[形参] 作用:MASM.EXE会将调用到宏的地方用宏定义体完全替换。定义宏的地方不会生成机器码。 过程格式:过程名 PROC [NEAR/FAR] · · ·

2017-12-03 00:04:27 3283

原创 HTTP AUTH验证

何为http auth?http auth是一种基础的用户验证,原理是将用户名:密码base64加密后放在http的请求头部Authorization 发给服务器。浏览器的做法当你访问一个需要http auth验证的资源时,web server会去检查你的http请求头并且比对帐号密码,如果不成功就会相应的所请求的资源,否则就会返回401,浏览器在接收到401时会自动打开一个登陆窗口让你登陆,点击提

2017-11-27 19:46:29 15938

空空如也

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

TA关注的人

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