自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 短时间内完成树莓派循迹,避障,远程控制小车(python)

在这次寒假,我迎来了我的毕业项目—树莓派小车。一个没有学过python(本人是学java的java小白),不了解树莓派的我头皮发麻。但也只能接受现实,慢慢从网上开始学习,看各种视频,好在通过学习之后可以自己完成了。但是,苍天啊,我走了很多很多弯路。真的是“没文化,真可怕”。废话少说,我就是想整理分享出来,希望你们可以在我这里找到大部分资料,走捷径。我将分为以下几篇来介绍:准备篇(介绍你需要准备什么硬件,需要什么样的开发环境)配置篇(配置无线网,静态IP,摄像头)基本运动篇(控制小车基本运动(带调速

2020-06-18 16:09:09 9998 13

原创 常常常用命令(shell and sql)

常常常用操作

2023-10-19 16:10:38 92

原创 SpringBoot单元测试没有执行按钮

搜了一些说是Idea的Junit插件被禁用了,但是我的是开启的,还是没有最后,发现启动类和方法修饰符是默认修饰符,全部改成public就行了。

2022-05-11 15:30:03 366

原创 设计模式——装饰者模式

定义动态地将责任附加到对象上。 (扩展功能,装饰者是比继承更有弹性的替代方案)了解装饰者的实现过程1.现有一个组件(对象),需要增加它的行为2.采用装饰者模式扩展它。3.首先是定义一个装饰者继承组件的父类接口,让装饰者获得与被装饰对象同样的类型。这里的目的不是继承被装饰者的行为。4.因为装饰者需要代替被装饰者,所以它们必须是同一类型,这对使用者来说,总是用的同一类型,几乎没有任何变化。5.装饰者中的行为是如何来的?是通过组合装饰者,得到了装饰者的行为。如: public clas.

2021-08-06 10:25:23 178

原创 设计模式的藏宝图,请收好

策略模式

2021-08-05 17:39:39 166

原创 设计模式——观察者模式

观察者模式1定义: 定义了对象之间一对多的依赖关系,当一个对象改变状态时(主题对象),它的所有依赖者都会收到通知并自动更新(观察者)。2.设计原则: 为了交互对象之间的松耦合设计而努力。3.松耦合的体现: (1)主题对象只知道观察者实现了某个接口,而不知道具体的观察者是谁,做了什么或者其他的细节。 (2)任何时候都可以增加,删除新的观察者。主题对象不受影响。 (3)可以独立的复用主题对象或者观察者。 (4)改变任何一方,另一方都不会受影响。设计实现观察者模式:1.一般主题接口.

2021-08-05 17:12:46 96

原创 重识设计模式

认识模式模式是在某情境下,针对某问题的某种解决方案。模式的特性模式应该具有通用性,可行性,普遍性。 【1】对于普遍重复发生的问题,模式应该能够很好地且轻松地处理这些问题。 【2】而不是针对一个重复发生的问题,仅仅能够达到解决问题的目的。 例如:经常会把车钥匙锁在车里,砸窗户拿到钥匙并不是一个每次都好用的方案。“砸窗户”不能被称为一个模式。 【3】使用模式,也需要看模式的‘成本’,和它能够带来的效益。模式只是一种设计思想,指导方针,需要的时候,可以对它做出必要的修改。模式的类.

2021-08-05 09:52:59 87

原创 没想到鹅哥的爱情故事,可以让你学废几个设计模式。

这里将用一个案例来展现模式的之间的携手合作(看过Head First设计模式的应该知道这个例子。)如果学习设计模式的话,建议看这本书,写的很有趣。案例介绍(稍有变化)1.有一群鸭子(拥有可以呱呱呱呱叫的行为),传说有一只鸭妹美若天仙。2.有一只理想远大的鹅(鹅哥,拥有嘎嘎嘎嘎叫的行为),但是它想将自己伪装成鸭子,混入鸭群(因为它看上了那个鸭妹子。) 鹅哥用什么方法【1】可以先接近鸭妹子呢?3.鹅哥成功混入,但是好景不长,主人开始发现不对劲了,原因是他竟然采用了一种方法【2】,可以统计真正鸭.

2021-07-30 22:53:51 6125

原创 设计模式——代理模式

Java RMI(Remote Method Invocation)远程方法调用

2021-07-22 16:22:34 136

原创 设计模式——状态模式

定义允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。【1】具体做法 将某个事物的各种状态都定义成一个类,每个类都拥有具体事物的行为,这些不同状态内部的方法对应着该状态下应有的行为。剖析状态模式实际上的做法是,由于某个事物的行为会随着自己状态的改变而改变,为了扩展,做法不再是根据状态的不同,让事物本身去改变行为。这个时候,将状态都定义成一个类,同时具有着该事物的每个行为。就像是这个事物在每个状态下都有了自己的一个分身。当外界需要某个状态下对应的行为,不是事物本身变来.

2021-07-21 08:23:09 79

原创 设计模式——迭代器模式+组合模式

定义实现迭代器提供一个接口Iteratorinterface Iterator{ hasNext(); next();}然后各种对象集合只需要实现自己的迭代器即可。eg:ArrayList的迭代器底层会调用size(),get()来完成遍历 数组的迭代器会使用数组的length属性以及[]来完成遍历作用迭代器模式封装了对各种集合的遍历操作,让其他对象在遍历不同的集合时,可以使用迭代器,从而减少重复代码。eg:若是没有迭代器 那么如果在一个方法中需要遍历Array.

2021-07-08 14:56:09 123

原创 设计模式——模板方法模式

定义在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类在不改变算法结构的情况下,重新定义算法中的某些步骤。特点模板方法定义了一个算法步骤,并允许子类为一个或多个步骤提供实现。eg: public abstract class Template{ //将模板方法定义成final类型,不希望子类覆盖改变 //这是基类提供的一个模板算法(步骤),是固定的,希望其他类可以遵循 void final templateMethod(){ a(); b(.

2021-07-01 11:11:25 87

原创 设计模式——适配器模式+外观模式

适配器模式定义 将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。原理适配器通过实现目标接口,将自己包装成真正需要的类型,而在内部通过组合被适配的类型,表面调用的是目标类型的方法,实际上是由被适配类型方法实现的。eg: //实现Enumeration的接口,让自己表面上看着是一个Enumeration public class IteratorAdapter implements Enumeration { //组合被适配者 I.

2021-06-30 14:01:02 111

原创 设计模式——命令模式

定义将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。要点:1.命令模式将发出请求的对象和执行请求的对象解耦2.它们通过一个对象命令来进行交互,命令对象封装了接受者和一个或一组动作。3.可以使用宏命令来指定多个命令,一次调用一组指定的命令。代码示例1.如何解耦发送者和接受者? 在代码中,遥控器和各种装置(如:灯,门,风扇...),通过Command对象解耦。遥控器中传入了Command命令,提供一个方法(如:execute.

2021-06-28 16:39:15 70

原创 设计模式——单例模式

定义一个类只能有一个实例应用线程池、日志对象、缓存等。需要让这些对象在整个程序中只有唯一的实例,保证所有访问它们的对象得到的都是同样的数据。懒汉式单例模式(斗王级别)//懒汉式public class LazySingleton { //懒汉式,开始不实例化,等到用的时候再实例化 //保存唯一单实例 private static LazySingleton singleton ; //私有构造 private LazySingleto.

2021-06-25 16:10:10 99

原创 设计模式——工厂模式

所有的工厂模式都是用来封装对象的创建。定义工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类将实例化推迟到子类。简单工厂和工厂方法的区别:1.简单工厂: 在一个类中完成对所有示例的创建,完成各种类型产品的创建。2.工厂方法: 在抽象类中定义创建对象的抽象方法,让子类继承自己实现创建自己示例的方法。依赖倒置原则:(倒置:指和一般的oo设计思考方式完全相反) 要依赖抽象,不要依赖具体类 避免违反依赖倒置原则的方法: 1.变量不可以持有.

2021-06-24 15:54:03 142

原创 RocketMQ可以启动成功,但是并不存在~/logs下的日志文件

主要是针对RocketMQ启动成功之后,并未生成以下命令中的日志文件。关于安装和部署就不介绍了。版本:RocketMQ 4.8.0环境:macos//执行以下命令时提示文件不存在tail -f ~/logs/rocketmqlogs/namesrv.log之后查看nohup.out文件中输出,已经namesrv已经启动成功。网上搜索该问题时,发现没有相应的解答。之后我看配置文件中有一些{user.home}的字样,看了下自己的mac的hostname变成了bogon,估计就是这个问题。.

2021-05-25 11:48:02 2703 3

原创 MAC新版idea file下的settings去哪了?

新版的idea原来file -> settings正确的寻找方式:点击下面标出来的,发先了新世界:这东西真的是找得我好苦啊,之前搜索很多人说新版的idea settings用New project settings里面的,但是我最近写项目发现并不行。......

2021-02-25 23:41:30 16461 11

原创 mysql——查询性能优化

为什么查询会慢?1.对于查询的快慢,一个重要的影响指标是响应时间。2.若将查询看成一个任务,那么它由一系列的子任务组成,每个子任务都会消耗一定的时间。3.优化查询,就要优化子任务,要么消除一些子任务,要么减少子任务的执行次数,要么让子任务执行的更快。4.查询的生命周期: 查询的生命周期大致可以分为: (1)从客户端到服务器 (2)服务器解析,生成执行计划 (3)执行,返回结果给客户端 执行是整个生命周期的重要阶段,又可以分为: (1)为了检索数据到存储引擎的大量调用 (2.

2021-02-04 15:46:37 457

原创 i不知道的SQL语句的积累(sql函数的使用)

case…when…then简单的case函数: case sex when '1' then '男' when '2' then '女' else '未输入' endcase搜索函数: case when sex = '1' then '男' when sex = '2''then '女' else '未输入' end;case...when...then 使用场景:#有user表如下:id name sex1 张三 12 李四 13 .

2021-01-14 16:41:06 145 2

原创 理解Shell(马马虎虎)

shell是一种CLI(command - line interface,命令行界面),是一个时刻都在运行的复杂交互式程序。shell的类型:在/etc/password文件中,在用户ID记录的第7个字段中列出了默认的shell程序。(每个字段之间用:分割)只要用户登陆到某个虚拟的控制台终端或者在GUI中启动终端仿真器,默认的shell就会开始运行。一般情况下:默认的是bash shell//(还会有另一个默认的shell是/bin/sh,作为默认的系统shell,用于那些需要在启动时使用的.

2020-12-11 14:44:19 127

原创 比较干巴的Linux基础命令总结

默认bash shell提示符:$(提示该状态下是等待用户输入)bash手册:man命令可以用来访问存储在Linux系统上的手册页面。使用man+工具名称就可以看到相应工具的手册。eg:man ls //查看ls命令的手册,读完手册之后,按q退出。各种基础常用命令:基础命令//绝对路径/home/pi/xxx//相对路径,当前就处于/home/pi,直接cd xxx就可以进入xxx目录cd //切换工作目录pwd //显示当前工作目录. //单点符:表示当前目录.. //双点符:.

2020-12-09 17:17:11 119

原创 idea中将一个工程复制启动多次

一般在学习微服务spring cloud练习时,我们会将一个服务启动多次,注册到Eureka中。这时我们需要将一个工程复制,启动多次。下面介绍下如何在idea中进行同一工程的复制并启动。一个服务启动多个,先将需要运行的服务启动一次,然后点击绿色三角启动图标旁边下拉三角+然后可以看见 Edit Configurations(编辑配置),点击:点击之后会弹出如下界面,选中你想要复制的Application:点上图击圈出来的复制图标,在右边将会跳出出现以下界面:在该界面可以修改启动类 的名字Name

2020-11-11 10:10:09 1243 1

原创 解决idea连接github总是timeout的问题

最近在idea中尝试将自己的项目分享到github时,总是出现timeout或者refused的情况,搜了下,有的人建议将Host从默认的github.com 改为https://github,com/,我尝试之后,还是容易出现timeout的情况,最后观察发现有个Connection timeout的参数,这个应该就是你连接时,超过一定的时间,idea就认为连接超时了,就报出timeout。这个默认是5000ms,也就是5s,连接国外网站本来就慢,肯定耗时,所以我就将这个值改成10s,你可以设置成你想要的

2020-11-06 11:46:58 6605 2

原创 通过镜像二叉树算法来理解递归

对于刚接触算法或者说程序的同志来说,递归是比较难理解的(可能本人比较菜,很长时间可没能理解好递归,一直迷迷糊糊的)直到做二叉树的这两个算法题,我才对递归有了那么一丢丢的理解,我整理分享出来,希望对一些人有帮助。一般大家接触递归都是从阶乘开始的,我也不例外,当时听老师讲了递归,然后又写了阶乘函数来理解递归,但是我虽然有了一定概念和这种思想,但是就是没明白更深层的,比如函数是怎么返回的?怎么就一步步的将结果返回了呢?比较神奇。我们就先从与二叉树相关的两个算法题开始讲解,最后再回归到最开始学的阶乘函数。.

2020-10-20 12:44:07 267

原创 树莓派小车————基本运动篇

在完成小车每一个小功能时,第一步要了解原理和电路连接方式。之后才能开始编码控制。这一篇就来讲解小车的基本运动功能,即前进、后退、左转、右转、停止。(当然你也可以自己添加,左后转和右后转)该部分用到的硬件模块:步进电机、橡胶轮、L298N电机驱动板、树莓派、12V的锂电池组、杜邦线若干。电路连接焊接电机上的线这部分焊接比较简单,如果你买的步进电机上的线已经连接好,就不需要焊接。如果没有焊接线,找两根颜色不一样的线焊接上就行,最好是红色和黑色,因为两根线代表正负极。往电机的两个铜片孔中焊接正负极

2020-06-18 16:11:05 10143 31

原创 树莓派小车————循迹篇

所谓的循迹就是让小车识别导引线,跟着导引线运行,在导引线组成的赛道上运行。循迹可以用红外传感器或者摄像头完成。我选择的是用红外传感器进行黑线循迹。该部分主要涉及到的硬件:两个红外循迹传感器(型号见准备篇)、树莓派。额外材料:准备点黑色电工胶布,制作一个跑道。两个红外传感器循迹缺点:无法完成对十字路线的正确识别。(如果你想让它可以识别十字路线,需要三个传感器,具体实现可以搜索)。下面我讲解两路循迹如何实现。电路连接:如果你用的循迹传感器和准备篇的中的一样,它共有四个引脚,分别是VCC、GND、A0

2020-06-18 16:10:54 15152 10

原创 树莓派小车————准备篇(硬件构件和开发环境)

硬件准备:树莓派开发板(最好3B+或者4B)L298N电机驱动板(1个或者2个)DC3V-6V直流减速电机TT马达(4个)2轮四驱车智能车橡胶轮(4个)4WD驱动双层小车底盘DIY套件红外避障传感器(2-3个),红外循迹传感器(2-3个),超声传感器(1-2个)摄像头(USB摄像头或者树莓派摄像头)锂电池组(给L298N电机驱动板供电)树莓派电源扩展板(给树莓派供电,树莓派电源要求比较严格,必须到达标准,或者你可以用移动电源)树莓派T型扩展板高级面包板(和树莓派T型扩展板配合使用.

2020-06-18 16:10:38 4434 4

原创 树莓派小车————配置篇(WIFI,静态IP,摄像头)

在进行树莓派开发之前,配置还是比较重要滴,同志们。需要让他可以自己连接WiFi,这样跑起来的时候,才自由,而不是放风筝。(你的车要是撞了不能怪我)也需要配置静态IP,不然每次IP都会变,在连接的树莓派之前每次你都得查一次树莓派的IP。配置摄像头是为了最后可以使用OpenCV调用摄像头实现实时视频传输。无线配置:1.将树莓派和路由器连接,而后电脑也是。2.打开树莓派,用Advanced_IP_Scanner这个工具来查找树莓派IP(后面写的有raspberry pi的就是树莓派IP)3.通过put

2020-06-18 16:10:26 3014

原创 树莓派小车————全部代码

#coding=utf-8import RPi.GPIO as GPIOimport timefrom Tkinter import *from PIL import Image,ImageTkimport tkFileDialog as filedialogimport cv2import threading#定义电机模块的GPIO口PWMA=18 #调速端A(左)IN1=11 #左前IN2=12 #左后PWMB=16 #调速端B(右)IN3=13 #右前IN4=15 #右后

2020-06-18 16:10:06 14594 11

原创 树莓派小车————远程控制

这里所说的远程控制,是指一台PC通过一个界面可以达到控制并监视小车的目的。当然你也可以设计红外遥控,蓝牙等方式。在设计界面时我选择了python自带的GUI工具————Tkinter。选择Tkinter是因为它简单,写完直接运行就行。我们只需要通过VNC或者Windows远程桌面连接到树莓派,运行代码,就可以在PC上控制小车。你自己也可以选择HTML来完成。做一个web页面。相关的自己可以去搜索。控制界面带一个视频传输的接口,在这次我选择了用OpenCV调用树莓派摄像头来实现实时的视频传输。代码

2020-06-18 16:09:54 4831 13

原创 树莓派小车————避障篇

避障模块的功能就是让小车能够检测到障碍物并且可以正确的避开障碍物。当然避障的方式有很多种。我选择的是超声波结合红外传感器来避障。为什么要用超声波传感器结合红外传感器?因为硬件原因,没有舵机,原本超声波可以安装在舵机上,通过舵机转动,让超声波检测周围障碍物,我们可以设置舵机转动的角度,最大程度减少超声波检测的盲区。我在设计的时候提前没有想到要舵机,所以后来也来不及了。我的超声波传感器固定在了小车的正前方,只能检测到正前方的障碍物,左右两边的障碍物超声波无法检测,所以我只能在左前和右前两个位置安装了两个

2020-06-18 16:09:26 12562 4

原创 socket通信模拟客户端服务器模式

创建客户端从键盘录入数据,并发送,创建服务端接受数据,并输出到控制台客户端代码import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter...

2019-11-03 23:31:47 203

原创 多线程之生产者和消费者模型

生产者-消费者问题简单描述:即生产者生产一种商品,消费者来消费这类商品。假如:存放商品的仓库容量有限,生产者就不能不停的生产商品,他得等待消费者消费商品。而对于消费者而言,在生产者没有生产任何商品时,不能消费。下面以一个线程设置某个学生的属性,而另一个线程来读取属性值来模拟生产者和消费者模型。先创建操作的资源类(学生类)public class Student { String n...

2019-11-03 22:30:51 187

原创 字符串打印

如:输入1a2b3c。打印为abbccc在一开始写这个时将字符串转换成字符数组处理,后来发现无法将字符转换成int类型,直接转换,会变成字符对应的ascll码值。最后又查找了API,发现Byte的parseByte(String s)方法可以将一个字符串的数字转换成十进制。又找了可以截取字符串,又能返回一个Sting的函数substring(int i,int j),从i开始截取,不包含j代...

2019-11-03 19:45:53 1364

原创 java基础知识总结之简单工厂模式和工厂方法模式

设计模式的分类创建型模式:创建对象结构型模式:对象组成行为型模式:对象的功能简单工厂模式就是对象的创建交给工厂类来做,自己不负责类的创建代码:public class Fruit { public void show() { System.out.println("水果"); }}public class Apple extends Fruit{ @Ov...

2019-10-22 19:58:43 83

原创 java基础知识总结之单例模式

面向对象思想的设计原则(6大设计原则)单一职责原则(高内聚,低耦合,每个类只有一个职责)开闭原则(对扩展开发,对修改关闭)里氏替换原则(任何在父类出现的地方都可以用子类代替)依赖注入原则(依赖于抽象,不要依赖具体实现)接口分离原则(不要强迫程序实现他们不需要的方法,一个接口一个功能)迪米特原则(一个对象应该对其他对象尽可能少的了解)怎样构建一个单例模式单例模式:类在系统中只有...

2019-10-22 18:52:43 129

原创 java基础知识总结之与线程相关方法

线程调度:线程调度有分时调度和抢占式调度(java使用)setPriority()和getPriority()设置和获取线程的优先级(java优先级从1-10,仅仅表示线程获取时间片的效率,默认优先级为5)线程控制:sleep(long mills)让线程休眠指定的时间(需要抛出异常)join()等待该线程终止,只有该线程执行完成之后,其他线程才能执行yield()暂停当前执行的...

2019-10-22 17:05:56 79

原创 java基础知识总结之同步机制

synchronized关键字为了解决多线程的线程安全问题,java引入了synchronized关键字来实现线程之间的同步同步代码块:(同步代码块的监视器锁对象可以是任意对象,一般写需要被同步的对象)synchronized(obj){ //需要同步的代码块}obj代表的就是同步监视器对象,就是锁,线程开始执行同步代码块之前必须先获得监视器锁。同步方法(同步方法的监视器锁...

2019-10-22 16:11:42 137

原创 java基础知识总结之多线程安全问题的引入

多线程会存在线程安全问题:导致线程安全问题的原因:是否是多线程环境是否存在共享数据是否有多条语句操作共享的数据当满足上面三个条件就会导致线程安全问题。例如生活中常见的卖票,票是一种共享的资源,将来会有很多窗口来卖这些票代码如下:卖票是多个窗口要同时进行的,所以我们将它设置为将来线程要操作的数据,实现了Runnable接口public class SellTic...

2019-10-22 14:57:41 194

空空如也

空空如也

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

TA关注的人

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