- 博客(52)
- 资源 (1)
- 收藏
- 关注
原创 【微信小程序】(三)订阅消息实现
微信小程序订阅消息指的是用户在你的小程序中进行了一些操作,你的小程序可以在某一个时间点向该用户发送消息,通知用户操作的结果。比如用户想要小程序在某一天通知他去买票,在小程序中授予通知权限之后,小程序在固定的时间点(该天)给用户发送一个通知,通知上写着该买票了。这种订阅消息在各种APP上都有,比如订餐时取餐通知,购物时商品发货通知、收货通知等等。具体效果如下:...
2021-06-19 17:42:14 4296 2
原创 【微信小程序】(二)服务器部署与PHP学习
微信小程序的数据请求分为两种,一种是无需搭建服务器,使用云数据库、云存储、云函数、云托管等云端能力,但是这种比较局限于官方给定的范围,无法随心所欲的对数据进行管理。另一种是自己搭建服务器,定义并实现自己需要的接口,微信小程序通过接口请求数据,从而达到自己的目的。对于服务器,阿里云、腾讯云、华为云都有自己的服务器租赁服务,如果是短期的学习使用,建议按量付费,最低一个月也就几块钱,比较便宜。此处我就以阿里云的Linux CentOS 7为服务器进行部署。并以PHP语言作为后端语言编写端口,算是门槛最低的
2021-06-19 15:31:46 1395
原创 【微信小程序】(一)创建项目与前端编写
首先,编写微信小程序必须知道三个网站: 微信公众平台 小程序代码管理 微信开放文档 1.创建项目 首先进入微信公众平台,扫码登录,选择小程序开发,我们可以看到这样的界面: ...
2021-06-19 15:08:07 4332
原创 【Python】Flask+Gunicorn搭建简单网站
1.安装Flask第三方库pip3 install Flask2.创建Flask应用程序项目结构如上图所示,其中static用来放置静态文件,如js文件、css文件以及图片等,templates文件夹用来放置模板文件,即html文件。在项目中导入Flask第三方库,使用@app.route()语句可以设置路由跳转,此语句下面就是Flask服务器接收到该路径访问时会执行的方法,方法名随意,可以不和路径名相同,但是必须要有返回值,返回值可以使html语句,也可以是html文件,浏览器接收返
2021-04-18 17:25:19 1088 1
原创 【iOS开发进阶】-AVPlayer视频播放
1.AVPlayer介绍iOS提供了多种方法来实现视频播放,包括MPMoviePlayerController,MPMoviePlayerViewController,AVPlayer,AVPlayerViewController等。其中MPMoviePlayerController,MPMoviePlayerViewController在iOS9.0之后被弃用。四种播放方式的区别如下:其中公司内项目使用的是AVPlayer实现视频播放,AVPlayer使用十分灵活,也更加接近底层,但是AVPl
2020-11-14 19:11:00 7092
原创 【iOS开发进阶】-内存管理
1.内存管理模型对于面向过程的C语言而言,其设计的内存管理方式十分直接,内存的申请和释放都由开发者手动处理。这种管理方式简单,但是会大量增加编码过程中的工作量,也会增加代码的复杂度。在面向对象语言中,内存管理通常会由模型机制来完成,常见的有垃圾回收与引用计数两种内存管理模型。Java中的JVM使用的就是垃圾回收管理模型,而Objective-C语言采用的是引用计数的内存管理模型。在iOS程序中,内存通常被分成5个区域: 栈区:存储局部变量,在作用域结束后内存会被回收 堆区:存储O
2020-11-14 18:41:29 308
原创 【iOS开发进阶】-RunTime
1.基本概念编译时与运行时源代码转换为可执行的程序,通常需要经过三个步骤:编译、链接、运行,不同的编译语言,这三个步骤中所进行的操作又有些不同。编译时就是正在编译的时候,即编译器将源代码翻译成机器能识别的代码的过程。编译时知识对语言进行最基本的检查报错,包括词法分析、语法分析等,编译通过并不意味着程序就可以成功运行。运行时就是程序通过编译后,编译好的代码被装载到内存中跑起来的阶段,这个时候会具体对类型进行检查,而不仅仅是对代码简单扫描分析,此时如果出错,程序会崩溃。静态语言与动态语言
2020-11-14 18:22:15 574
原创 Python入门与简易爬虫
一、环境与编译器安装Mac安装:Mac上默认安装了python,直接通过终端输入python或python3就可以看到当前mac上的python版本。Windows安装:Windows上默认没有安装python,需要去官网上下载对应系统的python安装文件:确定好安装目录后,点击进行安装,一切默认即可。最后将安装目录添加到系统内的环境变量中即可。再打开cmd命令提示行,输入python,查看到如下结果即证明安装成功。如果一直无法识别,要么就是路径添加错误,路径中不要有中文或其.
2020-11-14 18:01:15 571
原创 iOS开发基础-宏定义
1.基本概念为了编译优化和方便,以及跨平台能力,宏被大量使用。C中的宏分为两类,对象宏(object-like macro)和函数宏(function-like marco)。对象宏可以理解为查找替换,而函数宏则是接收参数,对参数进行处理后返回相应的结果,和函数类似。宏只对宏定义后的代码起作用,且与定义在哪无关,即使函数不被调用,也可以使用宏。2.宏替换的原则 在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号,如果是,它们首先被替换 替换文本随后被插入到程序
2020-08-23 17:23:20 537
原创 iOS开发基础-NSNotificationCenter(消息中心)
1.基本概念IOS中经常会使用到NSNotification和Delegate来进行一些类之间的消息传递,NSNotification就是IOS提供的一个消息中心,有一个全局的defaultNotification管理应用中的消息机制。里面使用的是一个观察者,通过注册addObserver和解除注册removeObserver来实现消息传递。在类析构的时候,需要removeObserver,不然就会引发崩溃,但NSNotification是一对多的。而Delegate,就是通过增加一个指针,然后把需
2020-08-23 17:16:01 679 1
原创 iOS开发基础-delegate(委托)
1.定义代理设计模式,是IOS中一种消息传递的方式,由代理对象、委托者、协议组成。 协议:用来指定代理可以做什么,必须做什么 代理:根据指定协议,完成委托方需要实现的方法 委托:根据指定协议,指定代理必须完成和可以完成的方法 2.作用 传值(逆向传值) 传递事件 3.传值声明协议:NextViewController.h#import <UIKit/UIKit.h>NS_ASSUME_NONNULL_BEGIN//声明协议
2020-08-23 17:11:14 349
原创 iOS开发基础-属性关键字
目录一.weak二.strong三.copy四.atomic五.nonatomic六.assign七.retain八.readwrite九.readonly在ARC下,不显示指定关键字时,默认为:普通数据:atomic、readwrite、assign普通OC对象:atomic、readwrite、strong一.weak打开ARC时才会使用,相当于assign,可以把对应的指针变量重置为nil。一般用于修饰UI控件,如下图所示:如图所示,
2020-08-23 17:05:22 415
原创 iOS开发基础-Foundation框架
目录一、字符串二、日期与时间三、深复制与浅复制四、集合概览1.NSArray/NSMutableArray2.NSSet/NSMutableSet3.NSDictionary/NSMutableDictionary五、谓词六、文件I/O1.NSDate/NSMutableData2.NSFileManger3.NSPathUtilities4.NSProcessInfo5.NSFileHandle6.NSURL7.NSBundle8.对象归
2020-08-23 16:55:00 833
原创 iOS开发基础-常用组件(下)
目录11.UISegmentedControl(分段控件)12.UIProgressView(进度条)13.UIActivityIndicatorView(进度环)14.UISlider(拖动条)15.UIDatePicker(日期选择器)16.UIPickerView(选择器)17.UIStepper(微调器)18.UIToolBar(工具条)19.UINavigationBar(导航条)20.UICollectionView(网格)21.UITabBar(标签
2020-08-23 16:30:03 794
原创 iOS开发基础-常用组件(上)
目录1.UILabel2.UIScrollView(滚动视图)3.UINavigationController(导航控制器)4.UITableView(表格)5.UIImageView(图像)6.UIButton(按钮)7.UISearchBar(搜索框)8.UITextField(文本框)9.UITextView(多行文本控件)10.UISwitch(开关按钮)组件简介: 经常使用 UIButton:按钮 ·UILabel:文本标签 ·UI.
2020-08-23 16:14:54 944
原创 iOS开发基础-创建项目
一、创建IOS基础模板1.安装软件开发工具:XCode 调试工具:Simulatior2.创建项目3.删除界面设计相关模板4.删除info相关设置5.删除AppDelegate.m中的多余的默认代码6.通用AppDelegate代码AppDelegate.h#import <UIKit/UIKit.h>#import "ViewController.h"@interface AppDelegate : UIR...
2020-08-23 15:53:04 514
原创 基于IDEA的SSM框架搭建
一、环境搭建1.创建Maven项目创建Maven项目,配置Maven仓库:2.pom.xml文件导入依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/...
2020-03-28 17:48:39 209
原创 设计模式——行为型
目录前言一、模板方法模式定义应用场景角色实现二、命令模式定义应用场景角色实现三、迭代器模式定义传统遍历方法解决方法应用场景角色优点实现四、观察者模式定义角色应用实现五、中介者模式定义角色优点实现六、备忘录模式定义角色实现七、解释器模式定义应用场景...
2020-03-21 12:01:19 218
原创 设计模式——结构型
前言设计模式(Design pattern)代表了最佳的实践,是软件开发人员在软件开发过程中面临的一般问题的解决方案。通常根据设计模式所解决的问题性质的不同,将其划分为三大类:创建型、结构型、行为型。具体包括:创建型:简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、原型模式、建造者模式。结构型:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。行为型...
2020-03-20 15:38:41 172
原创 设计模式——创建型
目录前言一、简单工厂模式定义角色特点实现二、工厂方法模式定义角色实现三、抽象工厂模式定义角色实现四、单例模式定义应用实现五、原型模式定义应用实现六、建造者模式定义角色实现引用前言设计模式(Design pattern)代表了最佳的实践,是软件开发人员在软件开发过程中面临的一般问题的...
2020-03-19 13:01:43 211
原创 《深入理解Java虚拟机》总结
目录第一部分 走进Java第二部分 自动内存管理机制第2章 Java内存区域与内存溢出异常1.运行时数据区域2.HotSpot虚拟机对象3.异常检测第3章 垃圾收集器与内存分配策略1.判断对象是否死亡2.引用3.方法区回收4.垃圾收集算法5.HotSpot的算法实现6.垃圾收集器7.内存分配与回收策略8.空间分配担保第...
2020-01-12 01:04:09 166
原创 《Java多线程编程核心技术》总结
目录一、Java多线程技能二、对象及变量的并发访问三、线程间的通信四、Lock的使用五、定时器Timer六、单例模式与多线程七、拾遗增补第一章.Java多线程技能1.进程与线程的概念:进程是一个程序及其数据在CPU上顺序执行所发生的活动,简而言之,就是一段程序的执行过程。其主要特征有四点:1.动态性,即上述所说的执行过程,它是动态创建,动态消亡的。...
2019-12-02 00:06:31 330
原创 源码分析——TreeSet
TreeSet作为Set接口实现类中的最后一个,它的原理其实也和HashSet、LinkedHashSet差不多,它主要是建立在TreeMap之上。先继续熟悉它所处的结构体系:从上图可以看出TreeSet和HashSet属于同一层级,唯一的区别是它可以对容器内的元素进行一定规则的排序。继续看其继承体系:TreeSet与HashSet继承自同一个抽象类,即Abstract类...
2019-05-03 21:26:55 283
原创 源码分析——LinkedHashSet
LinkedHashSet对于HashSet就如LinkedHashMap对于HashMap一样,因此也很容易理解。首先,继续看一看它所处的体系结构:由于HashSet是无序的,因此LinkedHashSet主要的特点是让自己的元素保持一定的顺序。继续看它的继承体系:LinkedHashSet继承自HashSet,并实现了HashSet一样的接口,至于这些接口的方法也就不赘...
2019-05-03 20:35:50 207
原创 源码分析——HashSet
Set集合类型虽然是属于Collection集合体系中的,但是其实现类都是使用Map集合体系中的实现类实现的。至于如何实现我们继续开始研究。首先,再次亮出集合家族图谱:从中可以看到Set接口下面有三个实现类,分别是:HashSet、TreeSet、LinkedHashSet,乍一看感觉和Map接口下的三个实现类:HashMap、TreeMap、LinkedHashMap有异曲同工之妙,...
2019-05-03 20:04:34 187
原创 源码分析——TreeMap
TreeMap同样属于Map集合中的一员,但是它没有用到散列表和链表这些数据结构,它只使用了红黑树这一数据结构,可以直接在红黑树中进行增删改查操作。我们首先回顾一下Map集合的家族成员:可以看出TreeMap是和HashMap并列的,而HashMap中的键值对是无序的,TreeMap中的键值对是按照一定的顺序进行排序的。接下来继续看其继承结构:public class Tre...
2019-05-03 17:37:34 165
原创 源码分析——Hashtable
对于Hashtable,其实实际中用的不多,但是作为一个面试常考点,还是试着来研究一下这个集合类。首先研究Hashtable,就要将Hashtable和HashMap放在一起比较,因为两者的功能类似且相近。Hashtable产生于JDK1.1,而HashMap产生于JDK1.2,HashMap产生的时间要比Hashtable晚。接下来我们来看一看Hashtable的继承体系:其实通过对...
2019-05-03 16:02:37 225
原创 源码分析——LinkedHashMap
理解了HashMap就可以很容易理解LinkedHashMap了,首先来看一下LinkedHashMap所处的体系结构:从上面可以看出LinkedHashMap处于Map接口中,作为HashMap的一个子类,其继承了HashMap的方法,并且比它多了一项特性,也就是可以保证输入的顺序和输出的顺序是一样的。接下来继续看其如何实现:public class LinkedHashMap&l...
2019-05-03 14:04:13 215
原创 源码分析——HashMap(四)
前面三篇都是给本篇作辅助用的,现在正式来了解一下HashMap这个集合容器,首先拿出集合接口图谱:由上面的图谱可知HashMap是属于Map接口下的,和Set与List接口属于两个体系,再来看看它所在的家族图谱:从上图可以看出,HashMap继承自AbstractMap类并主要实现了Map接口,然而有一个地方很奇怪,既然AbstractMap已经实现了Map接口,为什么HashMa...
2019-04-22 17:23:35 229
原创 源码分析——HashMap(三)
上一篇我们已经很详细的介绍了红黑树的具体结构以及插入和删除操作了,那么红黑树在HashMap中是如何具体实现的呢?首先我们来熟悉一下里面对左旋和右旋操作的实现,毕竟这两个操作在插入和删除里面是最基本的操作。首先来看左旋:p-->25,r-->35,pp->50static <K,V> TreeNode<K,V> rotateLeft(Tr...
2019-04-21 17:39:29 214
原创 源码分析——HashMap(二)
红黑树本篇主要介绍红黑树的基本概念以及相关的基本操作,并且讲解在HashMap中的主要实现。首先,红黑树是一种自平衡二叉查找树,它由AVL树与2-3树演化而来,它与AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的的查找性能,虽然操作比较复杂,但是它的最坏情况运行时间也是非常良好的,并且在实践中是高效的:可以在O(log n)时间内做查找,删除与插入操...
2019-04-21 00:52:54 187
原创 源码分析——HashMap(一)
哈希表对于HashMap,我们首先来分析一下它的底层结构到底是怎么样的,众所周知,HashMap是用来存放键值对的,所谓键值对,也就是一个键对应一个值,HashMap中将一个键值对作为一个对象存放在容器中。而且HashMap中允许key值为null,也允许value值为null,表面上允许key值重复,但是当key值的hash值,本身值以及内存地址hash值一样的话,后一个键值对就会覆盖前一个...
2019-04-20 14:51:10 142
原创 位运算浅析
由于最近刷题时遇见了几道与位运算有关的题目,因此想借此机会把与位运算有关的知识点都整理一下。要了解位运算,首先来整理一下二进制,二进制即用0和1两个数组及其组合表示任何数,二进制的进位规则是“逢二进一”,数字1在不同的位上代表不同的值,按从右至左的顺序,以2倍递增,二进制在计算机技术中广泛应用。1.位而每个二进制(即每个0或1)就被称为位,称为比特(bit),简记为b,是数据存储的最小...
2019-04-14 23:57:43 211
原创 源码分析——LinkedList
继续分析List的整体框架结构:从上图可以看出,LinkedList与ArrayList和Vector不同,它直接继承的父类是AbstractSequentialList而不是AbstractList。 我们再来看一看它的体系结构:public class LinkedList<E> extends AbstractSequentialList<E> im...
2019-04-14 17:20:29 153
原创 源码分析——Vector
首先我们再来回顾一下List集合框架的具体体现:从中可以看出,Vector容器是和ArrayList最相似的集合类容器,其父类都是AbstractList类,那Vector到底有什么用?为什么有了ArrayList还要创一个Vector容器呢?那就从源码开始慢慢解读吧。首先看一看Vector类的结构:public class Vector<E> extends Ab...
2019-04-13 22:26:23 216
原创 源码解析——ArrayList
对于Collection集合类,网上常见的结构图如下:上图显示了常用的几个集合工具类的相互关系和结构组成,但实际上远没有那么简单,因此我从ArrayList开始,深入底层源码,慢慢将集合工具类的大体框架和具体实现梳理出来,帮助自己深入理解集合工具类。首先ArrayList作为List家族的一员,首先来梳理一下List家族的具体结构组成:所以作为我们最常用的ArrayL...
2019-04-13 15:42:51 198
原创 SSM框架中多表查询500-排错记录
浏览器中提示错误如下:HTTP Status 500 - Servlet.init() for servlet springMVC threw exceptiontype Exception reportmessage Servlet.init() for servlet springMVC threw exceptiondescription The server encoun...
2019-03-27 17:31:11 279
原创 从零开始WebAPP尝试(四)----登录实现
将前端html框架基本写好了,css样式也大体加上了,现在就开始实现其功能了,也就是最主要的部分,所以就先以最基础的功能开始,即登录,如何实现登录,你可以直接设置一个账号,如果输入框和密码框都是那个账号就可以进入网页,但这明显只是一个假的,真正的登录功能还是需要连接数据库,在数据库的相应表中查询是否存在用户输入的账号,如果存在,再对比其密码是否和数据库中最初始录入的密码相同,这里就主要涉及到了数据...
2019-01-05 14:24:42 2007
原创 从零开始Web APP尝试(三)----前端开发
OK,那些工具都准备好了,先开始来写一个基础的前端框架吧,我前端采用的是MUI框架,这个框架目前也是一个比较火的的WebApp框架吧,具体的搭建框架的步骤如下:1.打开Hbulider.2.新建一个移动app项目.3.勾选新建hello MUI示例模板,在填写你的项目名称就可以了4.然后在左上角将模式改为边改边看模式,打开你刚刚创建的项目,再打开index.html页面...
2019-01-04 23:18:45 1037
原创 从零开始Web APP尝试(二)----工具准备
工欲善其事,必先利其器。首先我先介绍一下编写本项目的基本工具。首先是前端编译器,我比较推荐Hbuilder,感觉对大学生还是比较友善与便捷的,最重要的是可以帮你把里面的前端代码打包成apk并安装到手机上,在自己的手机上运行自己制作的app感觉还是挺爽的。Hbuilder下载地址:http://www.dcloud.io/hbuilderx.html现在官网上都是HbuilderX了,这...
2019-01-04 22:33:40 268
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人