黑板报网

分享生活百科、日常生活经验及知识

编程是学些什么东西

avatar 2022-10-14 10:46 79次浏览 0 条评论 教育

编程那么多东西,该从哪里学起呢?学什么呢?学完能干什么呢?今天我就把我的总结来说一下吧!

首先软件分为两类模式,一种B/S (浏览器、服务器),一种C/S模式(客户端/服务器),相信这点编程的人大多已经知道,但是对于这两个模式内部交互,数据传输,前端编程语言,后端编程语言,以及后端如何架构,数据如何加密可能会有不是很清楚的地方,那我接下来就一 一 解答,先从B/S来说起吧,因为小编是做B/S开发的,C/S等后面再更新

   1:B/S模式,即浏览器/服务器,首先 用户通过浏览器输入网址(http://www.scratch.net.cn / ),这时浏览器会发生以下三步

      第一步解析协议类型,如是http协议,还是https协议,

      第二步解析域名,找到域名对应的ip地址,通过ip访问服务器,每个ip都指向一个服务器,在解析域名时,首先通过本地的dns缓存来找域名对应的网址,如果是本地配置的域名和网址对应,可以在运行中输入drivers—在弹出的文件夹中,打开etc文件夹,hosts即为自己配置的,如果没有,那会去找dns的服务器,找到之后,dns服务器会把域名对应的ip地址返回,返回之后即走下面的第三步

      第三步浏览器通过ip地址访问的服务器的同时会携带网址中的参数,告诉服务器我要访问的是哪个界面,服务器开始解析路由,如果用户取的都是纯静态的界面,会直接返回,如果有动态界面,会识别是哪门语言写的(java/php等),调起相应的引擎来执行脚本,在执行脚本的过程中,会对数据库的访问,在访问数据库时,首先会访问缓存数据库(redis/memcache/mongodb等),如果有直接取出,无需访问关系型数据库(mysql/sqlserver/oracle),如果没有,会访问关系型数据库,然后操作,操作完成之后会把常用的数据从关系型数据库中取出,在缓存数据库中存储一份,以便下次需要时直接从缓存数据库中读取,加快执行效率,读出数据之后,服务器会把执行的结果和静态的界面返回给浏览器,此时浏览器会执行静态界面的代码(html/css/js/jq/angular.js/reactjs等)执行完的结果即呈现给用户就是我们看到的网站页面

   流程如下图

    这是在没有大并发下的基础访问流程,甚至小型公司网站,mysql数据库,redis缓存数据库,web服务器在同一台服务器上,并未分开,当遇到大并发时,整体访问流程不会变,但是会增加很多其他技术手段,来增加访问效率

如下图,当然我所画的只是一种方案,还有其他方案可实现

知道B/S架构的主要访问流程,我就可以确定,我们需要学习什么了

(1) 前端:即浏览器里执行静态页面,那么静态界面就需要编程,静态界面编程或者编码包括,HTML ,DIV+CSS, JavaScript,Jquery,angularJs/ReactJs/VueJs,Bootstrap等

(2) 负载均衡集群:这里主要学习集群的搭建,负载均衡集群的方案如(Heartbeat+HAproxy,LVS+Keepalived,nignx反向代理等三种方案),不涉及编程,如果真的想学习一下编程的话,建议学习一下shell编程,前提是学习linux,我建议先学习linux,然后shell编程,最后学习集群搭建,三种方案看实际情况选择,Heartbeat功能强大,配置复杂,Keepalived功能简单,配置也比较简单,nignx通过反向代理做负载均衡时可能优势不是那么大,具体看自己的需求而定,负载均衡主要将用户按负载均衡算法分散到各个web服务器,由各个web服务器去为用户提供服务器,比如1000同时访问,后端web服务器集群有3台服务器,那么这1000人会分散到3台服务器去为他们服务器,那么每台服务器实际访问人数只有333人左右的样子,具体每台服务器多少人,看负载均衡服务器算法而定

(3)  CDN是内容分发,在请求时,如果纯静态资源,会选择就近的CDN节点返回,不会访问到动态的web服务器,这样加速了访问效果

(4)  nginx/apache集群,nginx集群熟悉,nginx安装,配置,集群搭建,apache集群熟悉apache安装,配置,搭建等知识

(5)  tomcat集群是执行java代码的,FPM是执行PHP代码的,这块需要学习编程语言是,如果你是想从事java web开发,那么你学习 javase(即java语言),JSP,Servlet,Struts,Hibernate,Spring,SpringMvc,Mybatis,Tomcat的搭建,集群搭建,配置

,java数据库编程(关系型数据库mysql/oracle,nosql非关系型数据库redis/memcache/mongodb等),java文件编程,java线程编程,java网络编程,cookie和session编程,面向对象编程,设计模式,数据结构等,如果是php那就学习,php语言,php文件编程,网络编程,数据库编程,cookie和session编程,php面向对象编程,TP框架,YII框架,Larvel框架,MVC框架等,熟悉svm,git等版本控制软件,github,java还要熟悉maven等技术

(6)  redis/memcache等,熟悉软件安装,配置,命令行使用方式等,集群搭建

(7)  mysql安装,配置,读写分离,双主多从,一主多从等集群搭建,mysql数据处理,如增 删 改 查,数据库恢复,检查点技术,撤销,重做,数据库安全,如审计,角色,权限,错误日志,数据库优化 如存储引擎,存储索引,分库,分表,事务,数据库视图,数据库触发器,存储过程,持久存储等知识

2 C/S模式,我不是主做C/S模式开发,后面再更新