1Web前端技术

AJAX技术的妙用

  • AJAX是一项用于异步拉取数据并展示在当前页面的技术

  • 1、不用刷新网页

  • 2、本地网页从后台调取数据

  • 3、缓解用户等待的焦虑感

  • 网页没有刷新是指一个空网页渲染到屏幕上,单击网页中的一个链接后,又打开了一个新的网页。

  • 其实,这种只让部分页面刷新的技术叫作AJAX(汉语读音为“阿贾克斯”或“额寨克思”),它是“Asynchronous JavaScript And XML”的首字母缩写,翻译为“异步JavaScript和XML”。

  • JavaScript(缩写为JS)是一种高级的、多范式、解释型的编程语言,是一门基于原型、函数先行的语言,它支持面向对象编程、命令式编程以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式,不支持I/O(比如网络、存储和图形等),但可以由它的宿主环境提供支持。

  • XML(Extensible Markup Language),中文为可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。XML可以用来标记数据、定义数据类型,可以允许用户对自己标记语言进行定义,是对人和机器都比较友好的数据承载方式。

  • 它主要解决的就是不用刷新网页,就能和后台交互获取数据,并应用于当前网页的问题

  • 抓包是拦截查看网络数据包内容的软件,通过对抓获的数据包进行分析,对软件debug有很大帮助。

  • JSON(JavaScriptObject Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

  • 发起网络请求。发起网络请求的能力由浏览器的内置能力提供,所有的浏览器都提供了XmlHttpRequest对象,它可以由网页调用,用来连接一个特定的地址。

  • XMLHTTP是一组API函数集,可被JavaScript、JScript、VBScript以及其它web浏览器内嵌的脚本语言调用,通过HTTP在浏览器和web服务器之间收发XML或其它数据。XMLHTTP最大的好处在于可以动态地更新网页,它无需重新从服务器读取整个网页,也不需要安装额外的插件。该技术被许多网站使用,以实现快速响应的动态网页应用。例如:Google的Gmail服务、Google Suggest动态查找界面以及Google Map地理信息服务。中文名XmlHttpRequest外文名XMLHTTP优点得到了所有现代浏览器较好的支持特点提供了对 HTTP 协议的完全的访问标准化对象还没有标准化

  • 无须刷新,可动态操作网页。我们先引入术语 DOM(Document Object Model,文档对象模型)

  • AJAX是一项用于异步拉取数据并展示在当前页面的技术,这对需要延迟加载数据和触发式加载数据的页面有很大益处。绝大多数网页为了加速响应,都会用到这项技术。

DOM是什么

  • DOM(文档对象模型)是Web前端里最基础、最常用的一个模型。

  • 浏览器在解析HTML文档时,会把每个标签抽象成代码里的对象,按照这种层次分明的结构组织,这就是DOM。

  • 很多网页一开始加载出来的只是个架子,只显示出一个loading图标的转圈动画,只有等JavaScript从服务器上请求到真正的数据后操纵DOM来显示数据,才能看到内容,这就是典型的异步加载。

静态网页与动态网页

  • HTML是网页的基础结构,网页如何排版、每个元素在什么位置,都是由它来描述的。

  • 静态网页和动态网页的核心区别是后台是否有数据库的支撑,也可以简单地描述为网页上展示的内容是否要变化,是因人而异地显示不同的内容(例如QQ空间),还是根据时间线呈现内容的变化(例如新闻客户端),或是一直保持不变(例如一些国企或政府网站)。

  • (1)静态网页和动态网页都是网页。

  • (2)静态网页不需要后台程序干预处理,直接由服务器返回。实现为静态网页后,一般不需要维护,因为数据不需要更新。

  • (3)动态网页一般需要由程序来处理(ASP、JSP、PHP、Python、Ruby等),并由数据库提供数据支撑。

  • (4)不要以URL的形式来判断一个网页是静态的还是动态的,而应该看页面的属性(产品经理最好具备一些调试技巧和经验)。

  • (5)动态网页更灵活。

分析URL的结构

  • 一个标准的 URL 地址由protocol、hostname、port、path、parameters、query 几部分组成。

  • protocol:指 http://部分,是协议的意思。协议就是一套规则,定义了数据的封装、打包、拆包和解释的规则,http://即表示只能通过HTTP这套规则访问这个页面资源

  • hostname:hostname称为主机名

  • port: port称为端口号,一般HTTP的端口号为80,HTTPS的为443,可以理解为计算机有很多个提供服务的点

  • path:hostname后面的一长串全部称为path,是“路径”的意思,即最终文件所在的路径和文件名,只不过此地址的文件存储在腾讯的服务器上

  • parameters:?a=1&b=2&c=3这一部分称为参数(parameters),也叫查询。

网页基础知识:表单

  • 表单在很早的 HTML 版本中就已经存在,它是用户输入和网页之间数据交互的一个界面,在HTML中用标签标记。

  • 总结:表单是用户和服务器数据交互的用户界面,一切向服务器提交的数据都是由其中的几个简单的标签组成的。

H5应用程序缓存简介

  • Application Cache是HTML 5中定义的一种离线存储技术标准。

  • 这种技术可以让开发者明确地指定页面中哪些静态资源可以在第一次访问网页的同时缓存到本地,并且在下次访问该网页时向服务器询问本地缓存的资源是否需要更新

Chrome里的冷知识

  • DevTools:如果读者在浏览某些网站时按“F12”键启动开发者工具,会在Console这个Tab下收到网站开发者的留言,不过这些留言大多是一些招聘信息,因为这样做针对性很强,这些信息几乎只有开发工程师才能看到。

  • 恐龙小游戏

  • 变色的标题栏

  • 指定搜索引擎:可以在Chrome的地址栏里直接输入淘宝或者知乎的域名,然后按“Tab”键,Chrome的地址栏就显示“用××搜索”,我们紧接着输入想搜索的内容,按回车键,结果就直接显示出来了

  • 计算器

  • 执行 JavaScript 语句

  • 将网页存为PDF文件:有时我们需要将一个页面保存下来,除了用Evernote等工具,还可以在Chrome里直接将该网页存成PDF,只需按“Ctrl+P”组合键唤起“打印网页”对话框,然后在目标打印机的选项中选择“另存为PDF”选项。

JS DDoS攻击的原理与防御

  • 分布式拒绝服务攻击(Distributed Denial of Service,DDoS)是一种对网站发起大量连接,导致正常用户无法访问网站的攻击手段。利用流量劫持变相进行 DDoS,就是JS DDoS。

  • 要防御它是有办法的。开发者在引用一个第三方库时,在页面里写上它的散列值,如果第三方库被劫持,计算出的散列值与开发者写在页面里的不匹配,浏览器便不会执行它。还有另一种方案,就是使用HTTPS链接,这样可以解决大部分劫持问题。

UA的故事

  • “UA”是“UserAgent”(用户代理)的简写,一般用来区分不同的浏览器

URL编码

  • 但是网络标准协议中却规定了URL中只能包含英文字符。

  • 我们能在浏览器地址栏看到中文都是浏览器本身的功能,实际上任何中文都需要base64编码才能被正确识别,这种情况是因为编码问题,地址栏只支持ASCII

  • 这个“%”其实只是分隔符,如果把“%”替换成空格,就可以看到我们熟悉的编码结果了,比如上面的“e5 82 bb e5 91 80”,眼尖的读者可能会看出这就是中文的UTF-8的编码。

  • UTF-8(8位元,Universal Character Set/Unicode Transformation Format)是针对Unicode的一种可变长度字符编码。它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与ASCII相容,使得原来处理ASCII字符的软件无须或只进行少部份修改后,便可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。

  • 《信息交换用汉字编码字符集》是由中国国家标准总局1980年发布,1981年5月1日开始实施的一套国家标准,标准号是GB 2312—1980。GB2312编码适用于汉字处理、汉字通信等系统之间的信息交换,通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。

简单理解HTML、CSS和JavaScript

  • HTML(HyperText Markup Language)是超文本标记语言。

  • CSS(Cascading Style Sheets)是级联样式表。

  • JavaScript 是一种脚本语言,主要用于前端页面的DOM处理。

跨域与同源

Cookie和广告联盟

  • 为了让服务器识别请求者,请求者需要在发送请求时带上自己的身份信息,这个身份信息的学名叫作Cookie。

HTTP Header是什么

  • HTTP 协议的 Header 是一块数据区域,分为请求头和响应头两种类型,客户端向服务区发送请求时带的是请求头,而服务器响应客户端数据时带的是响应头。

  • Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

简单理解HTTP的GET和POST

  • 在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。GET - 从指定的资源请求数据。POST - 向指定的资源提交要被处理的数据

WebSocket是什么

  • WebSocket是 HTML 5的一个主要特性,它是建立在TCP上的一种全双工协议,也就是说客户端可以向服务器发信息,服务器也可以向客户端推送消息。WebSocket 在首次建立连接时,使用普通 HTTP和服务器通信,同时告诉服务器后面的交互用WebSocket的方式。在WebSocket连接建立后,往来的消息都可以通过这条管道发送,同时客户端与服务器也会不断地用ping-pong的方式保持心跳,防止连接异常断开。

  • WebSockets不仅限于聊天/消息传递应用程序。它们适用于需要实时更新和即时信息交换的任何应用程序。一些示例包括但不限于:现场体育更新,股票行情,多人游戏,聊天应用,社交媒体等等。

  • Ping和Pong是websocket里的心跳,用来保证客户端是在线的,一般来说只有服务端给客户端发送Ping,然后客户端发送Pong来回应,表明自己仍然在线。

  • 全双工和半双工的区别是:全双工允许数据在两个方向上同时传输;半双工允许数据在两个方向上传输,但是同一时间数据只能在一个方向上传输,实际上是切换的单工。

“直出”是什么

  • 提升加载感受的方法:直出、异步加载、缓存、websocket提升开发效率:iframe

  • DNS就是把域名和IP地址联系在一起的服务,有了DNS服务器,你就不用输入IP地址来访问一个网站,可以通过输入网址访问

  • 浏览器直接输出渲染好数据的HTML页面,简称“直出”。直出没什么神秘的,只不过需要Node.js的支持,服务器和前端都用JavaScript语言编写,相当于在服务器上也运行一个浏览器,它把渲染好的内容直接输出给客户端的浏览器。

互联网的黄金矿工:爬虫

  • 网络爬虫的作用就是抓取某个指定网页的数据并存储在本地

  • 一部分是网页的有效内容,可以用来建立搜索关键词的索引,这部分数据先存储起来;另一部分就是网页中的URL链接,这些链接可以作为下一轮爬虫抓取的目标网页,如此反复操作,也许整个互联网的网页都可以被抓取下来。

  • 如果网站运营者不愿意网站内容被爬虫抓取,那么可以在网站根目录下放一个 robots.txt 文件,在其中具体描述该网站的哪些页面可以被抓取,哪些不能。

简单理解单页Web应用

  • 多页 Web 应用随处可见,随便一个新闻网站上面都贴满新闻的链接,打开之后就会出现一个新的新闻页面。这种包含多个页面,通过链接切换的网站,就是多页Web应用

  • 单页 Web 应用 (single-page application 简称为 SPA) ,它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML、JavaScript 和 CSS。一旦页面加载完成了,SPA不会因为用户的操作而进行页面的重新加载或跳转,取而代之的是利用 JavaScript 动态的变换HTML的内容,从而实现UI与用户的交互。由于避免了页面的重新加载,SPA 可以提供较为流畅的用户体验。

  • 多页面的网站结构,打开一个链接后,还要等很长时间整页才刷新,用户体验不好。应该只刷新变化了的部分,俗称局部刷新,像单页 Web 应用那样单独请求想要的数据自己刷新才是最合理的。

锚点与网页内跳转的实现

  • 这个锚点的跳转仅仅是浏览器的操作行为,并不会发起任何网络请求和服务器交互。

  • 利用锚点的特性不仅能完成这种页面位置跳转的小功能,还可以改变浏览器的访问历史。当在不同的锚点间切换时,浏览器是可以后退的,每变化一次锚点的值(也就是#后面的值)都将增加一条浏览记录。有一些单页Web应用是靠锚点来切换当前页面的,利用的就是这个特性。当然,也可以利用一个叫History API的浏览器接口实现单页Web应用。

前端如何适配手机屏幕

  • viewport俗称“视口”,用来描述一块区域,浏览器可以在这块区域上排版、渲染网页。

简单理解“盗链”与“反盗链”

  • 大部分浏览器在请求一个资源时会将当前网页的域名放在HTTP请求头的refer字段里,服务器只需要判断这个域名是否属于允许请求该资源的站点,如果“是”,就返回正确内容,否则就返回一张反盗链警告图片。

广告过滤机制科普

  • 如何屏蔽广告

  • 第一个办法是单个击破。这个办法适用于那些大家经常访问的网站,因为它们的网站比较大,广告的规则不会变化得那么频繁。

  • 第二个办法是摸透大公司的广告系统。这个办法适用于一些中小网站,它们不会自建广告系统,而是使用大公司的广告系统。这些广告系统的规则也是相对固定的,只要将它们摸透,就可以将大部分中小网站的广告屏蔽搞定了。

2客户端技术

“骗人”的动画

  • 开发者利用闪屏展示的时间,把应用启动的准备工作在闪屏“后面”做完,同时,还能在闪屏上进行一些运营活动,可谓一石二鸟

  • 于是开发者开动脑筋,想到了办法——退出应用的时候截一张界面的图,启动应用的时候用这张截图代替闪屏做启动动画,看起来就像取消了闪屏。如果哪天用户发现某个应用的启动变快了,但是进了界面却没办法操作,就很可能被“骗”了。

  • 细说Android应用的“续命大法”

    • 第一式:监听系统事件Android系统下达指令时,它会通知与这件事情相关联的所有应用。有些应用就会把自己唤醒,悄悄地躺在后台。

    • 第二式:守护进程唤醒很多应用在启动后,还会创建一个守护进程,在后台不断地检查应用进程的运行状态,一旦应用进程停止运行,它就默默地施法,把应用复活。

    • 第三式:“全家桶系列”不同应用之间相互唤醒,当应用A被“杀死”后,“同门兄弟”B就会将它“复活”。还有的情况是,只要启动了A,它就会把它的“同门兄弟”B、C、D 都唤醒。这招之所以只有少数“大佬”拥有,是因为使用它的前提条件是用户手机里安装了同一个公司的多个应用,国内也只有少数几家公司拥有这个资源。

Hybrid APP

  • 所谓Hybrid APP,就是指使用原生和H5两种UI呈现内容。

  • 原生页面为了展示丰富的内容,一般需要利用大量控件进行组合,所以当读者看到某个页面布满了框时,就可以判断出这部分肯定是基于原生UI呈现的

  • 何时使用原生UI

    • 对流畅性体验要求较高的场景
      • UI样式相对固定,不会频繁变化
        • 交互复杂
  • 何时使用H5页面

    • 较强的动态运营需求

    • UI样式复杂多变

    • 交互简单

    • 多平台复用

手机传感器知多少

  • 磁场传感器:磁场传感器可以测定出手机在x、y、z三个方向上的磁场强度,用户旋转手机,直到只有一个方向上的值不为零时,手机就指向了正南方。很多手机上的指南针应用,都利用了这个传感器的数据。同时,可以根据三个方向上磁场强度的不同,计算手机在三维空间中的具体朝向。
  • 加速度传感器:如果手机水平放置,那么z方向上的值,就是当前的重力加速度G;加速度传感器的另一个用处是计步。当用户拿着手机运动时,手机会随着身体上下摆动,加速度传感器就会检测出加速度在某个方向上来回改变,通过计算来回改变的次数,可以得出步数。
    • 三轴陀螺仪:三轴陀螺仪可以测定出当前手机在x、y、z三个方向上的角加速度,这个功能主要用来检测手机的旋转方向
  • 指纹传感器:指纹解锁已经是智能手机的标配功能,它的实现完全依赖于手机中嵌入的指纹传感器。指纹传感器按技术可以分为光学式、电容式及射频式3种。手机上普遍采用的是电容式指纹传感器。
    • 近距离传感器:它能够检测手机附近物体距手机正面的距离,它依靠一个小型雷达实现,通过发射一些脉冲信号并检测返回时间计算距离。
  • 光线传感器:光线传感器检测手机正面接收的光照强度,从而对应地改变手机屏幕的亮度,让用户在不同光照下都能看清屏幕。
    • 气压传感器:iOS中的健康应用可以计算出用户爬了几层楼
  • 温度传感器:有的手机自带温度传感器,可以获取当前环境的温度。

定位终端设备位置的方法有哪些

  • 这些APP获得了定位权限后,就会通过系统接口获取当前手机的经纬度,上传给服务器。有的服务器拿到位置后,会查询一些附近的商家推荐给用户,这就是团购APP的原理。

  • GPS 定位靠的是天上的卫星(如图2-6所示),这些卫星会不断地广播自己的信号。定位时,GPS信号接收器收集至少4颗卫星发出的信号,用收到信号的时间乘以光速可以算出手机和每颗卫星之间的距离,再加上每颗卫星的位置已知,就可以确定手机的位置。

  • 操作系统统一实现了定位需要的复杂的系统。当应用程序需要确定当前设备的地理位置时,只需要添加两三行代码,直接从系统中获取即可。

客户端推送实现方式

  • 推送就是为了解决这样的困境,它给了服务器一个展示自我的机会,主动连接所有 APP,要求客户端再发起一次请求,于是收到推送的 APP(即使此时已经被用户关闭)又去服务器请求最新的新闻,这样用户就能看到最新的新闻了

  • APP和后台的连接方式有两种,一种叫pull,也叫轮询,就是定期地不断向后台请求,缺点是耗电,费流量,不环保;另一种叫 push,APP 和后台一直维持了一条通信通道,不定期地发送心跳包,也能携带信息。缺点是要维持一条长连接通道,这条通道如果不用一些特殊手段保持连通性,很容易受系统或其他安全软件的影响而断开。

为什么美颜APP可以美颜

  • 千万不要用CPU做滤镜算法的运算,而要用OpenGL充分发挥GPU的能力,因为GPU的设计原理最适合这种工作量大又没有难度的重复计算任务。

  • 图形处理器(英语:Graphics Processing Unit,缩写:GPU),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上做图像和图形相关运算工作的微处理器。

听歌识曲的基本原理

  • 提取乐纹,计算频谱图,分段,标记特征点。特征点相同根据排列、时间间隔因素区分
  • “以图搜图”的功能通过对图片进行缩放、灰度处理,最后提取出一个64位的散列值作为特征码,用它去做匹配。
  • 总结一下,听歌识曲的实现方式是对数据库里的所有音乐提取乐纹。对每一首音乐,先算出它的频谱图,然后把它分成几个片段,每一段都在频谱图上找几个点作为特征点,从而生成这一片段的乐纹。一首歌通常有很多乐纹,都以倒排索引的形式存储在数据库里。对于上传的录音,也是先提取它的乐纹,然后在数据库里进行检索,最后考虑乐纹的排列、时间间隔等因素,找到最相似的音乐。

朋友圈中的图片缓存系统

  • 一级缓存(内存缓存),越大用户可同时浏览更更多照片,但消耗更多内存

  • 二级缓存(磁盘缓存)根据不同需要,选择不同的缓存策略如:微信通讯录不缓存过多头像(追求滑动列表流畅性),新闻客户端缓存每张图片(让用户对每条新闻感兴趣)

  • 缓存系统通常分两级,称为一级缓存和二级缓存。一级缓存也叫内存缓存,二级缓存也叫磁盘缓存(在硬盘或者SD卡上的缓存)。

应用的生命周期

  • 应用的生命周期是对应用在宿主的环境中从创建、运行到消亡的一种过程描述。对用户来说,直观的感受是应用的启动、前台运行和退出。
  • 产品经理了解了应用的生命周期后,再去使用应用时,就可以判断出程序设计的优劣,偶尔还能提一些建设性的意见。

3 开发技术

“空指针”是什么

  • 虽然空指针听起来好像很厉害,实际上写一个空指针的Bug只要两步:第一步A=null。第二步A doSomething。
  • if(A !=null)A doSomething;

程序中的“越界”是什么

  • 数组越界和空指针都属于异常,这两种异常都是 Bug界的“不死鸟”
  • 程序员要存储的数字超过了他选用的数据类型所能表示的最大范围时,就会发生数据范围越界。

编程五分钟,命名两小时

  • 程序设计里最难的两件事,一件是保证缓存一致性,另一件就是命名

  • 1.英语差

  • 如果英语不地道,命名很难达到出神入化的境界。

  • 2.读书少

  • 比较著名的有匈牙利命名法,它要求命名变量的时候采用“作用域+类型+名字”的规范。

  • 还有一种同样常用的命名法——驼峰命名法:除第一个单词外,将其他单词的首字母大写连接起来,看起来像一个一个的驼峰

  • 3.不是所有的程序员都是架构师

开发动画需要多少工作量

  • 作者就以Android系统为例,介绍最基本的4种动画:位移动画、缩放动画、渐隐渐现动画和旋转动画。这4种动画虽然效果不同,但都作用在控件上。
  • 1.位移动画
    • (1)动画开始时控件的起始位置。(2)动画结束时控件要到达的位置。(3)动画的持续时间。
  • 2.缩放动画
    • (1)动画开始时控件的缩放倍率。(2)动画结束时控件的缩放倍率。(3)动画的持续时间。
  • 3.渐隐渐现动画
    • (1)动画开始时控件的透明度。(2)动画结束时控件的透明度。(3)动画的持续时间。(4)设置重复次数。(5)设置重复模式。
  • 4.旋转动画
    • (1)动画开始时控件的旋转角度。(2)动画结束时控件的旋转角度。(3)动画的持续时间。

耦合与解耦

  • 当公司需要开发一个应用时,往往会将应用中的各个功能分配给不同的程序员,但各个功能在联动时会直接互相调用对方提供的方法,这就是耦合的温床。
  • 还有各种设计模式也是可以帮助解耦的,原则就是避免直接交叉,不将A功能的代码写在 B 功能的代码中。如果两者之间需要交互,可以通过接口、通过消息,甚至可以引入框架。
  • 如果产品经理能够预见未来独立化的趋势,在初期提醒开发人员也未尝不可。
  • 栈和队列都属于线性表,它们本质上和数组、链表没有区别,甚至很多版本的栈与队列的底层就是用数组来模拟的。每一种数据结构都是用来解决一些特定的问题的
    • 栈是一种“先进后出”的数据结构。
    • push操作需要把数据添加到数组的末端,pop操作需要删除最后一个数据。这么一来,一个栈就实现了。
    • 栈溢出就是指APP用的内存不小心超过了系统的限制,被系统强制结束。
  • 队列
    • 队列是一种“先进先出”的数据结构。所谓进,就是数据的插入,所谓出,就是数据的删除。
    • 如果你的数据在处理过程中需要保持原有的顺序,用队列来处理,准没错。

为什么有些Bug不能改

  • 1、即将上线,不敢轻易调整
  • 2、刻意留的bug,用于隐藏更严重的问题
  • 3、开发需求、开发人员来回变动,后面无法看懂之前的代码,不敢轻易变动。

加载等待的艺术

  • 一般来说,模块离 CPU 越近,运行速度就越快,大体的速度快慢排序是寄存器→高速缓存→内存→硬盘→网络。

  • 加载动画的使用方法是:当用户跳转到一个新的场景,或者加载一个新的网页时,必须要执行一些CPU或I/O密集型的耗时任务才能让用户看到内容,这时前台让用户先看到加载动画,后台开启新线程执行这些任务

  • 并行计算在计算机世界中有两种实现方式:时间上的并行和空间上的并行。

  • 实现并行计算的前提条件是被执行的任务可以被拆分成多个可独立执行的子任务。

  • 系统进行调度的基本单位是线程和进程,多核操作系统就是将相互独立的线程和进程分配到不同核心上,达到并行计算的目的。

简单了解进程间通信

  • 进程是程序实体的运行过程,是系统进行资源分配和调度的独立单位。”

  • 基于文件的通信方式。

  • 基于管道的通信方式。

  • 基于共享内存的通信方式。

  • 除了上述3种通信方式,还有基于信号(消息)、信号量和套接字的方式。

  • 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。

  • 套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口。

  • 线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

“编不过”是怎么回事

  • 计算机世界中负责这种翻译的是编译器,它的任务就是把高级语言翻译成低级语言(也有编译器把低级语言翻译成高级语言,即反编译)

  • C语言通过编译器编译得到的目标语言是和硬件平台相关的,也就是说,在一个平台上编出来的程序需要在另一个平台上重新编译才能在对应的平台上运行,而Java的编译器统一输出为JVM(Java虚拟机)能懂的中间语言(字节码),只要对应的平台上安装了JVM,就能直接执行Java程序。

  • 程序员说的“编”就是编译器在进行翻译,“编不过”就是编译器在翻译的过程中发现有单词和语法不符合规范,向程序员提出警告:必须按照规范来,否则不予通过。

程序“挂了”是怎么回事

  • 1.都是程序员的错
  • 这种问题的产生原因一般是程序员在设计算法时欠考虑,没有对可能遇到的异常状态做处理。常见的异常状况有空指针、数组访问越界等。一般来说,那些出现概率很高的导致应用“挂掉”的问题,大多是出于这类原因。
  • 2.操作系统不靠谱
  • 造成应用程序“挂掉”的根本原因,是程序运行到了一个自身无法处理的异常状态,在这种状态下,应用程序只能选择强制退出,才能终止这种异常状态。

简单说说操作系统

  • 现有的操作系统中有三款最流行,分别是微软公司的Windows、苹果公司的Mac OS和开源的Linux。
  • Windows
  • 操作系统没有界面一样可以实现任务处理、完成用户的操作。只是有了界面,用户操作起来更方便。
  • Mac OS
  • 开发者在一种UNIX系统上开发的软件,在其他UNIX系统上也能运行,所以才制定了POSIX标准接口。
  • Linux
  • 一个操作系统需要以下这些能力:
    • 1.启动:自检完成后,CPU 会加载硬盘上的第一块存储单元,这里往往存放着能够加载操作系统的代码,叫作BootLoader程序。
    • 2.内存管理和进程管理:一般内存分为物理内存和虚拟内存。简单来说,物理内存就是实际的内存大小。虚拟内存是给操作系统里的应用程序看的,有时物理内存只有 2GB,但是应用程序需要4GB,于是就虚构一块出来,通过内存的换页机制蒙混过关。
    • 3.文件系统
    • 4.给上层的APP一套好用的API

什么是代码混淆

  • 代码混淆并不是加密代码,它只是让代码看起来比较难懂,但是机器的执行逻辑是一样的,增加的是人为分析的难度和时间成本。

程序员遇到Bug时会做些什么

  • 常见的调试方法就是断点
  • 打断点,日志记录,该释放的内存没有释放等三种调试方式,解决bug问题

应用“续命”大法之异常捕获

  • 异常捕获就是开发者知道程序运行到这里可能会崩溃,但是又没什么好办法处理,于是强行让程序绕过去避免崩溃,如果这里对程序后面运行影响不大,那么程序还能保持健康状态继续运行下去

搜索引擎的基石:倒排索引

  • 为了加快搜索速度,我们需要建立一个相反的索引的列表。在爬虫抓取回一个网页后,先对它进行分词处理,然后把这些提取出来的关键词与这个网页的ID做一个映射,这就是倒排索引(Inverted Index)。

简单理解面向对象

  • 面向过程指的是程序员接到需求,把它拆成一个一个的命令,然后串起来交给计算机去执行。
  • 面向对象最重要的两个特性
  • 1.自己的事情自己做2.面向接口编程

简单理解重构

  • 代码重构是软件开发过程中提高开发效率和质量的重要手段
    重构就是在保留现有功能的基础上,重新梳理软件中的代码结构,让原本杂乱无章的代码重新具有可读性、结构性和扩展性,增加软件的开发效率,优化程序的性能。重构的范围可大可小,大到涉及整个产品的各个模块,小到一个函数。

流水线技术

  • 流水线技术是指,在重复执行一项任务时,可以把它细分成很多小任务,让这些小任务重叠执行,来提高整体的运行效率。

多线程是什么

  • 多线程有两层含义:(1)开启多个线程做不同的事情,目的是并发同时做很多事情。(2)开启多个线程做同一个事情(比如前面举的放水的例子),目的是提高效率。

复用的艺术:线程池

  • 程序员的世界里,像线程池这样的池还有很多,比如对象池、连接池、指令池等。把一个东西“池化”是一种很典型的复用思想,它的核心就是,如果可以重复使用某些东西,就尽量不要销毁它。

4网络技术

网络基础之协议栈

  • 原始数据首先被拆解并编码,然后转化为电平或者光信号,最终在物理介质上传输。原始信息的“分解”和“还原”都是在计算机网络协议栈中进行的。
  • 协议栈模型1. 应用层2. 传输层3. 网络层4. 数据链路层5.物理层
  • 分层的另一个好处是使得每一层都可以被独立设计,只要保证与上下两层的“接口”(数据传输方式)保持一致即可。

互联网是如何提供服务的

  • 互联网上“一切皆下载”。

IP地址枯竭的后悔药:网络地址转换

  • 私有地址(Private address)属于非注册地址,专门为组织机构内部使用。在现在的网络中,IP地址分为公网IP和私有IP地址。公网IP是在Internet使用的IP地址,而私有IP地址是在局域网中使用的IP地址。
  • NAT技术有三种实现方式:
  • 1.静态转换(Static NAT)
  • 2.动态转换(Dynamic NAT)ISP(Internet Service Provider)即因特网服务提供商,能提供拨号上网服务、网上浏览、下载文件、收发电子邮件等服务,是网络最终用户进入Internet的入口和桥梁。它包括Internet接入服务和Internet内容提供服务。ISP提供的接入方式很多,目前比较流行的方法有局域网(LAN)、宽带ADSL以及普通拨号上网(dial-up)。
  • 3.端口多路复用(OverLoad)
    NAT技术将内网主机屏蔽在一个或几个外网IP地址后,降低了内网主机直接暴露到外网上的安全风险。另外,端口多路复用技术大大地减少了IP地址的需求量,减缓了IP地址的枯竭。

PING和网关

  • PING是 TCP/IP协议簇中的一部分,它的原理是向目标 IP地址发送一个数据包,如果对方返回一个同样大小的数据包,则证明连通,并且整个过程能够测试时延。

端口二三话

  • “端口”,顾名思义,是终端留给外部的接口,是不同设备间通信的桥梁。
  • 驱动是外部硬件设备与计算机交流时的翻译。

TCP与UDP

  • TCP(Transmission Control Protocol)即传输控制协议,IP(Internet Protocol)即因特网互联协议。
  • TCP/IP 是一个协议簇,也就是许多协议的集合。
  • TCP/IP又分为4层,分别为应用层、传输层、网络层和物理层。
  • 第一种通信前需要双方都应答的通信方式对应的是 TCP,第二种只管发送成功而不管接收是否成功的通信方式对应的是 UDP。
  • 三次握手建立连接阐述:第一次握手:客户端要和服务端进行通信,首先要告知服务端一声,遂发出一个SYN=1的连接请求信号,”服务端哥哥,我想给你说说话”。第二次握手:当服务端接收到客户端的连接请求,此时要给客户端一个确认信息,”我知道了(ACK),我这边已经准备好了,你现在能连吗(SYN)”。第三次握手:当客户端收到了服务端的确认连接信息后,要礼貌的告知一下服务端,“好的,咱们开始联通吧(ACK)”。from CSDN

TCP凭什么说自己可靠

  • TCP 的可靠并不是指通过TCP发送的数据都能100%发送成功,而是指发送方能明确地知道所有已发送数据最终的状态。
  • TCP保证可靠性的手段。
  • 1.顺序编号
  • 用TCP传输一个大文件时,文件会被拆分成多个TCP数据包发送到网络,TCP会对每个数据包进行顺序编号,这是它提供可靠传输的基础。
  • 2.确认机制
  • 当数据包成功传输到接收方时,接收方会遵循 TCP 向发送方反馈一个“成功接收”的信号(Acknowledgement,ACK),这个信号会带上当前数据包的序号,这样发送方就可以明确地知道“包裹”被正常“投递”了。
  • 3.超时重传
  • 发送方每发送一个数据包,都会为这个数据包做一个定时器。如果定时器归零时,发送方仍然没有接收到接收方的 ACK,就会对这个数据包进行重传,直到链接被断开或者接收方收到ACK。

谈谈UDP的可靠性

  • 什么是反向代理
  • 我们通常说的“代理”,都是指客户端向外界发起请求时,并不直接与目标服务器连接,而是将所有请求交给一个代理服务器,由它负责连接外界的目标服务器。

CDN是什么

  • CDN(Content Delivery Network,内容分发网络)
  • CDN的作用:它是一个基于互联网的数量巨大的服务器集群,专注于内容和资源分发,为用户提供快速访问资源的能力,进而提升内容访问的体验。

断点续传的奥义

  • 推送服务的核心:长连接
  • 如果每次获取数据都创建一个独占的连接,并在数据传输完毕后释放,这种连接就叫作“短连接”。而一个能够供多个请求多次传输数据,并在数据传输后不会立即释放的连接称为“长连接”。
  • 1.短时间内,向同一个服务器发起多次数据请求
  • 2.实现PUSH功能

HTTPS技术简介

  • HTTPS在HTTP和TCP之间添加了一层SSL协议。SSL是用来保障网络上数据传输安全的一套协议,它在传输层对HTTP进行封装加密,然后将数据交由TCP发送到网络上。

讲讲代理服务器

  • 代理服务器架在客户端和真正服务器中间,作用是替客户端访问真正的服务器。
  • 很多手机浏览器的省流加速功能,其实就是通过代理服务器达到节省流量的目的

聊聊Wi-Fi技术

  • 就近接入:怎样让用户找到最近的机房
  • 互联网数据中心(Internet Data Center)简称IDC,就是电信部门利用已有的互联网通信线路、带宽资源,建立标准化的电信专业级机房环境,为企业、政府提供服务器托管、租用以及相关增值等方面的全方位服务。
  • 域名系统(英文:Domain Name System)是Internet上解决网上机器命名的一种系统。DNS作为将域名和IP地址相互映射的一个分布式数据库,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP数串。
  • 就近接入,就是利用DNS服务找到离用户最近的机器,从而达到经由最短路径提供服务的目的。DNS 服务还可以找到某公司的所有机房和 IP,从而进行流量的调度。

Socket简介

  • Socket是什么?它其实是一套API,封装了TCP/IP。
  • 基于HTTP的连接是短连接,客户端请求一次数据,就主动和服务器断开了,Socket则不是,默认情况下,双方会一直保持联系。
  • Socket不仅可以用来和别的计算机进行通信,还可以作为进程间通信的一种方式,让两个进程产生联系。

什么是HTTP 302跳转

  • 302状态码应用的典型场景是服务器页面路径的重新规划
  • 这个应答即状态码(status code),在HTTP协议里以三位数标识,共分为5类,分别为1××、2××、3××、4××和5××,如表4-3所示。

神奇的Hosts文件

  • Hosts文件给了用户一个自己决定命运的机会:用户可以在 Hosts 文件中,指定某个域名对应的IP地址,系统在发起网络请求时,会优先使用Hosts文件中的IP地址,这样就达到自主决定使用哪台服务器的目的。

释放你的小水管:说说下载速度那些事儿

  • 这涉及HTTP底层的TCP对网络堵塞控制的原理,本节不细讲
  • 离线下载其实就是下载工具的服务器代替电脑用户先行下载,多用于冷门资源。比如,电脑用户的正常下载最大速度能达到200KB/S,但是某个资源是冷门资源,下载速度只能达到10KB/S,电脑用户就得下很久,如果用户使用离线下载技术,就可以让服务商的服务器代替电脑用户下载,电脑用户就可以关掉下载工具或者机器,节约时间和电费。等到离线下好了,电脑用户再从下载工具的服务器上以200KB/S(理论上会员等级越高越快,但最高速度仍然受限制于你的本身宽带)的速度下到自己的电脑上。即使对于热门资源,离线下载也能省却许多挂机等待的时间,最重要的是能够腾出电脑宽带做其他的事情。优势随着互联网接入服务运营商对P2P下载的封锁,使得P2P用户无法再占用他人带宽高速下载互联网资源。针对这一情况,可以采取的办法就是采用离线下载。

下载劫持简介

  • VPN简介
  • VPN(Virtual Private Network)就是虚拟专用网络。
  • VPN 就是一条在公共网络上虚拟出来的专用通道,来满足用户自由交流不被窃听的需求。

5 网络安全与后端技术

密码存储之开发指南

  • MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件

密码存储指南

  • 为什么账号会被盗呢?
  • 第1种可能是密码太常见。
  • 第2种可能是密码太简单。
  • 第3种可能是我们访问的网站不幸被“拖库”。
  • 第4种可能是网站被“撞库”。

Web安全之SQL语句

  • 产生SQL注入漏洞的原因也很简单:开发者没有对用户提交的内容进行审核,导致恶意 SQL 语句被执行。
  • 这种通过在提交的数据里加入SQL代码巧妙地改变后台SQL执行逻辑的攻击方式,就是SQL注入攻击。
  • 永远不要相信外界输入的数据,对任何外界输入的数据都要做合法性的校验。

Web安全之XSS

  • XSS(Cross Site Script)攻击的全称为“跨站脚本攻击”,指的是攻击者在正常网页中注入恶意脚本,当用户访问该网页时,恶意脚本会在用户浏览器上执行,从而窃取用户Cookie或者导航到恶意网站等,达到攻击的目的。
  • 防范 XSS 攻击的主要方法就是检测用户提交的数据中是否有可执行的脚本,将其中的 HTML 标签都转换为普通的文本。在此之后,还可以启用浏览器的内容安全策略(Content Security Policy),使用白名单机制管理本网站允许加载的内容,同时禁止向未知的网站发送请求。

Web安全之CSRF

  • CSRF(Cross Site Request Forgery)意为“跨站请求伪造”。
  • CSRF 攻击的本质是,浏览器无法区分一个请求是用户在当前网站自愿发起的,还是其他网站模拟用户行为发出来的。

ARP欺骗的原理

  • 攻击者利用ARP攻击能达到什么目的呢?
  • 1.制造网络中断
  • 2.ARP欺骗,中间人攻击

DDoS的原理

  • DDoS(Distributed Denial of Service)的中文译名是分布式拒绝服务。DDoS的基本原理是通过对服务器发送大量无用的请求耗尽服务器资源(CPU、内存等),导致服务无法正常运行,正常请求无法得到响应。
  • 一般DDoS攻击者有两种途径达到目的,一种是通过向流量平台租赁流量实现流量攻击,另一种是通过种植“肉鸡”构建僵尸网络,利用云控指令对被攻击者发起攻击
  • 方案一:硬扛,增加服务器的硬件和带宽资源,将攻击者的流量全部接受后,还能服务正常用户,但是这会消耗大量的财力物力,中小型网站都无力承担这样的成本。方案二:寻找专业的流量清洗服务,使用对抗DDoS的软硬件系统将攻击流量和正常流量区分开,将正常流量回源到网站继续服务,同时把攻击流量屏蔽丢弃,相当于给网站做了一层DDoS防火墙。

Android应用二次打包

  • 一种办法就是校验签名,因为“二次打包者”使用的签名肯定和原作者不一样,所以可以在应用的一些关键流程上,进行签名校验(最好让后台来校验,如果写在应用里,可能校验逻辑也被篡改),如果校验出该签名为非法签名,则直接停止运行应用。另一种办法就是进行应用加固处理,让“二次打包者”无法反编译原应用,或者即使反编译了,也不能重新成功打包,同样可以避免损失。

那些年中过的病毒

  • 病毒通常会使用系统盘的WINDOWS\system32\drivers

家庭Wi-Fi防“蹭网”指南

  • 1.定期更换Wi-Fi密码
  • 2.使用更好的加密方式
  • 3.隐藏无线网络SSID
  • 4.关闭DHCP服务
  • 5.开启MAC地址过滤功能

后台服务之RPC框架

  • RPC(Remote Procedure Call,远程过程调用)
  • RPC是一种方法,RPC框架是基于RPC方法封装的一套框架(它提供了一套方法和工具,将每个人都要面对的问题封装起来,使你能够在这个框架上开发出适合你业务的应用程序,也就不用再关心底层的网络、协议的实现,只需关心上层业务逻辑即可)。

后台服务之RESTful API

  • REST 并不是我们理解的英语单词“REST”,它是 Representational State Transfer的缩写,意为“表现层状态转化”。REST是一种定义API的风格。
  • 服务器收到请求的URL都相同,但是它可以根据请求来的动词区分前端到底想调用哪个API,这便是REST的精髓所在

Session是用来做什么的

  • 后台能通过一个编号知道客户是谁,并且可以知道该用户的状态,后台记录的这个编号叫Session ID,这个机制称为Session。
  • Session解决了HTTP无状态的问题,这种机制相当于给每个用户分配了一个身份,从而完成对用户的识别,也将用户多次不同的操作关联在了一起。

后台服务之流量控制

  • 第一种是“漏桶算法”。
  • 第二种算法——“令牌桶算法”
  • 对于后台服务来讲,保证稳定性和可用性是第一要务。流量到达服务处理极限时,对部分流量提供有损服务也是合理的。

后台服务如何生成唯一ID

  • 1.数据库
  • 常见的数据库都提供自增长ID的功能,也就是每插入一条新数据,这条数据的ID就在前一条数据的ID上加1,从而保证唯一性。
  • 2.UUID
  • UUID(Universally Unique IDentifier)是一种不依赖于中央服务器的ID生成方案,它包含了32个十六进制的数字,以连字号分为五段,形式为8-4-4-4-12,如550e8400-e29b-41d4-a716-446655440000
  • 3.雪花算法
  • 雪花算法的特点就是,在保证唯一性的同时,生成的ID的长度比UUID减少了一半,因而更加节省空间,同时它的时间戳填充在高位,因而ID越晚产生,其长度就越长,保证了ID按时间递增的要求。

6名词解释

抽象、封装、类、实例和对象

  • 面向对象的程序设计是当前世界上最流行的程序设计思想和方法,而抽象、封装、类、实例和对象都是构成面向对象程序设计的基本概念。
  • 对事物进行“抽象”,从而封装为“类”,由“类”可以生成“实例”或“对象”。

SDK、API和架构

  • SDK是Software Development Kit的简称,中文名称是软件开发工具包,是基于当前系统或者平台的一整套开发工具的集合。
  • API是Application Programming Interface的简写,中文称为应用程序编程接口。
  • 架构指一个软件系统的结构,是考虑了一个软件系统的所有设计要素、梳理清楚模块划分及模块之间的关系后形成的一种结构设计。

控件、组件和框架

  • 控件表示程序设计中最小粒度的可复用可编程的部件。
  • 我们可以把组件简单理解为一个组合功能的控件,功能比一般控件要复杂,交互也更复杂

二进制文件

  • 用二进制文件存储数字要比用文本文件存储省空间。
  • 二进制文件更省空间,写入速度更快,因为可读性很差,所以还有一定的加密保护作用
  • 脚本,是使用一种特定的描述性语言,依据一定的格式编写的可执行文件。
  • 脚本的运行环境叫作“解释器”,用于理解脚本的含义。脚本语言有很多种,也有相应的配套解释器。
  • 这种由于程序申请了内存,但没有释放内存,导致内存一直处于被消耗的状态,称为内存泄漏。
  • 在计算机中,中间件是位于两个软件中间的软件,广义地讲,中间件一般为应用软件和系统软件之间相互通信的桥梁。

打底数据与云端控制

  • 一个好的产品设计是这样的:本地要默认写死一些常在展示、不怎么变化的频道,这些称为打底数据或默认数据。如果没有这份写死的数据,你的客户端运行时,至网络数据传回前或者无网络时,头部都没有任何信息展示。所以打底数据主要用于解决用户体验问题,在无网络或初次启动时,告知用户这个客户端已经在正常运行。

变量与函数

  • 程序员每天的工作就是定义变量、写函数,然后运行程序,看变量的值是否符合预期,不符合预期则调至符合预期为止。
  • 为整理箱编号的方法,称为散列算法。
  • 散列也称哈希,利用散列算法实现的散列表,是一种与数组、链表等不同的数据结构,它并不需要通过遍历的方法查找数据。
  • Hook 的意思是钩住,也就是在消息过去之前,先把消息钩住,不让其传递,使用户可以优先处理。执行这种操作的函数也称为钩子函数。
  • 配置文件就是一个对软件运行时状态的本地存储形式,我们可以通过改动配置文件来改变软件运行行为或策略。

算法复杂度

  • 算法复杂度的绝对值也是不可能统一的,但可以用一个相对标尺来衡量,即时间复杂度,用大写的字母O来标识。

RGB通识

  • RGB是Red、Green、Blue三种颜色的缩写,称作三原色

应用程序、进程和线程

视频文件与编解码标准

同步、异步和回调

时间戳、MD5和GUID

  • 时间戳(TimeStamp)
  • 消息摘要算法(Message Digest Algorithm),MD5是其中最常用的一个
  • MD5主要解决的问题是,对一个文件或字符串生成一个唯一标识
  • GUID(Globally Unique IDentifier),全局唯一标识符
  • 针对栈有Push和Pop两种操作,分别表示向栈中加入一个元素,从栈中退出一个元素。
  • 堆是由程序员自己申请并控制的一块区域(不用的时候必须做好释放工作),而栈是由操作系统控制的。
  • 序列化与反序列化

理解OpenGL

  • OpenGL的绘制流程大约要经过几个步骤。首先,要把要画的东西拆成三角形之类的基本图形,然后在三维空间坐标系里给它们安排合适的位置,之后把灯光加上去,使要画的东西有一种立体感,最后,把这些东西转化成屏幕上的像素点(即光栅化),整个绘制就算是完成了。
  • 渲染引擎,我们通常称之为浏览器内核,是浏览器中最重要的呈现HTML、CSS、JavaScript的“发动机”。没有它,就看不了网页,一切基于H5的Web生态即刻崩塌。
  • 游戏引擎,提供了一套用来开发游戏工具的组件,它是制作游戏产品的瑞士军刀,是制作游戏最基础最底层的核心部件。
  • 杀毒引擎,就像发动机的核心功能是提供动力一样,它的主要作用就是辨别和侦测病毒,在杀毒引擎之上再包装UI和交互,就形成了一个完整的杀毒产品。
  • 搜索引擎,看起来像是谷歌这样的产品,其实它的核心能力是爬虫、分词和索引
  • 调度引擎

开源许可证

  • GPL证书下的代码是可以免费使用并任意修改的,但是不允许使用它的产品作为商业软件发布和销售。还有一点,用到GPL的产品也必须开源并免费发布,这也是我们可以免费使用各种Linux衍生版本的原因之一。
  • LGPL 的限制相对 GPL 来说要宽松一些,它允许商业软件通过库引用的方式使用声明了LGPL证书的开源代码,但是不能修改它们。商业软件可以自由发布和销售产品,同时不必公开自己的源代码。
  • BSD鼓励代码共享,但需要尊重代码作者的著作权。它对商业集成很友好,因此是商业公司选用开源产品时的首选证书。
  • MIT的限制范围和BSD一样宽泛,它的作者只想保留版权,而无任何其他限制。
  • WTFPL全称是 DO WHAT THE FUCK YOU WANTTO PUBLIC LICENSE,意为“你想干什么就干什么”,简直豪放到没朋友。
  • 渲染的意思是呈现,也就是“显示出来”,浏览器呈现的是HTML,游戏呈现的是3D人物或地图,手机APP呈现的是各种界面。
  • 渲染就是对数据进行一系列计算并呈现的过程,其中包括测量、排版和绘制。用户在任何屏幕上看到的任何一个图形,无一例外,都经过了这三个过程。

WLAN、Wi-Fi与IEEE 802.11

  • 802.11ac实际是基于802.11a的扩展,它支持5G频段,理论上可以达到1GBit/s的传输速度。

位图与矢量图

  • JPG、PNG、WEBP这些常用图片格式都有一个共性——用像素点阵来描述一张图片,我们把这种图片称为位图。
  • 矢量图是由点、直线、多边形等几何图形构成的图像,这些点、线和多边形都是可以用数值和方程式描述出来的。
  • 常见的矢量图格式是以SVG为后缀的文件。
  • 接口就是提供具体能力的一个标准和抽象。
  • 接口象征着提供出来的能力,定义者和实现者一般是不同的,调用者并不需要关注具体细节,只需要关注接口暴露出来的能力就可以了

线程池、对象池和连接池

  • 池化技术就是在充分保障系统效率的前提下,充分复用资源的一种方式,一切皆为了成本和效率。

向前兼容和向后兼容

  • 向后兼容指的是对已经发出去的老版本兼容,向前兼容指的是对还没有做好的版本兼容。
  • (1)建立新表。(2)查询旧表数据,并插入新表中。(3)启用新表。(4)删除旧表。
  • 游戏引擎是游戏世界的基础框架,它定义并实现了游戏中的自然法则。这些法则包括光影效果、动画系统、物理系统、流体效果和渲染系统。

React:流行的前端技术

  • React是Facebook推出的一个前端框架,准确地说,它是一个前端的UI组件库。
  • React自带了一个虚拟的DOM树。无论是要刷新某个文字,还是插入一个广告,都可以直接操作这棵DOM树。它有一个效率很高的比对算法,保证无论你怎么摆弄,它都能把受影响的范围降到最小。

React Native:专治急性子的产品经理

  • React Native是Facebook推出的一个用JavaScript语言就能同时编写iOS、Android及后台的技术

一个React Native的应用是什么样的

  • 冷更新就是需要停止服务器,需要重新打包应用的版本更新方式;热更新就是应用里使用了某种sdk支持直接修改执行代码的更新方式;因为有风险,所以谷歌和苹果商店都禁用热更新。
  • React Native允许开发者使用JavaScript作为开发语言,像写网页一样,用JSX语法布局页面,React引擎会把JSX语法翻译成终端的布局,并依赖终端的能力显示页面。

什么样的业务适合用React Native来改造

  • 动态多变的界面适合用React Native缺点:1.首次加载慢2.多了过程,容易出错,需要添加备用方案
  • Feed是RSS订阅的过程中用来接收该信息来源更新的接口,起源于网景通讯公司(Netscape)的推送技术(push technology)。Feed是一种用于网上新闻、博客和其他Web内容的数据交换规范,是为满足希望以某种形式持续得到自己更新的需求而提供的格式标准的信息出口。

终端开发新思路:Flutter

  • Flutter是一套用Dart语言来写的、兼容Android和iOS的终端开发框架。

一窥微信小程序的技术思路

  • 微信小程序用 JavaScript 作为开发语言,用自己定义的 WXML来描述界面,用WXSS来表达样式,这些也是一个Native APP最基本的要素

如何自己开发小程序

  • 闭包(closure)是计算机编程领域的专业名词,指可以包含自由(未绑定到特定对象)变量的代码块,子函数可以使用父函数中的局部变量。闭包源于要执行的代码块和为自由变量提供绑定的计算环境(作用域)两者的结合,Scala、Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby、 Python、Lua、objective c 以及Java(Java8及以上)等语言中都能找到对闭包不同程度的支持。

8人工智能

如何通俗地理解机器学习

  • 模式识别(pattern recognition)和深度学习(deep learning)
  • 深度学习早期的基本算法模型是神经网络模型,现在已经“进化”为卷积神经网络。

人工智能从业者:专家、工程师和调参程序员

人工智能里的套话该怎么理解

  • “深度学习+文本”就成了自然语言处理,“深度学习+语音”就成为语音识别和语音合成,“深度学习+手写体”就成了手写体识别,“深度学习+人脸”就成了人脸识别,深度学习可以与各种技术结合,应用在各个领域中。

一个最简单的机器学习模型

什么是神经网络

  • 神经网络由很多神经元连接起来,每一条连接都有一个参数。训练神经网络的过程就是不断调整这些参数使得最后的损失函数的值不断变小的过程。最后,算出来的损失函数的值小得不能再小,神经网络就训练好了,可以通过推理来满足我们的产品需求。

神经网络的数据处理

  • (1)数目上每一类差不多,俗称配平数据
  • (2)要求尺寸上差不多
  • (3)没有杂质的意思是,用来学习的图片,最好保持内容的单一纯净
  • 神经网络模型分为有监督模型和无监督模型。有监督是指模型在训练过程中,会有一个正确答案作为指导
  • 训练集、验证集和测试集

为什么你的神经网络像个傻瓜

  • 过拟合
  • 增加训练集,让模型见多识广,自然能轻松应对测试集
  • 欠拟合
  • 一是继续训练,观察它的情况会不会好转。二是检查自己的数据集是否有误,比如训练集的数据特征不清晰,或者有标注错误之类的。

懂你的推荐算法:你应该懂的一些知识

  • 协同过滤算法:具体可以分为基于用户的协同过滤算法和基于物品的协同过滤算法。

程序员的分工

如何正确地提需求

  • 1.提需求要有节奏感:每个版本会经过功能开发、单元测试、集成测试、灰度验证和上线发布几个阶段。
  • 2.先自己尝试评估需求难度
  • 3.下点功夫做准备(这条我比较赞同,在工作中总会面临需要跟其他人对接工作的时候,难免会遇到”鸡同鸭讲"的情况,我一般的会把属于我这部分工作做好,按照自己的能力了解对应的东西后,在同其他人对接,或者是先按照自己的能力做些事情后,在跟其他人对接,效率会高很多)

程序员想要的需求文档

为什么项目会延期

  • 1.关于需求
  • 2.排期与风险控制
  • 3.沟通,还是沟通

目标设定的两种方法

  • 第一种是根据当前目标设定一个进步目标
  • 第二种是参考业界最优秀的产品,设定合理的(追赶或超越)目标。

你只是在为自己工作

为什么产品经理经常焦虑

精益创业的作用

1Web前端技术AJAX技术的妙用AJAX是一项用于异步拉取数据并展示在当前页面的技术1、不用刷新网页2、本地网页从后台调取数据3、缓解用户等待的焦虑感网页没有刷新是指一个空网页渲染到屏幕上,单击网页中的一个链接后,又打开了一个新的网页。其实,这种只让部分页面刷新的技术叫作AJAX(汉语读音为“阿贾克斯”或“额寨克思”),它是“Asynchronous JavaScript And XML”的首字母缩写,翻译为“异步JavaScript和XML”。JavaScri Asynchronous JavaScript And XML(异步JavaScript和XML) 用于异步拉取数据并展示在当前页面的 技术 ,这对需要延迟加载数据和触发式加载数据的页面有很大益处 主要解决不用刷新网页,就能和后台交互获取数据,并应用于当前网页的问题 发起网络请求 由浏览器内置能力提供,借助XmlHttpRequest对象,由网页调用,用来连接一个特定地址 无需刷新,可动态操作网页 DOM(Document Object Model)
俗话说,不会写代码的 产品 经理 不是好的射鸡湿。关于 产品 经理 技术 之间的微妙关系,扯开了 可是长篇大论,比如知乎上这个问题:IT行业 产品 经理 (尤其是创业的)需要懂 技术 吗?懂到什么程度?,以及这个: 产品 经理 如何与强势的 技术 沟通?等等。总而言之, 产品 最终是完全落实到 技术 上实现的,而 技术 的发展可以说是在 产品 上体现了直接价值,二者结合得越紧密,对整个 产品 带来的价值更大,开发效率也会更高。当然,这不是说让 产品 经理 会写代码会设计算法,其实在平时工作中,要是 产品 经理 哪怕稍微下意识地提高自己的“ 技术 思维”,不要做一些在 技术 上看起来“天马行空随心所欲”并且再配一句台词“这么简单的功能,很好实现吧”让人欲哭无泪的台词
关于 产品 经理 需不需要懂 技术 ,这是一个无数次被大家讨论的话题。 首先,做过开发的 产品 经理 在和开发人员的沟通上有优势,但需要注意的是,不要以为自己做过开发了不起,就指手画脚的参与系统设计,不要过多的给出 技术 方面的意见或建议,术业有专攻,况且你都转行了,说不定你所知道的东西并不适合现在。 其次,掌握适当的开发知识便于我们提需求的时候可以考虑 技术 的可行性与投入成本,在跟开发沟通、转达需求的时候能够更有效率。 我们来看一下 产品 经理 的工作职责: 1. 产品 规划:市场分析,战略规划; 2.整理需求:获取需求、评估需求、分
产品 经理 必懂的 技术 那点事儿pdf》是一本针对 产品 经理 技术 知识指南。在互联网 产品 的时代, 产品 经理 必须有丰富的 技术 知识,才能更好地与 技术 团队沟通、协作,推动 产品 的开发和升级。这本书从 产品 经理 需要掌握的基础 技术 、Web前端 技术 、移动开发、服务端 技术 以及数据 技术 等方面进行了深入浅出的解析和 解,让 产品 经理 更好地理解、运用和领导 技术 。其中重点介绍了Web前端 技术 的基础知识和HTML、CSS、JavaScript等的运用,以及移动开发中的iOS和Android的基础知识和应用。另外,还对服务端 技术 的架构、运维、性能优化等进行了详细的介绍,让 产品 经理 可以更好地与 技术 团队进行沟通、协调及对 技术 方案进行评估。在数据 技术 方面,本书也重点介绍了数据库、数据挖掘、大数据等相关 技术 ,让 产品 经理 能够更好地了解 产品 数据,做出正确的 产品 决策。总之,这本书是一本非常实用、高效的 技术 指南,无论你是一名新入行的 产品 经理 还是已经有多年经验的专业人士,都值得阅读和学习。