php工作日志怎么写,小白docker求入门?
本文邀请yeedom来解答,通过大量的图片、示例介绍,帮助你快速、全面地从入门到实战~
1、docker是什么Docker使用go基于linux lxc(linux containers)技术实现的开源容器,诞生于2013年年初,最开始叫dotcloud公司,13年年底改名为docker inc。
2017年下载次数达到了百亿次,估值达13亿美元,通过对应用封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)全生命周期管理,达到“一次封装,到处运行”
为何使用docker?
Docker直译码头工人,将各种大小和形状的物品装进船里。这对从事软件行业的人来说,听起来很熟悉,花了大量时间和精力把一个应用放在另一个应用里。
docker出现之前,对不同环境的安装、配置、维护工作量很多,如部署,配置文件,crontab,依赖等等。使用docker,无需关心环境,只需要一些配置就能构建镜像,而部署则用一条run命令。
虚拟机VS容器
虚拟机需要有额外的虚拟机管理应用和虚拟机操作系统层,操作系统层不仅占用空间而且运行速度也相对慢。docker容器是在本机操作系统层面上实现虚拟化,因此很轻量,速度接近原生系统速度。
虚拟机启动速度是分钟级别,性能较弱、内存和硬盘占用大,一个物理机最多跑几十个虚拟机,但它的隔离性比较好。docker启停都是秒级实现,内存和硬盘占用非常小,单机支持上千个容器,在ibm服务器上可运行上万个容器。容器跟虚机相比,有着巨大的优势。
docker优点
只关心应用:以往我们需要关心操作系统、软件、项目,有了docker我们可以只关心应用而不是操作系统,docker发展迅速,基于docker的paas平台也层出不穷,使得我们能更方便的使用docker;
快速交付:docker可在秒级提供沙箱环境,开发,测试,运维使用完全相同的环境来部署代码
微服务:docker有助于将一个复杂系统分解,让用户用更离散的方式思考服务
离线开发:将服务编排在笔记本中移动办公,使用docker可在本机秒级别启动一个本地开发环境;
降低调试成本:在测试和上线时产生无效的类、有问题的依赖、缺少的配置等问题,docker可让一个问题调试和环境重现变得更简单;
CD:docker让持续交付实现变得更容易,特别是对于蓝绿部署就更简单。
第一版上线时,需要上第二版新功能,两个版本功能会有冲突,这时用docker实现蓝绿部署就非常方便了;
如:可以部署两个版本同时在线,新版本测试没问题了把老版本流量切到新版本就可以了
迁移:可以很快的迁移到其他云或服务器
与传统虚拟机方式相比,容器化方式在很多场景下都是存在极为明显的优势。无论是开发、测试、运维都应该尽快掌握docker,尽早享受其带来的巨大便利;
容器化方式在很多场景下都有极大的优势。无论是开发、测试、运维都应该尽快掌握docker,尽早享受其带来的巨大便利。
概念
再来了解docker非常关键的概念,这样才能理解docker容器整个生命周期。
概念-镜像
镜像(类)=文件系统+数据,我常常用开发语言中的类比作镜像,对象比作容器镜像由多个层加上一些docker元数据组成,容器运行着由镜像定义的系统。
概念-容器
容器(对象)=镜像运行实例
容器是镜像的运行实例,可以使用同一个镜像运行多个实例。如图所示,一个ubuntu docker镜像产生了三个ubuntu容器,docker利用容器运行和隔离应用。
从读写角度来说,镜像是只读的,容器是在镜像上添加了一层可读写的文件系统。
概念-层
层=文件变更集合
像传统虚机应用,每个应用都需要拷贝一份文件副本,运行成百上千上磁盘空间会迅速耗光,而docker采用写时复制来减少磁盘空间,当一个运行中的容器要写入一个文件时,它会把该文件复制到新区域来记录这次的修改,在执行docker提交时将这次修改记录下并产生一个新的层。docker分层解决大规模使用容器时碰到的磁盘和效率问题。
概念-仓库
docker借鉴了大量git优秀的经验。docker仓库分公有库和私有库,最大的公开仓库是docker hub,国内也有很多仓库源。
2、创建第一个docker应用通过创建一个docker应用来看看docker是怎么方便使用的。
创建docker镜像方式
创建docker有四种方式
但最常用的docker命令+手工提交和Dockerfile的方式
对于我们来说Dockerfile是最常用也是最有用的。
那创建一个docker应用只需要三步:编写dockerfile、构建镜像、运行容器
编写dockerfile
那我们就开始用dockerfile来创建一个应用
Dockerfile是包含一系列命令的文本文件,这个文件包含6条命令
1、FROM是使用php官方镜像,左边是镜像名字,右边是标签名字,标签名字不写默认是latest
2、声明维护人员
3、RUN运行一条linux命令,我们把php代码重定向到/tmp/index.php
4、EXPOSE声明要开放的端口
5、WORKDIR启动容器后默认目录
6、CMD容器启动后,默认执行的命令,相当于应用的入口,用php自带的webserver监听8000
构建镜像
使用docker build命令生成镜像,—tag指定镜像的名字,左边是名字,右边是标签,最后有个.表示在当前目录查找Dockerfile。可以看到,每个命令都会有个输入输出,输入是命令,输出是给到层的id,所以,基本上每个命令都会产生一个层。最后提示镜像构建成功,并打上镜像标签。
运行容器
第三,使用docker run命令运行镜像,-p将容器的8000端口映射到本机8000端口,—name给容器起个名字。用curl对本机8000端口请求,服务器返回当前时间,说明我们构建的容器运行成功了。
请求本地8000端口,服务器返回当前时间
dockerfile常用命令
其实Dockerfile常用命令就5个:from、add、run、workdir、cmd
创建docker应用步骤
•编写dockerfile
•构建镜像
•运行容器
使用docker应用步骤
•拉取镜像
•运行容器
dockerfile最佳实践
•精简镜像用途
尽量让每个镜像的用途单一
•选择合适基础镜像
选择以alpine、busybox等基础的镜像
busybox:号称操作系统里的瑞士军刀,只有……这么大,但却有一百多常用命令
如果你的目标是小而精,busybox是首选,因为它已经精简到没有bash,使用的是ash,一个兼容posix的shell
Alpine:你的目标是小但是又有一些工具的话,可以选择alpine,它是一个面向安全的轻量linux发行版,它关注安全、性能和资源效能,比busybox功能更完善,还提供apk查询和安装软件包,大小只有2-3兆。
很多官方的镜像都有alpine的镜像,像刚刚使用的php镜像。
•提供维护者信息
•正确使用版本
使用明确的版本号,而非依赖于默认的latest,避免环境不一致导致的问题
•删除临时文件
如安装软件后的安装包,如上图2、3步骤
•提高生成速度
如内容不变的指令尽量放在前面,这样可以复用
•减少镜像层数
多条命令写在一起,使生成的镜像层数少,如上图2、3步骤
•恰当使用multi-stage
保证最终生成镜像最小化
3、常用命令想使用一个镜像,用这个命令就可以了,默认按评分排序。official如果是ok表示是官方镜,Auto标示它是否用dickerfile进行自动化镜像构建。
pull
一旦确定一个镜像,通过对其名称执行docker pull来下载。标签默认是latest,严格来讲,镜像的仓库名还应该添加仓库地址的,默认是registry.hub.docker.com Docker images命令查找下载的镜像。
run
使用docker run运行一个容器,it表示用交互式方式运行,最后表示要执行的命令。
其实更常用的方式是以后台方式来执行,这时用d参数在后台运行,运行后用exec命令进去到容器。
tag
Docker tag给镜像一个新tag名字。
Docker images查看centos镜像,把centos:latest打上centos:yeedomliu,这时再看会有3个centos,latest和yeedomliu的镜像id是相同的。把centos:yeedomliu删除,再查看latest还会存在,最后用rmi命令删除latest就会真正把latest镜像删除掉。如果相同镜像存在多个标签,只有最后一次的rmi命令会真正删除镜像。
ps
Ps可以查看运行中的容器
rmi
删除一个镜像,同一个镜像id的不同标签的镜像,使用rmi删除最后一个镜像才会真正删除这个镜像。
rm
删除docker容器,如果运行中的容器需要加-f
diff
容器启动后文件变化情况
logs
查看容器运行后的日志
cp
我们想从容器里面拷贝文件到宿主机,或相反的过程就可以用到cp命令
container prune
随着使用docker时间越长,停止状态下的容器会越来越多,这些都会占据磁盘空间
image prune
未被打标签的镜像可以用image prune命令清理
system prune/df
如果你觉得刚刚两条命令执行起来麻烦,可以用docker system prune一条命令搞定
另外用system df查看docker磁盘空间
实战了解了docker基础知识后,可进入相对实战的环节
•本地开发
我们的项目使用了很多服务,如redis/mysql/mongodb等等,如果一个个运行起来,还加上配置,容易出手,也比较麻烦
kitematic:与使用命令行管理本地容器相比,你更想使用图形工具对容器管理,官方推出的容器管理工具,通过它可以查找镜像、创建容器、配置、启停容器等管理。
这是配置容器端口和宿主机端口,目录,网络等映射界面
docker-compose
compose定位是“定义和运行多个docker容器的应用”,前身fig,目前仍然兼容fig格式的模板文件。
一条命令可以把一个复杂的应用启动起来
日常工作中,经常碰到多个容器相互完成某项任务
docker-compose示例1
默认模板文件名叫docker-
compose.yml
,结构很简单,每个顶级元素为服务名称,次级信息为配置信息。这里使用了redis/mongodb/mysql/nginx镜像,分别给它们映射了本地目录、端口、密码等信息,nginx镜像需要使用redis/mysql等服务,用links命令连接进来。docker-compose示例2
如果在本地开发,每个项目都可以像之前说的那样配置,这里提供了另外一种做法。我把公共的资源在一开始就启动,每个项目里只启动nginx镜像并关联其它的服务即可。
公共服务compose
项目compose
•常见问题
主进程:docker启动第一个进程称主进程,就是id为1的进程,这个进程退出就意味着容器退出,所以想要使docker作为服务使用,这个进程是不能退出的。expose命令是声明暴露的端口,运行时用-P才会生效。一般ports命令是做真正的端口映射,比较常用。
•架构
安装了docker的主机,一般在一个私有网络上
1、调用docker客户端可以从守护进程获取信息或发送指令
2、docker守护进程使用http协议接收来自docker客户端的请求
3、私有docker注册中心存储docker镜像
4、docker hub是由docker公司运营的最大的公共注册中心
互联网上也存在其他公共的注册中心
调用 Docker客户端可以从守护进程获取信息或给它发送指令。守护进程是一个服务器,它使用 HTTP协议接收来自客户端的请求并返回响应。相应地,它会向其他服务发起请求来发送和接收镜像,使用的同样是 HTTP协议。该服务器将接收来自命令行客户端或被授权连接的任何人的请求。守护进程还负责在幕后处理用户的镜像和容器,而客户端充当的是用户与 REST风格 API之间的媒介。
理解这张图的关键在于,当用户在自己的机器上运行 Docker时,与其进行交互的可能是自己机器上的另一个进程,或者甚至是运行在内部网络或互联网上的服务。
•优化
使用小镜像:一般来说,使用小的镜像都相对比较优秀,如官方的镜像基本上都有基于alpine的镜像
事后清理:删除镜像里软件包或一些临时文件,减小镜像大小
命令写一行:多个命令尽量写在一起有助于减少层数,也会减少镜像的大小
脚本安装:使用脚本进行初始化时,可以有效减少dockerfile的命令,同时带来另外的问题,可读性不好并且构建镜像时缓存不了
扁平化镜像:构建镜像过程中,可能会涉及到一些敏感信息,或者用了上面的办法镜像依然很大,可以试试这个办法
docker export 容器名或容器id | docker import 镜像标签
multi-stage:从docker 17.05版本开始,docker支持multi-stage(多阶段构建),特别适合编译型语言,如我在一个镜像下编译,在另外一个很小的系统运行,如下图,go项目在golang环境下编译,在alpine环境下运行。
该如何学习大数据知识?
本人从事大数据以及相关行业,算是一个业内人士,说说我的看法,仅供参考。
首先大数据这几年特别热门,同时也带来了很多的就业。大数据的价值也越来越明显,尤其是人工智能的发展和即将到来5G,都离不开大数据这个基础!所以选择学习大数据对未来的发展还是挺不错的。但同时也要清楚一些问题!
首先是确定学习的方向:大数据是一个大概念,必须知道他都有那些部分,自己将来就业要选择那个方向。下面就说一下大数据就业的方向和技能需求以及岗位需求!仅供参考!!
一,大数据开发
从事大数据开发工程师
岗位职责
1、利用Hadoop、Spark等技术在分布式系统上对海量历史数据进行预处理,挖掘用户信
息;
2、参与大数据基础平台的搭建和维护;
3、负责广告投放项目管理平台研发;
4、负责大数据计算处理平台项目研发。
技术要求
1、熟练掌握c++/Java开发,具备扎实的程序设计基本功和学习能力
2、熟悉 Linux,熟悉 shell/perl/python/php 等脚本语言的一种或多种。
3、熟悉传统数据库MySQL。
4、熟悉MapReduce、Storm、Spark、Spark Streaming等大数据开发工具,对源代码
有一定研究者优先;
5、熟悉linux环境,熟悉shell等脚本编程;
6、有大规模数据处理和日志处理经验的优先。
7、有较强的人际沟通、协调能力,具备与技术人员沟通数据需求的能力;
8、具备良好的逻辑分析能力和解决实际问题的能力。
二,大数据运维
从事大数据运维工程师
岗位职责
1、负责大数据平台整体软硬件的日常运维;
2、分析平台运行状态,进行性能优化;
3、负责大数据平台运行故障的分析、定位和解决;
4、负责新技术、新组件的技术探索、测试和应用;
5、支撑运维自动化系统的设计和开发。
岗位要求:
1、 熟悉hadoop生态圈主要开源技术组件及其工作原理,能阅读相关源代码,能顺利阅读英文文档;
2、熟悉软硬件设备、网络原理,有丰富的大数据平台部署、性能优化和运维经验;
3、熟悉Linux,熟悉cacti、ganglia、zabbix等运维软件,熟悉SaltStack、Ansible等自动化软件,有python、java、shell编程基础;
4、工作认真负责,有较强的学习能力、动手能力和分析解决问题的能力;
补充:
熟悉Hadoop/Hbase/Hive/Presto/Yarn/Spark/Storm/Kafka/Elasticsearch/Flume等开源项目,有运维优化经验者优先;
熟悉Linux操作系统的配置、管理及优化;
熟悉Python、Linux、shell,有ETL维护经验、电信行业大数据维护经验者优先
三,数据挖掘
从事数据挖掘工程师
岗位职责
1、对海量数据进行分析,建立数据挖掘算法,利用大数据对产品进行研究和建模,为用户提供评估和预测等功能;
2、参与/负责用户画像、推荐等系统搭建,参与核心产品推荐场景算法的研发和优化;
3、采用先进的数据挖掘和机器学习算法,为公司业务部门提供决策依据;
4、搭建数据挖掘系统和机器学习系统,实现智能平台的自动化流程。
1、具备强悍的编码能力,有扎实的数据结构和算法功底;
2、优秀的学习能力、独立分析问题和解决问题能力;
3、熟悉Linux开发环境,熟悉Python,PHP,Java等语言两种以上;
4、熟悉基本的数据分析方法、数据挖掘、机器学习算法;
5、熟悉SPSS/Modeler/R/Python等至少一种数据挖掘工具;
6、熟悉Hadoop/Spark,有Elasticsearch,Solr,Kafka,Flume等开源项目使用经验
7、有画像、广告、推荐,搜索等算法方向实际工作经验优先
四,BI(商务智能)工程师— (包括数据库开发、BI开发工程师、ETL开发、报表开发、BI咨询顾问)
岗位职责
1、独立负责业务数据收集整理,构建经营分析和报表系统;
2、通过专题分析,对业务问题进行深入分析,为业务的策略、产品优化提供数据支持;
3、 以数据驱动业务为目标,进行数仓研发工作但不局限于数仓;
4、 参与数据仓库ETL设计、开发和优化工作,保证数据准确、稳定、组织合理
岗位要求
1、掌握Oracle、MySQL、ODPS等数据库开发技能,熟练应用开发、数据库原理和常用性能优化和扩展技术;
2、掌握数据仓库建设、熟悉大数据平台操作,离线计算Hive/MR研发、实时计算spark streaming/storm;
3、熟悉ETL逻辑、OLAP设计和数据分析技术(聚类分析、回归分析、决策树等)、数据挖掘相关算法;
4、熟悉Linux系统环境开发,掌握shell、perl、python等至少一种开发语言。
6. 有较强的逻辑/概率思维能力,善于分析、归纳、描述、沟通、和解决问题。
补充(根据企业工具区别)
1、全面熟知数据仓库设计理念、设计方法,熟练掌握Informatica、Kettle、Automation等至少一种ETL工具;
2、熟练掌握SAP BO、MSTR、SmartBI、Cognos、QV等至少一种BI工具;
3、熟悉数据仓库,掌握BI相关工具,如ETL工具(SSIS, SAP DataService)、OLAP工具(SSAS)和前端展示工具(BO CR/Webi)
五,数据可视化
从事可视化工程师
岗位职责
1、负责大数据平台业务逻辑和数据可视化功能,数据可视化组件研发;
2、搭建基础的可视化分析平台,设计数据分析应用的架构,实现实时数据调用与展示;
3、数据相关性分析与根因分析;
4、支持客户需求分析和数据分析。
岗位要求
1、熟练Web前端技术(SVG/HTML5/JavaScriptdeJS等);
2、熟练D3、Echarts、Three.js、WebGL等开源数据可视化库和技术;
3、有Web服务器端编程语言(如Node/Java)开发经验优先;
4、有blender(以及blender game engine)或者unity 3d或unreal engine等开发经验优先
一些BI岗位的详细介绍
BI工程师(开发、咨询、实施)
BI开发工程师
岗位职责
1、执行在框架设计的基础上完成具体组件的概要设计、详细设计编写;
2、完成BI系统具体组件的代码编写、单元测试;
3、参与BI系统报表平台技术架构设计,数据库结构设计;
4、参与BI系统数据仓库的构架、建模和实现。
5、负责向需求方提供数据及业务分析服务,负责整体风控模型的优化,理解并掌握BI报表需求;
岗位要求
1、有数据仓库或统计分析类项目开发经验或较深的理论知识;
2、熟悉Cognos、Webfocus、ireport等数据分析报表开发工具和技术;
3、熟悉Linux/Unix服务器,并了解一些基本的操作命令;
4、至少熟悉Informix/Oracle/SQL Server等数据库中的一种,并在此基础上有过ETL程序或存储过程的开发。
5、能够熟练应用JSP/Servlet/JavaScript等WEB开发技术,熟悉Spring,Struts2和iBATIS等主流的开发框架,熟悉BIRT、JasperReports等开源报表工具;
6、熟悉Linux Shell、Perl等脚本语言,熟悉ORACLE数据库,PL/SQL编程;
7、熟悉BI系统技术框架,熟悉数据采集流程,对数据仓库有比较深入的了解;
8、熟悉行业经营分析系统(BI)架构及实现者优先。
BI咨询顾问
岗位职责
1、分析客户的数据要求;
2、负责Qlikview/Tableau BI项目的实施和报表开发;
3、负责校验数据,保障数据的准确;
4、 负责客户需求收集、分析,梳理业务流程解决方案,项目的拓展支撑;
5、撰写需求规格书及各类相关文档;
6、良好的团队合作、协调、问题处理能力;
岗位要求
1、对BI有系统的认知;
2、熟练使用Qlikview,Tableau等前端工具;
3、熟悉MS SQL Server,熟练运用SQL语言;
4、前端报表偏业务方向需熟悉主流报表工具或新兴前端报表工具Qlikview、Tableau等优先考虑;
6、后台数据处理需熟悉掌握至少一种后台ETL开发工具,例:Informatica powercenter、Datastage、OWB、微软DTS、Kettle等;
7、后台数据建模需熟练掌握至少一种数据挖掘算法和建模方法,了解建模;
8、良好的英文能力,能快速阅读和撰写英文技术文档者优先。
BI实施工程师
岗位职责
1、负责BI项目的需求调研与分析工作;
2、负责BI项目的方案设计、实施或项目管理工作;
3、参与公司BI产品和项目的实施开发工作。
岗位要求
1、良好的数据库基础,精通SQL,深入掌握Oracle或其他数据库,能够进行数据库调优;
3、熟悉ORACLE、MYSQL、SQLSERVER等主流数据库的安装及配置、熟悉SQL语句编写及ETL、BI实施工作;
3、熟悉LINUX操作系统安装及常用命令;
4、熟悉BI基础理论知识,使用过BI相关产品;
5、参与BI相关项目的实施工作;
6、熟悉TOMCAT、JDK等安装及参数配置;
7、具备较强的语言表达能力,能与客户顺畅沟通或产品介绍;
8、具备较强的学习与动手能力,能够适应全国范围内出差;
9、熟悉hadoop大数据及自动化运维工具经验者的待遇从优。
ETL工程师
岗位要求:
具备一般的JAVA应用开发能力;
熟悉Oracle下的分区,表空间, SQL性能调优等操作;
熟悉常用的ETL工具,如:kettle, informatica等;
熟悉常用的报表工具,如:Cognos等。
岗位职责:
负责行业生产交易系统数据仓库开发,存储过程编写,数据模型研究,大数据研究
六,数据分析工程师
岗位职责:
1、进行业务和企业经营行为分析,梳理业务规律和业务需求;
2、将业务需求转化为数据需求,发现数据应用场景,梳理指标体系;
3、使用合适的数据分析工具进行数据分析和模型设计;
4、提出基于数据的结果和分析建议,根据分析结果进行行业研究、评估和预测;
5、编写数据分析报告;
6、完成领导交办的其他工作。
岗位要求
1、本科以上学历,计算机、数学、统计学等相关专业;
2、深刻理解大数据分析原理及相关应用;
3、熟练掌握主流数据库技术;
4、精通数据分析、挖掘工具与方法,如SAS、R、Python、EXCEL等;
5、敏锐的数据观察和分析能力,及时发现和分析其中隐含的变化和问题并给出建议;
6、良好的沟通能力和团队精神,较强的学习能力,能承担一定的工作压力;
还有就是要怎么学习,要参加培训?还是自学?,培训花费大但是有学习环境和氛围并且有人指导可以全身心的投入学习中。要是自学在自己没有基础的情况下是容易走弯路的而且花费时间会很长!
最后就是学历问题,大专之上学习较好,找工作还算能行,不过大专找工作也有点吃力但是也能找到!要是你大学的专业是计算机或者数学统计学相关专业可能出来很有优势,是加分项!
希望能够帮到你,欢迎关注,讨论
python等它们都有什么关系?
DWC6,我写了一篇自己的一个编程的学习经验分享吧,但是现在我发现我说的都是理论的东西,今天我又想给极客朋友们分享一下实际应用的编程上手教程。下面的内容纯属我自己的一点点想法,内容我认为非常简单,希望大家不会觉得比较难吧,如果觉得有难度希望你在下方评论写出一下,下次我会出更简单的。我写这个文章的目的就是和大家进行分享,同时也当做日记,希望以后如果有朋友问我如何上手或者亲戚家的孩子想学习的我也可以把这篇内容给他们看。废话不多说,下面进入正题。
我的一个项目运用了这三种语言,其实做程序一定要越简单越好,能用一种语言决不用2种,but 为何我要搞这么复杂?
因为!! 每种语言的都有缺点,当缺点影响了效果的时候,必须配合其它语言才能完美,话说大型系统都是多种语言一起上,不是大公司有钱烧的,而是实际的需求要求不同的语言配合完成!
1、我最想用的语言是php、框架选择多、开发速度快、即改即生效,但是php比较恶心的地方也非常多,调用系统命令的话,linux系统的权限问题非常严重,当初为了不用其它语言,php调用系统shell怎么办? 用c语言写了一个程序,编译成二进制linux可执行程序,赋予该程序root权限,然后再写一个shell文件,让c程序调用shell ,最后用php调用c程序来实现以root权限执行shell文件代码的能力,整个过程比较复杂,非常不爽。shell是linux系统原生语言,在控制系统层面上必用的,虽然它的语法和windows 的bat批处理命令是一样一样的恶心,但是跟系统打交道缺不了他,忍了吧。
跟系统打交道用php很他妈的费劲,简直无能。
2、php没有像java那样的application这种全局变量,所以你必须用写文件、缓存、数据库的方式来共享全局变量,来实现全局控制,这是极其恶心的,也就是说php没有全局缓存能力,半个废物,全局功能非常重要。虽然php插件很多哈,但是仍然弱。
3、没法全局控制所有http请求,什么意思?例如,10个人访问php,每个人进程独立,没法对10个人进行一个统一的管理和反馈。
这三个缺点,java、python和nodejs都可以完成,不需要插件配合。所以我被迫选择python配合PHP,所以python的优点很明显了,就是全能型,系统程序可以开发、web网站也可以开发,混合在一起的能力自己全部搞定,纯全能型语言。
nodejs和python一样,是新出来的语言,也是全能的。其实java也是全能的哈,java也很强大,但是我不喜欢用java的原因是它太过于死板和严谨了,但是他的严谨也让它适合做大型程序,稳定性一流、速度也快,就是开发速度不行,太严格太啰嗦了,框架也很庞大,但是java的确是优等生,能力全面不说,应用范围很广,像安卓开发都用java,一举多得,所以java很优秀不假,学java不亏,但是喜不喜欢,那就看个人喜好了,我是不太喜欢,我就喜欢开发速度越快越好,我也不做什么大型系统。
后来,为何我又加了一个nodejs语言,是不是神经病呢?不是,真的是又被逼了,连python也不好使。
python的web服务性能不如php快,同样做网站php访问速度快,所以php在web领域并非浪得虚名,开发快、响应快!
但是php速度不如java web 速度快,如果同样轻量级框架下,java编译成class后的响应速度比php快的,实际如此,因为php是脚本语言,每次都需要翻译成机器语言来执行,而java的字节码翻译速度要快很多了,更接近于机器语言,所以java快是有道理的。
nodejs的需要是因为 web接口,高并发web接口,nodejs比java、php、python都快得多,不是一点得快,是几十倍的快,这在实际应用中可非常重要了,尤其是接口响应速度的,因为按照预期功能,用php开发了,接口响应达不到需求,在不增加服务器的情况下怎么办?用python开发更慢了,用nodejs试试吧,果然快很多,效果很明显 ,为什么呢?因为nodejs的v8引擎是谷歌用在chrome浏览器上的速度很快,为何chrome会成为浏览器界的黑马一统江湖?就因为这v8 ,够轻量级又够快,nodejs给用了。
第二,nodejs是IO异步方式,写过javascript的都知道回调函数被大量使用,这点php做不到,php处理都是同步执行的,命令必须逐条被执行,nodejs不用的,这样节省了很多时间,在等待IO处理的时候,可以做其它事情。
话说,php和python也都能实现IO异步的机制,但是方案不成熟非原生支持,自己处理会很麻烦,万变不离气宗,任何语言都是表象对吧,都是对机器语言的封装,基于对cpu和内存等硬件机制的调用,仅此而已,所以任何语言想要做到同样的能力是完全可以的,但都无法超过电脑硬件的运行体系规则。
所以,因为nodejs在并发响应上的优势选择了它。所以我的程序用了3种语言,php、python、nodejs、shell,之前还有个c语言被python取代了,实际上python也不需要了, php、nodejs、shell就够了。
最后
到底用哪一种语言,根本不是我们可以说的算的,还是要看自己需要什么功能,用哪种语言实现起来编程最快、响应最快。
1、php 适合做前端界面UI层、普通响应级别的webservice接口用于和mysql数据库打通,框架多变成速度快够简单。
2、nodejs适合做IO密集的,并发需求打的、CPU计算少的,接口类。
3、python的能力实际上nodejs也基本ok,所以python作用反而不太大了,但是python在人工智能等类库上非常有优势,大数据爬虫等这种领域太方便,可能用python的大神比较多吧,我们站在巨人的肩膀上那轻松很多,所以python牛逼在类库强大且先进,语言本身全能、开发速度也非常快,也是因为类库太多吧。
很多人吐槽过python代码架构必须用空格或tab缩进,我也想吐槽,有这个必要吗?唯一好处就是代码工整一些,被迫的。
4、java,当今最流行的语言,已经持续很多年,确实强大,应用范围广,全能,各种插件也是很多,有点像人类社会的精英阶层的意思。
自学java?
自学Java,如何自学?好的,我送你免费精品教程
首先一定要梳理好相关知识点,从入门的基础语法开始学习,最重要的是看过文章和视频,自己一定要动手实操
这里我分享给你的Java学习线路图,希望对你有帮助:java学习线路图
这个学习线路图我分为了几个阶段,每个阶段能学到什么,能做什么,具体知识点请往下看,每个阶段知识点我都整理出来了,更适合学习!
java语言入门
可掌握的核心能力:
掌握Java开发环境基本配置;
掌握运算符、表达式、流程控制语句、数组等的使用;
熟练使用Idea开发工具;
掌握Java基本面向对象知识;
掌握常用类String、ArrayList等的使用。
配套视频:
java基础教程(编程就像打字一样简单)
视频地址:http://yun.itheima.com/course/375.html?1910stt
java语言进阶
可掌握的核心能力:
深入理解Java面向对象相关知识点;
掌握开发中常用类如集合、IO流、时间日期等操作;
掌握Java异常处理机制,熟悉Java多线程开发;
掌握网络基础知识,了解Socket原理,TCP、UDP协议;
掌握java基本语法完成单机程序的编写;
熟悉Java新特性,如Lambda、Stream流等操作
配套视频:
Java快速入门教程视频
视频
http://yun.itheima.com/course/269.html?stt
Javaweb
可掌握的核心能力:
掌握Java JDBC、连接池操作,熟练操作mysql数据库;
熟悉web开发中常用知识如 HTML5、CSS3、JavaScript、BootStrap、jQuery等;
掌握JavaWeb开发核心技术 Servlet、Listener、Filter等;
熟悉Linux服务器,并安装开发常用软件tomcat、mysql、nginx等;
掌握同步及异步操作的JavaWeb开发,具备B/S结构软件开发能力,完成基本的JavaWeb项目;
熟悉基本的项目管理工具Maven的使用。
配套视频:
超全面的JavaWeb视频教程
视频地址:
http://yun.itheima.com/course/36.html?1910mcgqq
项目一
可掌握的核心能力:
掌握企业中最常用SSM框架开发,开发出结构清晰、可复用性好、维护方便的企业级应用程序;
掌握AngularJS框架;
掌握Spring security框架;
掌握dubbox分布式调用技术;
掌握zookeeper分布式应用协调服务;
掌握Freemarker模板引擎;
掌握全文检索解决方案;
掌握spring boot1.x框架的基本应用;
掌握CAS实现单点登录;
掌握CORS实现跨域;
掌握微信扫码支付;
掌握电商秒杀解决方案;
掌握SpringTask实现任务调度;
掌握MavenProfilel实现开发与生产环境切换;
了解电商开发中相关业务模块如商品、订单基本操作;
了解电商开发中相关术语SPU和SKU等;
积累互联网电商项目开发经验。
配套视频:
Springmvc由浅入深全套
视频:http://yun.itheima.com/course/8.html?stt
Mybatis由浅入深全套
视频http://yun.itheima.com/course/289.html?stt
Maven精品教程
视频http://yun.itheima.com/course/234.html?stt
项目二
可掌握的核心能力:
熟悉基本的Java爬虫开发,掌握webmagic爬虫框架使用;
掌握httpClient的使用;
掌握spring data jpa框架;
掌握Spring boot2.x框架;
掌握Spring Cloud框架;
掌握MongoDB数据库使用;
掌握RabbitMQ消息中间件使用;
掌握Elasticsearch分布式搜索引擎;
掌握Rancher实现容器部署管理;
掌握Grafana实现服务的实时监控;
熟悉NodeJs环境,使用Npm和cnpm管理包资源;
熟悉ESlint进行前端语法校验;
熟悉axios的使用;
掌握vuejs框架的基本使用;
掌握瀑布流组件使用;
掌握前端页面分享功能的实现;
掌握企业级DevOps解决方案,熟悉Docker、Jenkins、git等;
了解spark mllib als 机器学习算法库实现智能分类;
了解DL4J深度学习框架实现智能推荐。
配套视频
2018年Vue.js深入浅出教程
http://yun.itheima.com/course/335.html?stt
深度掌握Springboot实践技术教程
需要再更
微服务初级课程
配套视频
SpringBoot教程_SpringBoot视频教程|黑马程序员
yun.itheima.com
需要再更
微服务高级课程
可掌握的核心能力:
ServiceComb改造十次方项目;
了解Kubernetes作用及为什么使用Kubernetes;
会使用K8S API完成基本操作;
理解微服务引擎CSE的功能;
能够实现ServiceComb项目接入CSE;
能够实现学成在线项目接入CSE;
理解云容器引擎CCE的功能;
能够使用容器镜像服务上传镜像;
能够将学成在线微服务部署到CCE;
能够测试微服务治理常用策略;
能够理解Mesher的作用;
能够完成学成在线使用Mesher接入CSE。
视频未更新,更新后上传
框架架构高级
可掌握的核心能力:
能够理解ORM框架;
使用Socket进行系统之间通信;
掌握在Java中开启多线程的三种方式;
掌握使用Netty实现通信;
掌握Netty常用的传输方式及ByteBuff的使用方法;
理解及时通信框架的架构;
掌握Protobuf数据格式及在Java中应用Protobuf;
掌握使用Netty实现服务端、客户端;
理解虚拟机client与Server的运行模式;
学习垃圾回收的算法;
掌握jps、jstat、jinfo、jstack、hprof等命令的使用;
掌握图形化监控工具JConsole工具的使用;
掌握Mission Control虚拟机诊断工具的使用;
掌握压力测试工具JMeter的使用;
掌握调整参数测试Tomcat的性能;
掌握“双亲模式”的原理以及解决方案。
好客租房项目
可掌握的核心能力:
能够实现房源信息更新的通知;
实现用户信息、房东、审核等功能;
能够实现API文档与模拟数据接口开发;
能够实现收藏、分享、举报、联系房东、预约看房、在线签约功能;
掌握微信小程序开发;
实现日志数据的清理以及推荐。
大数据转型Hadoop3
大数据hadoop教程入门配套教程
需要再更
如何查看服务器用户登陆日志?
题主是看到处理器占用过高怀疑被攻击的。首先你应该看下服务器进程占用,看看是哪些进程,如果是web服务进程占用高。接下来就综合自己服务器的配置,然后检查当时的访问量,看是不是突增的大量访问造成。可以通过网站日志以及第三方统计工具来检查。是的话检查这些访问是正常用户访问还是机器访问。机器访问的话就考虑CC攻击。可以适当安装一些软件防火墙屏蔽一部分。
关于服务器维护,这个问题很大,服务器维护不是一句两句能说完的。可以考虑以下两个方面:
服务器安全设置
关闭不必要的服务器端口,Windows系列服务器可以安装一些防护软件,linux上的个人使用几款对性能消耗较大,网站相应很慢这里不做推荐。linux开启密钥登陆服务器等。
服务器性能设置
缓存优化,数据库性能设置优化,PHP性能设置,PHP扩展性能组件等。
以上是主要需要考虑的两个方面。其他的比如易用性等看自己情况来优化。