代码要写成别人看不懂的样子(二十二)

Qt OpenGL(二十二)——Qt OpenGL 核心模式-VAO和VBO 你只需要记住现在这些步骤就行。在调用VAO的时候,使用的函数glVertexAttribPointer函数,Attrib就是属性的意思,这个函数就是指定输入数据的哪一个部分对应顶点着色器的哪一个顶点属性。所以,VBO的作用就是在CPU和GPU之间充当一个桥梁的作用,当我们把顶点数据存到VBO,VBO就会把数据自动的送到GPU,我们不需要关心他怎么送过去的,我们只要负责往VBO中送数据就行了(使用函数实现)。上面是我们需要绘制的顶点,同时也包含顶点颜色数据,也有可能会包含纹理数据,这个以后会介绍。 阅读详情

本篇文章参考书籍《JavaScript设计模式》–张容铭

前言

  本节我们处理一个老生常谈的问题,异步。为什么会出现异步这个问题呢?这要从 JS 出生之前说起。

  很久很久以前,天和地还没有分开,宇宙混沌一片。有个叫盘古的巨人,在这混沌之中,一直睡了一万八千年。
在这里插入图片描述

  有一天,盘古突然醒了。他见周围一片漆黑,就抡起大斧头,朝眼前的黑暗猛劈过去。只听一声巨响,混沌一片的东西渐渐分开了。轻而清的东西,缓缓上升,变成了天;重而浊的东西,慢慢下降,变成了地…

  扯远了哈,异步问题是因为 JS 设计之初就是单线程的,当我们碰到一些比较耗时的事情的时候,不能就卡着不动了,用户可能会以为电脑坏了。那么就需要把耗时的事情暂时挂起,等 JS 手头的工作完成了,再去处理那个耗时的东西。

等待者模式

  通过对多个异步进程监听,来触发未来发生的动作。

  工作当中我们会经常遇到请求不同接口的数据,让后把这两个接口的数据一块渲染出来。那么请求时快时慢,一个完成了,另一个还没返回结果。

  解决这个问题图省事的方法就是在一个请求的回调函数中,发送另一个请求,但是这个样整个请求的事件就变成了 T1 + T2 ,作为程序员,一定锱铢必较,快一点也是块。我们希望请求事件的总时间可以是 T1, T2 中较大的那个,就可以用到等待着模式进行优化。

  我们需要创建一个等待对象,这个对象不需要实时监听异步逻辑的完成,它只需要对注册监听的异步逻辑发生状态改变时(请求成功或失败)对所有异步逻辑的状态做一次确认迭代。

//等待对象
var Waiter = function() {
	//注册了的等待对象容器
	var dfd = [],
		//成功回调方法容器
		doneArr = [],
		//失败回调容器方法
		failArr = [],
		//缓存 Array 方法 slice
		slice = Array.prototype.slice,
		//保存当前等待对象
		that = this;
	
	//监控对象类
	var Primise = function() {
		//监控对象是否解决成功状态
		this.resolved = false;
		//监控对象是否解决失败状态
		this.rejected= false;
	}
	//监控对象类原型方法
	Primise.prototype = {
		//解决成功
		resolve: function() {},
		//解决失败
		reject: function() {}
	}

	//创建监控对象
	that.Deferred = function() {
		return new Promise();
	}
	
	//回调执行方法
	function _exec(arr) {}

	//监控异步方法 参数:监控对象
	that.when = function() {};

	//解决成功回调函数添加方法
	that.done = function() {};

	//解决失败回调函数添加方法
	that.fail = function() {};
}

  对于等待者对象可以看出,其结构如下:

  • 内部定义了三个数组,分别是等待对象容器,以及成功与失败回调函数容器;
  • 一个类-监控对象,该对象有两个属性,即监控解决成功状态,监控解决失败状态,两个方法,解决成功方法与解决失败方法;
  • 一个私有方法 _exec 来处理成功失败回调函数的方法;
  • 3个公有方法接口: when 方法监控异步逻辑, done 方法添加成功回调函数, fail 方法添加失败回调函数;

  首先我们先实现监控对象类原型方法 resolve 和 reject ,他们都是因异步逻辑状态改变而执行的相应操作,不同的是 resolve 方法是要执行成功回调,所以要对所有被监控的异步逻辑进行状态校验。而 reject 方法是要执行失败回调函数,所以只要有一个被监控的异步逻辑状态变成失败状态,就要立即执行回调函数。

//监控对象原型方法
Primise.prototype = {
	//解决成功
	resolve: function() {
		//设置当前监控对象解决成功
		this.resolved = true;
		//如果没有监控对象则取消执行
		if(!dfd.length) return;
		//遍历所有注册了的监控对象
		for(var i = dfd.length - 1; i >= 0; i--) {
			//如果有任意一个监控对象没有被解决或者解决失败则返回
			if(dfd[i] && !dfd[i].resolved || dfd[i].rejected) return;
			//清除监控对象
			dfd.splice(i, 1);
		}
		//执行解决成功回调方法
		_exec(doneArr);
	},
	//解决失败
	reject: function() {
		//设置当前监控对象解决失败
		this.rejected = true;
		//如果没有监控对象则取消执行
		if(!dfd.length) return;
		//清除所有监控对象
		dfd.splice(0);
		//执行解决成功回调方法
		_exec(failArr);
	}
}

  对于回调执行方法要做的事情很简单,就i是遍历成功或者失败回调函数容器,然后依次执行内部方法。

//回调执行方法
function _exec(arr) {
	var i = 0,
		len = arr.length;
	//遍历回调数组执行回调
	for(; i < len; i++) {
		try {
			//执行回调函数
			arr[i] && arr[i]();
		} catch(e) {}
	}
}

  等待着对象还定义了三个共有接口方法 when、done 和 fail ,对于 when 方法是要检测已注册过的监控对象的异步逻辑(请求: ajax 请求等;方法: setTimeout 方法等),所以 when 方法就要将检测对象放入检测对象容器中,当然还要判断检测对象是否存在、是否解决、是否是检测对象类的实例。最后还要返回该等待对象便于链式调用。

//监控异步方法 参数:监控对象
that.when = function() {
	//设置监控对象
	dfd = slice.call(arguments);
	//获取监控对象数组长度
	var i = dfd.length;
	//向前遍历监控对象, 最后一个监控对象的索引值为 length - 1
	for(--i; i >= 0; i--) {
		//如果不存在监控对象,或者监控对象已经解决,或者不是监控对象
		if(!dfd[i] || dfd[i].resolved || dfd[i].rejected || !dfd[i] instanceof Primise) {
			//清理内存 清除当前监控对象
			dfd.splice(i, 1);
		}
	}
	//返回等待者对象
	return that;
};

  对于 done 方法与 fail 方法的功能则简单得多,只需要向对应的回调函数容器中添加相应回调函数即可,并最终将等待者对象返回便于链式调用。

//解决成功回调函数添加方法
that.done = function() {
	//向成功回调函数容器中添加回调方法
	doneArr = doneArr.concat(slice.call(arguments));
	//返回等待者对象
	return that;
};
//解决失败回调函数添加方法
that.fail = function() {
	//向失败回调函数容器中添加回调方法
	failArr = failArr.cancat(slice.call(arguments));
	//返回等待者对象
	return that;
}

  好了,有了这个等待对象,我们就可以对异步逻辑进行监控了。我们先写一个异步方法的例子。

setTimeout(function() {
	console.log('first');
}, 30)
console.log('second');
//控制台输出结果
//second
//first

  简单说一下同步原理,类似单行道马路,汽车只能一辆接着一辆过,后面的哪怕有个火箭,也只能老实排队挨个通过。

  那不能总让火箭等待吧,这就出现了异步,类似开辟多车道,让那些跑的慢的车在一边行驶,把马路让出来,让火箭快速通过。这就是异步的产生,所以我们可以看到上面控制台是先输出 second 然后再输出 first 。

  解释完异步的产生,我们设置一个场景来验证等待者对象。

  比如现在有一个页面,里面有几个活动彩蛋,让所有彩蛋运动结束后,出现欢迎页面。要检测几个运动彩蛋全部结束是一件很头疼的事,这时候就需要我们的等待者对象。

var waiter = new Waiter();

  这里我们简化彩蛋,将其抽象成一个方法,而且在某一时刻会结束,我们要在彩蛋方法执行内部创建监听对象。

//第一个彩蛋,5 秒后停止
var first = function() {
	//创建监听对象
	var dtd = waiter.Deferred();
	setTimeout(function() {
		console.log('first finish');
		//发布解决成功消息
		dtd.resolve();
	}, 5000);
	//返回监听对象
	return dtd;
}();
//第二个彩蛋,10 秒后停止
var second = function() {
	//创建监听对象
	var dtd = waiter.Deferred();
	setTimeout(function() {
		console.log('second finish');
		//发布解决成功消息
		dtd.resolve();
	}, 10000)
	//返回监听对象
	return dtd;
}();

  最后我们要用等待者对象监听两个彩蛋的工作状态,并执行相应的成功回调函数与失败回调函数。

waiter
	//监听两个彩蛋
	.when(first, sceond)
	//添加成功回调函数
	.done(function() {
		console.log('success');
	}, function() {
		console.log('success again')
	})
	//添加失败回调函数
	.fail(function() {
		console.log('fail');
	});
//输出结果
// first
// second
// success
// success again

等待者模式应用

  等待者模式被很多框架运用,比如 jQuery 中的 Deferred 对象,并且它还用等待者思想对 ajax 方法进行了封装。

$.ajax("text.php")
	.done(function() { console.log("成功"); })
	.fail(function() { console.log("失败"); });

  当然我们自己也可以将原生的 ajax 方法封装成等待者模式,将 resolve 方法放在请求成功回调函数内调用,将 reject 方法放在请求失败回调函数中调用。

//封装 get 请求
var ajaxGet = function(url, success, fail) {
	var xhr = new XMLHttpRequest();
	//创建检测对象
	var dtd = waiter.Deferred();
	xhr.onload = function(event) {
		//请求成功
		if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
			success && success();
			dtd.resolved();
		//请求失败
		} else {
			dtd.reject();
			fail && fail();
		}
	};
	xhr.open("get", url, true);
	xhr.send(null);
};

  有了等待者对象,以后就不用愁后端的部署了,我们只需要修改一下接口就可以了。省去了很多工作。

  除此之外,我们的轮询(定期向后端发送请求)实现的机制也有些类似等待者模式,只不过是在其自身内部对未来动作进行了监听。

//长轮询
(function getAjaxData() {
	//保存当前函数
	var fn = arguments.callee;
	setTimeout(function() {
		$.get('./test.php', function() {
			console.log('轮询一次');
			//在执行一次轮询
			fn();
		})
	}, 5000)
})();

  观察者模式意在处理耗时比较长的操作,比如 canvas 中遍历并操作一张大图片中的每一个像素点,定时器操作,异步请求等。等待者模式提供了一个抽象的非阻塞解决方案。




苹果CMS V10影视模板二开修复实战:从代码审计到部署上线 在影视建站与模板开发领域,苹果CMS V10凭借开源免费、部署灵活、模板机制成熟等特性,成为个人站长搭建资源站的常用选择。然而,市面流通的模板质量参差不齐,加密后门、代码混淆、播放器解析失效、后台白屏等问题频繁困扰站长,深入了解模板的代码结构与安全审计方法,是保障站点稳定运行的关键。本文从内容管理系统的模板生态出发,围绕无加密模板的代码审计、常见bug修复、后台功能增强、性能优化、伪静态配置及部署上线全流程展开实操讲解,并提供常见异常排查与避坑清单。无论你是初次接触苹果CMS模板,还是希望提升站点安全性、可 阅读详情

相关推荐

一步一步搭建S32K14x的AutoSar项目----S32DS 代码工程的搭建

一步一步搭建S32K14X的AutoSar项目----S32DS代码工程的搭建

wo580231的博客 3487

代码要写成别人看不懂的样子(二十七)

本篇文章参考书籍《JavaScript设计模式》–张容铭 文章目录前言MVC 模式总个小结 前言   嗨!各位乡绅,上一节的字符串模板,有没有很崩溃,模板引擎写起来是有点费劲,但是思路比较简单,慢慢梳理就好。   本节我们来个硬货,如果各位经常浏览招聘信息,那么很多公司都会在岗位要求上面写上,熟悉 MVC 框架者优先。今天我们就来搞搞,到底什么是传说中 MVC 。 MVC 模式   MVC 即模型(model)—视图(view)—控制器(controller),用一种将业务逻辑、数据、视图

不见浅诗的博客 311

Windows10开机无限蓝屏(SrtTrail.txt)

这个问题已经有很多的大佬发过解决办法了,这里仅仅作为自己日后方便查找所写文章 无法开机——自动修复失败,报SrtTrail.txt文件错误,且陷入无限蓝屏的循环 事故 故事的起因是这样的: 开开心心的组装电脑,花了几天时间来配置,然后发现USB3.0的接口太少,于是在某宝上搞到一张pcie转7口USB3.0的转接卡,往电脑上一插 插电,开机,电流轻松跑上去 然后,它和原来的磁盘阵列卡冲突,跳过阵列卡自检直接进入系统,boom,就导致了这场悲剧 解决方法 在蓝屏的界面找到:疑难解答->通过命令提示符 使

Holo__的博客 3万+

怎么写别人看不懂的JavaScript代码

是转换成数字,-是转换并翻转符号位,在表达式里可以大量使用(前后需要空格)或者代替Date.now()与new Date().getTime();恒假值不用0,用“字符串比如42”==true或“字符串”==false,恒为真就是!(“字符串”==true)重点: “”==[],””==0,[]==0 []==![],代替data.length == 0。假阳:“0”==false,false==0,false=="",false==[]甚至:a==2&&a==3不会报错,而是false。

qq_66233357的博客 569

TC397 EB配置ADC软件触发:从零实现周期采样与中断处理

本文详细介绍了如何在Infineon AURIX TC397芯片上使用EB Tresos工具配置ADC软件触发,实现周期采样与中断处理。通过硬件连接、EB模块配置、代码初始化及数据处理的全流程解析,帮助开发者快速掌握ADC软件触发技术,提升嵌入式系统开发效率。

root9的博客 231

02.Palantir Foundry平台功能和应用全景图

本文深入解析 Palantir Foundry 平台核心功能与应用全景。

687

es5程序设计(如何把代码写到一眼看不懂)

案例:计算器的实现代码 普通人怎么写的: html部分 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"&g

写点什么好 254

基于 OpenCVSharp 的晶圆缺口自动检测与旋正方案

在半导体制造过程中,晶圆(Wafer)需要精确定位才能进行后续加工。每个晶圆边缘都有一个特定的缺口,这个缺口就像 "箭头" 一样,帮助机器确定晶圆的方向。我们的任务就是通过摄像头拍摄的图片,自动找到这个缺口的位置,计算出需要旋转多少角度才能让晶圆对准正确方向。简单来说,这个技术就像给晶圆 "找方向",确保它在生产线上始终保持正确的姿态。

品质生活,极致编程。 1211

如何让别人看不懂你的 JS 代码?把你当大佬!

我们在上周的文章中一种奇特的 JavaScript 编码风格:Get 一种可以用来装逼的 JavaScript 编码风格,引起了广大网友的热议。这是实际上属于一种代码混淆技术,可以让们的代码更难阅读和逆向,同时也能租网一些恶意爬虫和自动化分析。天我就带大家来看看还有哪些其他能让 JavaScript 代码变得难以分析的代码混淆技术。通过一些转换,它可以变成下面这个样子:怎么做到的呢?我们一起来看一下~...

m0_62051288的博客 834

HFSS实战项目——GPS北斗双模微带天线

本文设计了一款方形圆极化微带天线应用于北斗B1和GPSL1频段,满足高增益、低VSWR、适当方向图等要求。设计中心频率为1568MHz,介质板采用厚度h=1.6mm的Arlon AD450(tm)板,相对介电常数为4.5,采用探针馈电。

2401_87464239的博客 1767

Centos 7 Linux 安装单机 Hadoop(HDFS):下载、安装、配置、测试

本文详细介绍了在 CentOS 7 系统上安装与配置单机 Hadoop(HDFS)的完整流程,涵盖 JDK 环境准备、Hadoop 安装包下载与部署、核心配置文件(core-site.xml、hdfs-site.xml 等)修改、SSH 免密登录设置、HDFS 格式化及服务启动,并通过命令行与 Web 界面验证 HDFS 和 YARN 功能,适合 Hadoop 初学者快速搭建本地测试环境。

寒水馨 · 轻量级技术文档 · hanshuixin.org 3234

代码要写成别人看不懂的样子(一)

本篇文章参考以下博文 文章目录前言 前言   最近读了一本书,张容铭老师的 《JavaScript设计模式》 ,书中提到的编码模式,编码风格,让我想起了我刚学 JS 的时候,特别向往像大神一样,全篇没什么 div 罗列,都是方法或者构造函数之类的东西,一顿操作后, body 里面只要添加一个 <div id=“demo”> ,大功告成。   逼格满满有没有,当时就想,什么时候我也能这样,别人看不懂我的代码,所有的事情不用自己手写,只要给一个容器,然后执行函数就

不见浅诗的博客 1713

Electron vue3 - 使用SerialPort与串口交互教程,计算机串行端口(COM口、USB转串口等)进行通信连接读取或写入Arduino、单片机、PLC、扫码枪、打印机、老式调制解调器!

实战Electron使用SerialPort与串口交互详细全过程,Electron-vue3与串口交互示例,Electron vue使用serialport实现串口交互通讯,Electron-vue使用serialport连接本地串口,electron-vue 台称串口对接 SerialPort,electron串口调试工具,electron+vue+serialport实现串口通信,串口通信serialport使用和调试,electron-vue使用serialport串口通信及踩过的坑(已解决!)ele

🏆 前端领域优质创作者 4640

GEEer成长日记二十二:Task栏批量RUN代码

GEE批量下载任务的代码

微信公众号:GEEer成长日记 1738

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

八月二十二日

8月的北京,还是有一点闷热,窗外淅淅沥沥的下着雨,来北京的第四个年头了,还记得四年前的七月二十六日,独自一个人拖着箱子,从北京西到天通苑。 还记得四年前,不太好找的第一份工作。 居然就这样,过了四年,好像忘记了,当时来的梦想之类的 发现自己好普通好普通,学习这个东西,不进则退。 今天,居然像四年前一样,经历一次面试,然后觉得深受打击。 昨天,刷朋友圈的时候,看到大学时候教的那个弹钢琴的小

D调的华丽 354

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

第二十二课_堆栈图2

前言 昨天,说了一个简单的加法函数的堆栈图,看了源码的同学会发现:在C语言中简单的几行代码,在汇编中却做了很多事情。今天也是说堆栈图,今天说的是三个参数的函数,今天就不一句一句的画了,我们开始一片一片的画。 说明:源码和exe执行程序已经放网盘,地址在文末。编译器用的是VC6,exe是Debug版的。今天讲的会比较简陋,看不懂的,可以看看昨天这篇文章《第二十一课_堆栈图1》。 具体步骤 1、把下载的yiDaChengXuYuan_Stack2.exe拖到OD中打开。按Ctrl + G,在弹出的对话框

ELaXiaoSi的博客 637

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

知识点二十二:动态规划

前言 淘宝的“双十一”购物节有各种促销活动,比如“满 200 元减 50 元”。假设你女朋友的购物车中有 n 个(n>100)想买的商品,她希望从里面选几个,在凑够满减条件的前提下,让选出来的商品价格总和最大程度地接近满减条件(200 元),这样就可以极大限度地“薅羊毛”。作为程序员的你,如何编个程序来帮她搞定这个问题呢?要想高效地解决这个问题,就要用到动态规划(Dynamic Progra...

Mr_SCX的博客 925

深度学习之图像分类(二十二)-- AS-MLP网络详解

深度学习之图像分类(二十一)AS-MLP网络详解 目录深度学习之图像分类(二十一)AS-MLP网络详解1. 前言2. AS-MLP 网络结构3. AS-MLP Block3.1 Block 结构3.2 Axis Shift3.2.1 感受野分析3.2.2 并行串行分析3.2.3 padding 分析3.3 额外补充4. AS-MLP 与下游任务5. 总结6. 代码 在上一讲 MLP-Mixer 最后,我提出了几个问题: MLP-Mixer 是否可以为分割、识别等下游任务提供太大的帮助呢?MLP-Mixer

木卯_THU的博客 3884

TowardsDataScience 博客中文翻译 2020(七百二十二)

萨姆·丹·张在Unsplash上的照片通常,当数据科学家需要使用他们的自定义数据集进行深度学习或任何推理时,他们需要将数据下载到他们的环境中。这对任何使用Colab的人来说都特别有用。我基本上使用 Colab 来完成我的深度学习任务,因为我没有硬件来支持我的计算。我想快速分享我是如何在 google Colab 环境中为我们工作和使用数据集的。事实上,这个过程应该是非常简单的,但是有时候,我们很难做到。实际上我花了一段时间才弄明白。因此,我写这篇文章的原因是。实际上有几个选项可供选择。

龙哥盟 1604

Java日志二十二「Servlet」

** Servlet ** Servlet全称Java Servlet,是用Java编写的服务器端程序。当客户端(一般是浏览器)向服务器请求数据时,Servlet可以生成动态的Web内容发送给客户端。从现实上讲,servlet 可以响应任何类型的请求,但是绝大多数情况下Servlet只用于来扩展基于THHP协议的Web服务器。 下面我们继承Servlet接口(Java已经定义好的)来写一个简单的Servlet: @WebServlet("/demo1") public class Servlet_pract

S_8casrces的博客 471

【Linux系统编程二十二】:(信号1)--信号的产生与发送

【Linux系统编程二十二】:本篇总结信号产生的五大方式,前台进程,硬件中断,以及信号异步及信号的发送等知识点。

Extreme_wei的博客 1087

python接口自动化(二十二)--unittest执行顺序隐藏的坑(详解)

大多数的初学者在使用 unittest 框架时候,不清楚用例的执行顺序到底是怎样的。对测试类里面的类和方法分不清楚,不知道什么时候执行,什么时候不执行。虽然或许通过代码实现了,也是稀里糊涂的一知半解,这样还好,好歹自己鼓捣出了,但是时间和效率并不是很高,下次遇到还是老样子。那么本篇通过最简单案例来给给为小伙伴详细讲解、演示一下 unittest 执行顺序。

北京-宏哥的博客 1709

【HTML入门】第二十二课 - 【实战】做一个注册页面

这一小节,我们继续纯HTML标签的使用,这一节我们做一个。说到注册页面,其实大家的网站都大同小异,所以我们就不四处去找设计图了,我们自己想一个注册页面,想想注册页面都应该有哪些元素,应该长什么样子。

xingyu_qie的专栏 1128

基于eclipse的android项目实战—博学谷(二十二)登录图片验证码

本项目是用eclipse软件编写,经过我的亲自实践,其真实有效,希望能给您有所帮助???????? 项目版本:android5.1.1 ADT版本:23.0.6 SDK版本:24.4.1 运行模拟器:夜神模拟器 若有不足之处或不对的地方,欢迎大佬们指点 本项目源码下载链接: https://download.youkuaiyun.com/download/hyh17808770899/20285938 在下载源码之前请先下载apk安装查看运行效果:https://yuyunyaohui.lanzoui.com/i

雨云21的博客 2232

我的编程之路(二十二) 同事

1.IT同事的幽默 2.

hzk1562110692的专栏 1513

IOS开发---菜鸟学习之路--(二十二)-近期感想以及我的IOS学习之路

在不知不觉当中已经写了21篇内容 其实一开始是没有想些什么东西的 只是买了Air后 感觉用着挺舒服的,每天可以躺在床上,就一台笔记本,不用网线,不用电源,不用鼠标,不用键盘,干干脆脆的就一台笔记本。 看看文章,写写学习的总结,然后就在不知不觉中写了那么多的东西。 文章的内容可能有部分人看不懂吧,不过怎么讲呢。。 我首先是站在我自己的角度写的总结,另外呢。也可能是我比较懒吧。 ...

an_xiaoyu1024的博客 125
上一篇: 代码要写成别人看不懂的样子(二十一)
下一篇: 代码要写成别人看不懂的样子(二十三)
不见浅诗~
博客等级 码龄7年 506粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值