框架方面目前主要掌握 Vue 。可独立开发 H5 项目,PC Web 后台系统, 小程序开发。

UI 框架:用过 element-UI, iView, WeUI, WeUIJs. MiniUI

第三方插件:使用过 Moment 日期处理,Echart 图表统计, VueDraggable 拖动。

网络请求:Axios

图片上传: Weui-Uploader, Blob 或 base64 上传.

IM: 使用过网易云信。

移动 App: 用 Swift 开发过 iOS 项目,Sass 应用。(云喵)

熟悉 Webpack, Sass, NodeJs, vue-Cli, Router, VueX.

个人 Github Page 演示

目录

  1. 打印图案
    1. 等腰三角形之字母扩展
    2. 空心菱形 方法一:两个等腰三角形拼接
    3. 空心菱形 方法二:对角线相等
    4. 杨辉三角
    5. 螺旋矩阵
    6. 蛇形矩阵 1
    7. 蛇形矩阵 2
  2. 趣味习题
    1. 打印某年某月日历排版
    2. 找出最长的单词
    3. 颠倒一串英文句子
    4. 颠倒一串英文句子 Java版本
    5. 生成不重复的随机数
    6. 统计班级成绩排名 Java 版本
    7. 统计班级成绩排名 C 版本
    8. 报数 123,报数 3 的童鞋退出,最后留下的是哪个同学。 Java 版本
    9. 报数 123,报数 3 的童鞋退出,最后留下的是哪个同学。 C 语言版本
    10. 模拟对象层级树结构
  3. 基础排序
    1. 插入排序
    2. 选择排序
    3. 冒泡排序
    4. 快速排序
    5. 二分法查找
  4. Json 格式的校验

Runtime 到底是个什么鬼?

Runtime是Objective-C中底层的一套C语言API,是一个将C语言转化为面向对象语言的拓展。Runtime的一切都围绕两个中心:类的动态配置消息传递

能干啥?

  • 动态的在内存中创建一个类
  • 给类增加一个属性
  • 给类增加一个协议实现
  • 给类增加一个方法实现IMP
  • 遍历一个类的所有成员变量、属性和方法等
  • 拦截系统自带的方法调用(Method Swizzling黑魔法)
  • 将某些OC代码转化为Runtime代码,探究底层。如block的实现原理
  • 实现给分类增加属性
  • 实现NSCoding的自动归档和接档
  • 实现字典的模型和自动转换

1、iOS 11之前的导航栏的高度是64px(状态条+导航栏),iOS11之后如果设置了prefersLargeTitles = YES(默认NO)则为96pt。所以一般不用管。

2、在iOS 11上运行tableView向下偏移64px或者20px,因为iOS 11废弃了automaticallyAdjustsScrollViewInsets,而是给UIScrollView增加了contentInsetAdjustmentBehavior属性。避免这个坑的方法是要判断

3、tableView的sectionHeader、sectionFooter高度与设置不符,因为tableView的estimatedRowHeight、estimatedSectionHeaderHeight、 estimatedSectionFooterHeight三个高度估算属性由默认的0变成了UITableViewAutomaticDimension。最简单的方法就是直接设置为0。

4、iPhone X状态条由20px变成了44px,UITabBar由49px变成了83px。设置布局时y直接写成64的就要根据机型设置。可以设置宏

#define Device_Is_iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO),

推送模块,推送消息存储

H5 的webView 跳转 与原生交互。

图片压缩缓存。 发表话题。

  • 请求头

    请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息,如Host: 主机名, Use-Agent: 浏览器基本资料, Accept: 浏览器能够识别的响应类型, Accept-Language: 浏览器默认语言, Accept-Encoding: 浏览器能够识别的压缩方式, Referer: 来路页面, Connecton:是否保持连接。

  • GET

    GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),如果数据是英文字母/数字,原样发送;如果是空格,转换为+;如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

限制

GET:特定浏览器和服务器对URL长度有限制.

POST:由于不是通过URL传值,理论上数据不受 限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置

http请求content-Type

application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。这种方式用的比较多。

multipart/form-data: 数据被编码为一条消息,页上的每个控件对应消息中的一个部分。一般上传文件才会使用这种方式。

text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符。一般向服务端发送json数据会使用这种方式。

HTTPS数据加密

HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <string.h>

void countWords(){

char str[100] = "hello, my name is gaogaoProgramer, welcome to come here!";
int index;
long len = strlen(str);
int spaceIndex = 0; //从第一个下标开始算
int recordMax = 0; //单词空格之间下标最大差即为最长单词
int beforeIndex = 0,afterIndex = 0; //定义最长单词的前空格,后空格
for(index = 0; index < len; index++){
if(str[index] == 32){ //判断空格
if(index - spaceIndex > recordMax){
recordMax = index - spaceIndex;

//记录前下标和后下标。
beforeIndex = spaceIndex;
afterIndex = index;
}
spaceIndex = index;
}
}

printf("原始单词为:%s",str);
printf("\n单词空格之间下标最大差:%d 前下标:%d,后下标:%d",recordMax,beforeIndex,afterIndex);

//输出找到的单词;
printf("\n\n找到的最长度单词为:");
int charIndex;
for(charIndex = beforeIndex; charIndex< afterIndex ; charIndex++){
printf("%c",str[charIndex]);
}
}