锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

给产品经理讲技术

时间:2022-12-30 17:30:01 电容器kit50

1Web前端技术

AJAX技术的妙用

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

  • 不需要刷新网页

  • 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是什么

静态网页和动态网页

  • 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,HTTPS443可以理解为计算机提供服务的点很多

  • path:hostname后面的一长串都叫做path,意思是路径,即最终文件所在的路径和文件名,但该地址的文件存储在腾讯服务器上

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

网页基础知识:表单

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

  • 结论:表单是用户与服务器数据交互的用户界面,所有向服务器提交的数据都由几个简单的标签组成。

H5应用缓存简介

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

  • 该技术允许开发者在第一次访问网页时明确指定哪些静态资源可以缓存到本地,并询问服务器是否需要更新本地缓存资源

Chrome里的冷知识

  • DevTools:如果读者在浏览某些网站时按“F开发者工具将在12键启动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处理。

跨域与同源

  • iframe是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。 其元素会创建包含另外一个文档的内联框架(即行内框架)。

  • iframe 里面的 src 字段为www.qq.com。打开这个网页后,会看到腾讯网的整个页面嵌入了这个index.html网页。iframe的意义非常简单,就是将一个URL地址嵌入当前页面并展示出来。

  • 嵌入另一个页面,两个页面的功能可以解耦合,不依赖对方而存在。

  • 只要两个页面的协议、主机名、端口一样,就是同源的,否则就是非同源的。

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样式复杂多变

    • 交互简单

    • 多平台复用

手机传感器知多少

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

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

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

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

客户端推送实现方式

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

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

为什么美颜APP可以美颜

听歌识曲的基本原理

  • 提取乐纹,计算频谱图,分段,标记特征点。特征点相同根据排列、时间间隔因素区分
  • “以图搜图”的功能通过对图片进行缩放、灰度处理,最后提取出一个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的简写,中文称为应用程序编程接口。
  • 架构指一个软件系统的结构,是考虑了一个软件系统的所有设计要素、梳理清楚模块划分及模块之间的关系后形成的一种结构设计。

控件、组件和框架

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

二进制文件

  • 用二进制文件存储数字要比用文本文件存储省空间。
  • 二进制文件更省空间,写入速度更快,因为可读性很差,所以还有一定的加密保护作用

脚本

  • 脚本,是使用一种特定的描述性语言,依据一定的格式编写的可执行文件。
  • 脚本的运行环境叫作“解释器”,用于理解脚本的含义。脚本语言有很多种,也有相应的配套解释器。

内存泄漏

  • 这种由于程序申请了内存,但没有释放内存,导致内存一直处于被消耗的状态,称为内存泄漏。

中间件

相关文章