精华内容
下载资源
问答
  • 原标题:2019 Python后端开发面经总结本人技术栈为Python后端开发,面经如下:python基础部分:1. 迭代器生成器 生成器是如何实现迭代的2. list实现3. import一个包时过程是怎么样的?4. 装饰器实现5. 菱形继承6. ...

    原标题:2019 Python后端开发面经总结

    本人技术栈为Python后端开发,面经如下:

    python基础部分:

    1. 迭代器生成器 生成器是如何实现迭代的

    2. list实现

    3. import一个包时过程是怎么样的?

    4. 装饰器实现

    5. 菱形继承

    6. 内存垃圾回收:分代回收细节

    7. 项目具体

    8. mysql b+树

    9. wsgi

    二面

    1. 堆排序

    2. 比较c语言和Python语言中的异步

    3. epoll

    4. tornado框架

    5. 求二叉树深度

    6. mysql联合索引

    7. wsgi

    8. uwsgi进程模型

    网易互娱(offer)

    一面:

    面试最开始做的笔试题据说需要保密。。就不发了。。

    1. 自我介绍

    2. Python里的eval

    3. Python里的装饰器

    4. 虚拟内存与物理内存区别

    5. Top k问题

    6. 如何用两个栈表示一个队列

    7. 如何判断链表有没有环

    8. epoll

    9. 100个石头,每个人一次可以摸1-5个,甲先摸,问甲有没有必赢的方法;

    10. TCP与UDP的区别

    11. TCP的断开过程

    12. 二叉树的镜像

    工作需求相关面试官建议精通Linux,建议精通socket

    二面:

    1. PythonGIL锁

    2. C++ C 内嵌Python代码

    3. 有没有读Python源码

    4. Python垃圾回收

    5. Python内存泄露

    6. 游戏模型如何确认人身上的胶囊体是否被激光射中(主要就是扯这个题)

    7. 编译原理相关

    滴滴(意向)

    一面:

    1. tcp 三次握手

    2. 如果一个客户端不理会服务端发来的ack,一直重发syn怎么办?(我理解为类似syn洪水攻击)

    3. 拥塞控制 流量控制

    4. socket编程 raw_socket

    5. 从用户态到内核态的汇编级过程

    6. 中断以及系统调用

    7. 不用中间元素交换两个元素的方法,(答:使用异或),又问:不使用异或有什么缺点。。

    8. 亿级元素top k,答:k大小小顶堆,又问:如何多线程改进

    9. 全局变量和局部变量都保存在哪儿

    10. coding:递归翻转链表。。

    二面

    1. 网页相似性比较

    2. LRU(O(1)时间复杂度)

    3. rpc

    4. 多个有序数组合并为一个

    5. 服务感知(客户端如何感知服务端状态)

    三面

    1. 如果地球自转速度降低一半,会怎么样

    2. 项目,讲具体场景实现,情景题

    3. http cookie具体所有相关内容

    4. http传输一个二进制文件的所有过程

    5. coding:顺时针打印数组

    菜鸡一个,运气不错,大家共勉。返回搜狐,查看更多

    责任编辑:

    展开全文
  • 完整后端开发流程

    千次阅读 2019-09-12 10:41:06
    完整后端开发流程 author:乘着风去破浪 所有的bug修复都要回归落地到细节,所有的设计也要回归落地到细节,所以,不浮躁,不着急,重视细节;这样的流程就是省时间的。 不仅仅要关注功能实现(如果只是一门心思...

    完整后端开发流程

    author: 乘着风去破浪 

    所有的bug修复都要回归落地到细节,所有的设计也要回归落地到细节,所以,不浮躁,不着急,重视细节;这样的流程就是省时间的。

    不仅仅要关注功能实现(如果只是一门心思只是从功能实现考虑问题,那么后期的代码会乱糟糟),也要考虑代码架构灵活性,健壮性,可维护性等等;

    做事要抓住核心,无论是做架构设计,还是做自测等等;

    做事不能把需求当做上帝,作为一个项目参与者,你要信奉的是的逻辑,符合用户使用的逻辑,要有自己的逻辑思考和批判精神;这是活力和成长的来源;

    工欲善其事必先利其器:把编辑器字体,把ssh客户端字体等等设置舒服的,不断挖掘它们最好的,做到提升效率

    1.架构概要设计

     

       多个应用之间的调用怎么做(异步,同步,http,tcp,自己开发,还是使用开源的,还是在开源基础上二次开发做精简或者扩展);

     什么情况使用什么技术,依据是什么?(比如你数据量以及数据增长不大,另外,仅需要简单查询,倒排索引可以考虑使用lucene,而不是elasticsearh或者solr)

      网络调用,超时时间怎么设置,设置多少合适,怎么做容错

       数据结构如何设计,数据怎么存储,(倒排,读文件,还是nosql);后面要考虑数据备份,数据量大的情况做sharding等,还有一致性问题等;

       单个应用中的处理流程怎么写(考虑复用,考虑结合设计模式进行抽象);

      设计模式:知道什么场景需要用什么设计模式?比如,需要创建单例,就用单例+工厂方法模式。需要模板,就用模板方法。需要观察就用观察者模式。需要生产消费,就用生产者消费者模式。

     

      要考虑,随着时间变化,数据量是否增速快,如何应对这种数据增速快等情况,架构也要迭代。

    2.日志

      应用日志打印,耗时统计,

    3.异常

      单个应用的异常处理,保证健壮性;

      具体比如使用一个对象的方法前,看看对象是不是为空,看看你传递的参数(比如,你使用一个变量来取subList(1,x),而x可能为0的情况,对不对。

      TODO:只是调用链的最外层打印日志,里面不要打印日志;

    4.配置化

       JVM启动配置化,能够做到不需要打包,直接读取配置重启即可等;

    5.测试

       测试要抓住核心进行测试,如果僻重就轻,那么测试的意义就没有那么大了;

       工欲善其事必先利其器;要学会Idea的高级调试技巧等。这个非常重要,可以提高效率,也可以让你调试更精准;要不断挖掘idea开发工具的提供的特性,提升你调试和开发效率。

       单元测试,集成自测等,mock测试,造数据等;

       要采用多版本管理,一个版本OK了,如果要复现或者修复一个问题,应该使用拉一个新分支,测试通过了,再合并到主干,这样在问题爆发期能够保证一个可用可测试的版本,

    而不是靠越改越乱,甚至搞乱了;

       一般单元测试要至少包括两个:一个是指定的输入参数case,一种是尽量随机组合所有可能的参数组合(把所有参数放到数组中,采用随机数生成索引获取值进行组合);

       有些代码需要这样的测试,数据是不是有满足case的数据,这个时候就需要Mock一个判断,然后打印一个日志等,来证明你的猜想;

       要有一种方法验证你的数据,比如你使用Lucen倒排索引了你的数据,你要验证;可以借助Luke等,或者程序Mock的方法;

      程序中进行埋入mock代码是一种开发者可以一切场合都适用的方法;

       当你提测一个版本后,就不要在这个版本的主干开发了,要挪到分支,测试通过,再合并到master,而且要注意reivew下;

       修改bug不是仅仅为了解决功能,也要考虑代码的可扩展,可维护等等;

    6.优化

       编写施压代码,进行压测,分析jvm的gc,机器的内存,cpu,网络带宽占用,查看网络连接状态;

     

    7. 心情:

    解决bug时,要心平气和,要冷静分析,要各个击破,逐个解决,不要急。

     

     

    8.netty和lucene

    展开全文
  • Java后端开发框架

    万次阅读 多人点赞 2019-09-09 15:31:22
    Java web开发框架了解 ...后端–对外提供(类)RESTful风格的API—数据库交互-- web应用服务器(tomcat)-- Spring 技术栈开发 交互–HTTP协议通信-- JSON格式–RESTful 风格 java web开发框架的变迁 ...

    Java web开发框架了解

    web开发

    • 前端–页面的设计、路由、展示—静态资源(HTML、CSS、JS)–web服务器(nginx)-- Vue 技术栈开发

    • 后端–对外提供(类)RESTful风格的API—数据库交互-- web应用服务器(tomcat)-- Spring 技术栈开发

    • 交互–HTTP协议通信-- JSON格式–RESTful 风格

    java web开发框架的变迁

    1. SSH ——Struts、Spring、Hibernate
    2. Spring +SpringMVC + Hibernate/ibatis
    3. SSM —— Spring+SpringMVC+Mybatis—— 主流
    4. Springboot+Mybatis——兴起
    5. 微服务框架——springboot+dubbo、springcloud—— 前沿

    后端服务器的主要功能

    接收外界的API请求,解析后去执行数据库操作,最后将数据包装好返回给调用者(当然,中间还包含其他业务逻辑)

    和数据操作有关的

    这类框架一般负责和数据库进行连接,负责SQL的处理,以及将查询到的数据映射成指定的java对象。

    1. mybatis:易学,SQL手动编写,移植性差,支持动态SQL,数据量大、高并发、表关联复杂度高、要求对数据库可控性好可深度调优的项目,半智能效率快些

    2. hibernate:难学,SQL封装好,移植性好,不支持动态SQL,中小企业变化不多的项目,全智能效率慢

    和API请求响应有关的

    这类框架一般负责根据不同的API请求来调用程序中不同的处理方法,负责将调用者传入的数据映射成java对象,也负责处理程序返回给客户端的响应数据格式等。

    1. struts2: 类级别的拦截,每次发一次请求都会实例一个action,每个action都会被注入属性。
    2. springmvc: 方法级别的拦截,是单例的,一个方法对应一个request上下文,而方法同时又跟一个url对应,性能好开发效率高零配置。

    和业务逻辑有关的

    这类框架主要用到了两个特性,以此来简化程序的复杂性:控制反转(IOC)和依赖注入(DI)。在程序中结合这类框架,写出来的程序具有更好的维护性扩展性,也更加清晰简洁。

    1. spring: 非侵入性的方式,以一种完全外部化的方式来对待对象依赖关系。在 Spring 里,你可以使用 XML、SpringJavaConfig 或者 Groovy-Spring DSL 来连接对象依赖关系,也可以使用其它的方案。一站式解决方案,能够解决绝大部分框架类问题。
    2. guice:代码将和容器紧密耦合在一起。

    常用的框架

    • 数据层:mybatis
    • API层:spring mvc
    • 业务层:spring
    • 外加重要的:spring boot——进一步简化基于 spring 框架的项目的构建工具

    web后端开发框架

    企业最常用

    1. Spring:是 Java 后端框架家族里面最强大的一个框架,其拥有 IOC(控制反转) 和 AOP(面向切面) 两大利器,大大简化了软件开发复杂性。并且,Spring 现在能与所有主流开发框架集成,可谓是一个万能框架,Spring 让 JAVA 开发变得更多简单。
    2. SpringMVC:API层,处理|响应请求,获取表单参数,表单校验等。HTTP协议中的请求/响应特性,在该框架中,用户的每一个请求都声明了一个需要执行的动作。而这主要是通过将每个请求URI映射到一个可执行的方法来实现。同时,也将请求参数映射到对应方法的参数。
    3. SpringBoot:Spring 组件一站式解决方案,简化使用 Spring 框架的难度,简省繁重的配置。
    4. SpringCloud:微服务框架首选,它利用Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等
    5. Mybatis:一种轻量级的对象关系映射持久层(ORM)框架,数据层,数据库相关,连接、处理、映射。
    6. Swagger-UI:前后端协作的利器,解析代码里的注解生成JSON文件,通过Swagger UI生成网页版的接口文档,可以在上面做简单的接口调试 。
    7. ApachePOI:POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

    关系型数据库

    1. MySQL:中小型数据库
    2. Oracle:大型数据库,大并发,大访问量

    NoSQL

    1. Redis:内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件,配合关系型数据库做高速缓存,一个key-value型的数据库,解决应用服务器的cpu和内存压力、减少io的读操作、减轻io的压力,适用于数据高并发的读写、海量数据的读写、对扩展性要求高的数据等场景。
    2. MongoDB:更类似 MySQL,支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询 JSON 数据,能存储海量数据,但是不支持事务。

    消息中间件

    解决分布式系统之间消息的传递,异步处理(放入消息队列,提高吞吐量)、应用解耦(写入-订阅)、流量削峰(秒数或者团抢活动),大型电子商务类网站消除高并发访问高峰,加快网站的响应速度

    1. ActiveMQ:中小型公司,万级,非常成熟,功能强大,在早些年业内大量的公司以及项目中都有应用,主要是基于解耦和异步来用的,较少在大规模吞吐的场景中使用。
    2. RabbitMQ:万级,延时很低,是erlang语言本身带来的问题。很难读源码,很难定制和掌控。
    3. RocketMQ:大型公司,十万级,阿里,接口简单易用,可以做到大规模吞吐,性能也非常好,分布式扩展也很方便,社区维护还可以,可靠性和可用性都是ok的,还可以支撑大规模的topic数量,支持复杂MQ业务场景。
    4. Kafka:十万级,大数据领域的实时计算、日志采集,超高的吞吐量,ms级的延迟,极高的可用性以及可靠性,而且分布式可以任意扩展。

    SOA(面向服务)相关

    系统集成—有序,系统的服务化—复用,业务的服务化—高效

    1. SpringCloud.Dubbo:阿里,分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册、自动发现等高效服务治理方案。RPC 指的是远程调用协议,也就是说两个服务器交互数据。透明化的远程方法调用,像调用本地方法一样调用远程方法,配置简单,无API侵入;软负载均衡以及容错机制,可在内网替代F5等硬件负载均衡器,降低成本;服务的自动注册与发现,不需要写死服务提供方的地址,注册中心基于接口名查询服务提供着的IP地址,并且可以平滑的添加或者删除服务提供者;采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需要Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

    2. Zookeeper: 分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。zookeeper=文件系统+监听通知机制,客户端注册监听它关心的文件目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

      假设我们的程序是分布式部署在多台机器上,如果我们要改变程序的配置文件,需要逐台机器去修改,非常麻烦,现在把这些配置全部放到zookeeper上去,保存在zookeeper 的某个目录节点中,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到zookeeper 的通知,然后从zookeeper 获取新的配置信息应用到系统中。

    搜索相关

    全文搜索搜索引擎,计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。

    1. Elasticsearch: 一个基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。分布式、多租户、某些节点出现故障时会自动分配其他节点代替其进行工作、接近实时的搜索。自身带有分布式协调管理功能、仅支持json文件格式、在处理实时搜索应用时效率明显高于Solr、适用于新兴的实时搜索应用。
    2. Solr: 基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面。成熟、稳定;不考虑建索引的同时进行搜索,速度更快;建立索引时,搜索效率下降,实时索引搜索效率不高。用 Zookeeper 进行分布式管理、支持更多格式的数据、传统的搜索应用中表现好于 Elasticsearch、传统搜索应用的有力解决方案。互联网巨头,如Netflix,eBay,Instagram和亚马逊(CloudSearch)都使用Solr,因为它能够索引和搜索多个站点。
    3. Lucene:一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。一个Java全文搜索引擎,完全用Java编写。Lucene不是一个完整的应用程序,而是一个代码库和API,可以很容易地用于向应用程序添加搜索功能。

    通讯相关

    1. Netty: 异步高性能的通信框架,往往作为基础通信组件被 RPC 框架使用。典型的应用有:阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件,用于实现各进程节点之间的内部通信。淘宝的消息中间件 RocketMQ 的消息生产者和消息消费者之间,也采用 Netty 进行高性能、异步通信。大数据领域,经典的 Hadoop 的高性能通信和序列化组件 Avro 的 RPC 框架,默认采用 Netty 进行跨节点通信,它的 Netty Service 基于 Netty 框架二次封装实现。

    文件存储

    1. FastDFS: 一个轻量级分布式文件系统,对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)。

    项目构建类

    1. Maven:主要功能主要分为5点,分别是依赖管理系统、多模块构建、一致的项目结构、一致的构建模型和插件机制。

    1. Gradle:构建包括编译主代码、处理资源、编译测试代码、执行测试、上传归档等,基于灵活的任务模型,因此很多事情包括覆盖现有任务,跳过任务都非常易于实现。

    Gradle作为一款基于Groovy语言的构建工具,已经吸引众多的ant,maven使用者转投gradle的怀抱,和Gradle相比,ant显得冗余复杂,maven显得有些死板落后,而gradle基于DSL语法,特点明显:简洁、灵活、可读性强。Gradle和maven有很多相似点,gradle充分考虑到maven库的价值,在jar包管理上完全支持mavenRepository,很多属性乍眼一看就能反应过来maven中对应的是什么标签,大大降低maven到gradle的迁移难度,并在构建方面改善了很多maven的不足,,同时,gradle对比maven更好的面向ant用户,使用maven时,虽然能通过plugin来跑ant的命令,但是maven在任务实现主要靠的是插件以及自身的固定框架,Gradle在定义任务方面思想与ant非常相似,做了很好的集成。

    IDE

    1. IntellijIDEA: 更好的调试、更高的开发效率、更智能的重构、目录分层少而清。
    2. Ecplise: 最大化控制台、项目结构支持更强大、插件编写更容易、免费。
    展开全文
  • 详细后端开发知识讲解

    万次阅读 多人点赞 2018-05-15 16:13:07
    前言本片文章面向后端开发,讲述后端在进行开发时所使用的WEB服务器的工作流程,正所谓知根知底,WEB服务器是后端开发人员日常用于调试WEB程序和与前端通讯的一种方式!WEB服务器最为强大的地方是能够执行WEB程序,...

    一. 前言

    本片文章面向后端开发,讲述后端在进行开发时所使用的WEB服务器的工作流程,正所谓知根知底,WEB服务器是后端开发人员日常用于调试WEB程序和与前端通讯的一种方式!

    WEB服务器最为强大的地方是能够执行WEB程序,其WEB程序的编程语言并没有明确的规定,因为只要你所使用的服务器支持这样的程序就可以了!

    WEB服务器更像是一个平台,在此平台上编写软件我们称其为WEB编程,注:WEB编程下有许多规范比如CGI,FastCGI等等,这个是要看服务器的支持范围!

    不同服务器所使用的规范不同,比如JSP服务器只能运行由JAVA EE编写的WEB程序,不能用于运行像C/C++、Python等编程语言编写而成的WEB程序!

    通常情况下的WEB服务器所使用的编程规范均为CGI编程、只能运行CGI规范的程序,除了一些例外的WEB服务器,比如JSP服务器!

    二. CGI规范,WEB服务器执行过程

    什么是CGI规范?

    CGI是Common Gateway Interface的缩写,其意义为公用网关接口,意思可以理解为:在WEB服务器上运行一个程序或脚本,并且WEB服务器要将脚本执行结果返回给浏览器(客户端)!

    规范从何而谈?

    规范的意思是,无论你使用任何语言编写,都必须使用输出函数(cout,printf,print)输出HTML格式的数据信息,WEB服务器根据这些信息传递给浏览器,浏览器HTML树并将其显示到浏览器当中,即为一个WEB页面!

    更加深层次的来说其实,无论你使用什么语言编写,只要在WEB服务器中的配置文件中,使其支持CGI编程,然后将你编译完成的二进制可执行文件后缀名改为.cgi,最后前端页面在使用get或post方法请求这个WEB程序,WEB服务器会自动执行这个程序并将其结果送回给浏览器(TCP/IP协议)!

    实际执行是由操作系统来完成的,只是WEB服务器将程序中打印输出的字符信息给重定向到WEB服务器当中了,即WEB服务器在调用你的CGI程序时会使用一条操作系统都有的命令,重定向:

    >>

    printf或cout等打印函数的底层实现过程是将数据写入到显存中,根据要打印字符的位置并把位置写入到显存下,GPU会根据显存数据在屏幕点亮像素点中对应的二极管(RGB),一般字符字体都是由操作系统来完成的,因为字体的不同,笔画也就不同!printf会把要打印的字符数据转交给操作系统,在从用户态到内核态之间的转换,在到显存,且也要考虑编码的问题,因为不同的编码对应不同的数据,printf只会移交ASCII(最底层是没有字符这个概念的只有二进制码,而二进制码可以转换成ASCII码)码,操作系统需要根据当前程序使用的编码,并将ASCII码转换成当前编码要输出的字符,并且操作系统也要考虑屏幕分辨率,比较分辨率的不同像素点占用就不同!

    其当服务器在执行CGI程序时,也可以不用把程序后缀改为.CGI,你可以在配置文件中增加支持的扩展后缀名:.exe、.py、.c、.elff(ARM可执行文件/Linux可执行文件,Linux就是为ARM设计的)

    注意如果你配置成源文件的格式需要WEB服务器的支持,比如apache服务器,仅支持py文件,apache服务器会自动编译.py文件并执行!

    如果是在Linux或MAC系统下需要设置目录权限:

    chown -R 555 //所有访问权限

    如何接受从服务器传递来的信息?

    当我们前端页面向WEB服务器发送一个请求时(get/post)会有一个传参,里面包含着请求数据,比如:

    https://www.zzhblog.cn/c.cgi/?utm_source=csdnbar

    其意思为,请求www.zzhblog.cn服务器下的c.cgi程序,并向其传递一个参数,参数名为:utm_source,参数数据为:csdnbar

    也有这样的:

    https://www.zzhblog.cn/?utm_source=csdnbar

    没有请求的程序名,其实是WEB服务器后台给隐藏掉了,你可以在自己的WEB后台中配置默认文件,即输入网站地址而无需指定文件名,访问即返回默认文件!

    或者隐藏请求文件名,WEB服务器会把这些信息放到报文头了,浏览器接受到之后会自动隐藏!

    那么我们要怎样得到传递来的信息呢?这里就需要使用CGI提供的模块了,CGI提供了C/C++版的模块和Python等的模块,使用这些模块里的Get方法可以轻而易举的获取后台服务器传递过来的信息,然后在对这些数据进行处理,并把处理结果重定向给WEB服务器,最后WEB服务器将结构返回给浏览器,注意结果必须以HTML格式返回!

    整个执行过程都是经过HTTP协议格式规范来的!

    不过目前有的WEB服务器已经开发出自己的WEB服务器编程语言,也就是说该WEB服务器只能运行指定运行编译的程序,并且该语言下提供了很多较为方便的模块,可以调用直接读取一些相关数据,和处理数据的模块!

    关于C/C++方面的WEB程序开发

    C/C++编写WEB程序开发效率实在是非常之低,因为通常情况下我们做WEB服务器处理,一般都是对字符的解析,而C/C++传递过来的GET或POST数据是一个完整的URL和报文,需要C/C++自己去解析这些数据,不像其他编程语言已经为其解析完成,拿过来直接处理即可,而且C/C++对字符处理方面库支持本身就很差,需要开发人员手动编写字符处理库,所以这也是为什么大家不愿意使用C/C++做WEB服务器开发,因为要写很多代码,即使是由CGI模块的支持,但CGI模块只能用于获取WEB服务器传递过来的数据!

    再则,C/C++本身就是一个不是易学,且要考虑内存泄漏问题的一个编程语言,现在很多编程语言会自动帮你释放不用且丢失的内存,解决内存泄漏,也就是托管式代码平台,经典的有:.net

    C/C++WEB服务器开发效率与其他编程语言对比

    C/C++需要编写很多代码来完成某个任何,极其降低后端开发效率,但是也提高个人编程能力,现在很多编程语言都提供了很多模块,来完成某些任何,甚至可以说不是编程语言,是脚本,专门调用C/C++写的代码,比如Python!

    由于Python简单,模块多,可以简单调用模块处理许多复杂模块,所以很收后端开发人员的欢迎!

    有的时候没有CGI模块,WEB服务器在开发文档中会告诉你,参数会存放在哪儿,哪个临时文件中,或直接利用C/C++传参的方式传递:

    a.out aaa aaa

    a.out代码:

    int main(int x,int *a[]){
    }

    这是最经典的方式,x代表参数数量,a代表参数!

    a一般是个数组指针,指向每个参数!

    for(int i = 0;i < x;++i){
    printf("%s",*a[i]);
    }

    CGI与FastCGI

    CGI程序只能被请求一次,也就是说一次只能执行一个客户端发来的请求,假如说有一百个客户端同时请求这个程序,那么该程序要一个一个的执行!

    FastCGI就是CGI的升级版,该规范可以同时以多线程的方法来执行CGI程序,一百个客户端同时请求CGI程序时,服务器就会同时执行一百个CGI程序来处理这些客户端,可以在WEB服务器的配置文件中修改选择对应的CGI和FastCGI方法,WEB服务器会根据这些方法来做对应的规范!

    执行效率与算法

    在前端把数据传递到后端以后,后端要着手处理这个数据,就拿搜索引擎为例子:当我们在搜索引擎中输入相关数据时,要知道,在庞大的万维网平台中,网页资源几乎数不胜数,每天都会要上亿的新网页诞生。

    搜索引擎中有一个叫蜘蛛的模块,用于将这些数据爬下来,也就是网络爬虫,保存到服务器本地上,假设你的搜索引擎服务器中有数百亿条数据,并且网页路径和域名,网页名在数据库里存储好的,那么当用户在浏览器里输入某个关键字时,就会找到海量的相同数据,那么后端人员要做的是将这些数据以热度并排名按从大到小的方式出现在搜索页面的下拉框里,供用户挑选,那么此时就考虑到算法的要求了,倘若算法太复杂,那么后端执行个一两分钟才返回结果那么用户体验是不是就很差?

     

    三. HTTP协议规范

    这里不做详细介绍,因为博主之前有写过对HTTP/HTTPS协议规范的详细介绍,所以这里简明摘要!

    HTTPS之所以叫HTTPS是因为在使用TCP协议加密时通过SSL算法进行加密,HTTPS传输过程比HTTP要更加耗时!

    其次使用HTTPS握手过程需要证书验证,所以WEB服务器方也必须支持SSL协议!

    在浩荡的互联网中,就像开车一样,当我们开一辆货车运载资源时,难免会遇上堵车,那么此时就需要交通法则,来规定我们怎样传输,从而避免网络堵塞的情况,同时也要避免两辆车互相撞在一起导致数据丢失,发生丢包的状况,所以HTTP协议规范用语规定互联网中应该怎样传输数据,比如HTTP协议规范确定使用TCP协议来传递数据,防止因为网络拥堵或堵塞导致丢包的现象,实则上路线的选择是由猫(调制转换器)来决定的,猫会根据当前连接的线路状况来确定最优的传输路线,而TCP只是规定怎样来完成这次的传输,传输路线是由猫来完成的,以及收,收到之后猫会把数据发送给网卡,网卡解析数据在发送给上层,也就是形成了网络七层的概念!

    以上的APDU、PPDU即为封装,因为上层需要把自己的数据封装到一个包里,然后发给下层,下层在把这个数据拆开翻译意思,在根据意思添加自己的报文格式进去,即形成了APDU、PPDU包格式!

    假如我要向IP为1.0.0的地方发送一个A的字符,那么需要填写IP地址和数据段信息,然后发送给传输层,传输层在把这个数据拆开分析其意思,然后在进行格式转换,压缩,确定传输方式,在传送给下一层,这样做的方法是为了确保不同的数据结果格式上的歧义问题(表示层以后的层格式是统一的,所以需要表示层来统一格式),然后在到物理层在转换成BIT的电路信号方式确定最优路线发送到指定路由下,路由器接收到之后呢,在一步一步按照前面的步骤拆包,一步一步分析包,最终发送到电脑上的指定程序下!

    其实像应用服务器,是没有七层这么个概念的,实则上就三层,应用层选择好路径,数据和方法,表示层分析数据和方法,并对这些格式进行压缩,加密然后传递给传输层,传输层在拆开确定方法,修改报文格式,增加新的包头,直接发送给物理层,由猫直接发送出去,在TCP协议中无需经过HTTP协议,HTTP协议只在WWW开头的万维网域名下有效!

     

    相关连接:HTTP/HTTPS协议原理HTTP/HTTPS协议原理HTTP协议层开发

    展开全文
  • 2018秋招面经-后端开发

    万次阅读 多人点赞 2017-11-08 15:37:15
    打开网页到页面显示之间的过程(涵盖了各个方面,DNS解析过程,Nginx请求转发、连接建立和保持过程、浏览器内容渲染过程,考虑的越详细越好)。 http和https区别,https在请求时额外的过程,https是如何保证数据...
  • 从目前的就业形势看,是从事pythonWeb后端开发好呢?还是从事网络爬虫比较好呢?目前互联网+的趋势依旧火热,越来越多的行业已经开始向互联网的方向靠拢了。在互联网+的影响下,各行各业都会有无限的可能性和创造性...
  • 后端开发面试题

    千次阅读 2016-10-05 19:59:02
    后端开发面试题 =================== 转自https://raw.githubusercontent.com/Tangxuguo/software-developer-questions/master/back-end.md #后端开发面试知识点大纲: ##语言类(C++): ###关键字作用解释: ...
  • web后端开发学习路线My previous article described how you can get into frontend development. It also discussed how the front end can be a place filled with landmines – step in the wrong place and you'...
  • C++后端开发面试题

    千次阅读 多人点赞 2018-10-29 08:07:26
    后端开发面试题 #后端开发面试知识点大纲: ##语言类(C++): ###关键字作用解释: volatile作用 Volatile关键词的第一个特性:易变性。所谓的易变性,在汇编层面反映出来,就是两条语句,下一条语句不会直接...
  • JAVA后端开发浅谈

    千次阅读 多人点赞 2020-02-28 16:00:40
    两个阵营的开发基本上都是各自围绕着各自的开发语言(php/Java),选取最为兼容合适的框架结构和数据库,然后进行服务器端的开发。以下附上PHP和Java语言的区别介绍和原文链接: 《php和java的区别有哪些》 php中文...
  • 后端开发 后端的开发比前端的开发要简单很多,因为开发者只需专注于数据的呈现即可,不必关心显示的逻辑。在众多后端框架中,我选择了开发和学习成本较低的Python语言中的Django框架,同时Python语言与我们的判题...
  • java后端开发(一):基本认知之web开发是什么

    千次阅读 多人点赞 2018-08-05 13:22:10
    数据库设计学完后,接着来了解一下到底什么是web开发,在脑海中形成宏观的感受。本文主要讲述web开发的相关背景知识
  • 后端开发转职到前端开发真的不容易。特别是当你已经习惯了后端开发的工作模式,习惯了构建数据结构,编写类似于测试驱动开发的测试,习惯了使用持久层、仓库和数据库图表,以及给前端创建API接口。 凡此种种,...
  • app后端开发学Python。Python的优点:1、简单易学Python 编程语言最大的优点之一,是其具有伪代码的特质,它可以让我们在开发 Python 程序时,专注于解决问题,而不是搞明白语言本身。2、开源Python 是 FLOSS(自由/...
  • 后端开发——接口篇

    2020-08-17 22:42:32
      对于小白来说,只要知道”在浏览器输入一个网址,就会返回一个网页“就行了。那么对于一个后端程序员来说,我们需要知道的是是什么?   前后端分离时代,一个应用软件被分成了前端应用和后端应用...
  • 很多外行人在考虑转行IT时,都会出现...前端即网站前台部分,既包含了页面设计,又包含了页面实现,要是指运行在PC端,移动端等浏览器上展现给用户浏览的网页。 “前端”是网站与用户直接交互的部分,从字体到布局再
  • 本文为博主2020年秋招提前批的c/c++后端开发面经整理,包括C/C++语言基础,计网,数据库,linux,操作系统,场景题,智力题和hr常问题。面试问题来自前人的工作和博主面试时遇到的值得记录的问题,其中面试题答案...
  • web前端分为网页设计师、网页美工、web前端开发工程师 首先网页设计师是对网页的架构、色彩以及网站的整体页面代码负责 网页美工只针对UI这块儿的东西,比如网站是否做的漂亮 web前端开发工程师是负责交互设计的...
  • web前端分为网页设计师、网页美工、web前端开发工程师首先网页设计师是对网页的架构、色彩以及网站的整体页面代码负责网页美工只针对UI这块儿的东西,比如网站是否做的漂亮web前端开发工程师是负责交互设计的。...
  • Java后端开发。大学本科的时候我是如何赚到10w+?

    千次阅读 多人点赞 2020-08-12 09:09:36
    我是 Guide 哥,Java 后端开发。一个会一点前端,喜欢烹饪的自由少年。 很多小伙伴比较好奇 Guide 是如何从大四的时候就已经自给自足,并且用自己赚的钱去了很多地方旅游(重庆、恩施、三亚…)。 今天我就说一下,...
  • 作为一名新入职的Golang后端开发,坐到工位的第一件事肯定是安装开发环境。每个公司的项目都有可能不一样,但基本软件都是要安装的。下面我来介绍一下,有哪些软件需要安装? 1. 编译软件 如果要运行Golang代码,...
  • python后端开发工程师考证试题

    千次阅读 2019-05-29 17:54:00
    python开发工程师考证试题 问答题链接 python开发工程师考证试题 选择题 题目 关于 Python 程序格式框架的描述,以下选项中错误的是 ( A ) A: Python 语言不采用严格的“缩进”来表明程序的...
  • web前端和后端开发的根本区别

    千次阅读 2016-12-07 16:23:19
     web前端分为网页设计师、网页美工、web前端开发工程师。  首先网页设计师是对网页的架构、色彩以及网站的整体页面代码负责。  网页美工只针对UI这块儿的东西,比如网站是否做的漂亮。 web前端开发工程师是...
  • 03.09 二面看起来像leader的面试官很严肃,而且也不问我...3.平时写程序过程中遇到过哪些错误 4.说说内存泄漏与野指针 5.malloc与new的区别 6.说说fork 7.进程间通信方式有哪些 8.C++多线程 9.线程互斥 10...
  • 后端开发所需要的技能

    千次阅读 2018-01-29 00:00:00
    LeanCloud,领先的 BaaS 提供商,为移动开发提供强有力的后端支持。更多内容请关注「 LeanCloud 通讯」  「福利 」 推荐朋友使用我们的服务,您将获得推荐用户全年消费额的10% 做为奖励 ~ 首先需要新注册一个 ...
  • Python web后端开发框架 Django 、Flask、Tornado

    万次阅读 多人点赞 2018-03-07 15:16:25
    深入学习Python ,用Django做Web后端开发现在Python的用途愈来愈广,服务器、Web、游戏、爬虫、数据分析 以及人工智能 学习之路还很长技术之路 不能回头 陷进去 就出不来 就跟恋爱一般,学习中、项目中 印象笔记、...
  • Java后端开发常考面试题大全

    千次阅读 多人点赞 2020-09-04 11:37:25
    在浏览器网址输入一个url后直到浏览器显示页面的过程 (这边面试官可能会详细的考察DNS服务器的知识) TCP三次握手和四次挥手的过程 (为什么不可以两次握手,为什么握手要三次,挥手需要四次) 七层OSI模型或TCP/IP...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,334
精华内容 15,733
关键字:

网页后端开发完整过程