精华内容
下载资源
问答
  • 150讲轻松学习Python网络爬虫

    万人学习 2019-05-16 15:30:54
    【为什么爬虫?】        1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP...
  • 每天前100人再送5门编程课! AI+5门300元课程+社群闭门分享会 源码开源下载:... 课程包含思维导图上的所有内容(价值199元)前500名立减100元,仅99元买完就能
  • 2、不同于国内多数教程和书籍,每个知识点务求讲精、讲透,帮助你掌握PS的精髓,而非软件操作上的皮毛,让你真正到PS的本质,一次学习,终身受用,少走弯路,节约生命。 3、课程会随PS新版本的推出持续更新,不必...
  • 《信息竞赛-C/C++入门》 C++语言

    千人学习 2019-01-28 12:52:58
    尹成老师带你步入C++语言基础的殿堂,讲课生动风趣、深入浅出,全套视频内容充实,整个教程以C++语言为核心,完整精彩的演练了C++语言操作流程以及各种精彩的小项目等,提高竞赛能力,非常适合同学们学习!
  • 零基础C#编程—C#从小白到大咖

    万人学习 2019-06-04 13:18:37
    本课程从初学者角度出发,提供了C#从入门到成为程序开发高手所需要掌握的各方面知识和技术。 【课程特点】 1 由浅入深,编排合理; 2 视频讲解,精彩详尽; 3 丰富实例,轻松易学; 4 每章总结配有难点解析文档。...
  • 董付国系列教材《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样》配套视频,讲解Python 3.5.x和3.6.x语法、内置对象用法、选择与循环以及函数设计与使用、lambda表达式用法、字符串与正则...
  • 自然语言处理动手Bert文本分类

    千人学习 2020-05-30 09:41:43
    Bert作为目前自然语言处理领域最流行的技术之一,文本分类作为自然语言处理领域最常见的任务之一,Pytorch作为目前最流程的深度学习框架之一,...延续动手系列课程风格,全程手敲代码,跟着杨博一行一行代码撸起来。
  • Linux到底什么

    万次阅读 多人点赞 2019-09-27 21:07:57
    ​我们常常听到很多人说要学学Linux或者被人告知说应该学学Linux,那么Linux到底要什么? 为什么要Linux 在回答什么之前,我们先看看为什么要。首先我们需要认识到的是,很多服务器使用的是Linux系统,...

    来源:公众号【编程珠玑】

    作者:守望先生

    网站:https://www.yanbinghu.com/2019/09/25/14472.html

    前言

    ​我们常常听到很多人说要学学Linux或者被人告知说应该学学Linux,那么学Linux到底要学什么?

    为什么要学Linux

    在回答学什么之前,我们先看看为什么要学。首先我们需要认识到的是,很多服务器使用的是Linux系统,而作为服务器应用程序的开发者或者维护者,如果不了解Linux的基本使用,该如何进行开发或者维护呢?

    当然,也有可能你听说Linux更高大上,或者是说Linux对开发者更加友好(Windows用户把刀放下),这都是题外话了。

    在我看来,学习Linux主要有以下两点原因

    • 使用标准C/C++ 编写运行在Linux上的应用程序

    • 编写部署在Linux上的应用程序,如Python,Java web服务程序

    • 一探究竟。众所周知,Linux开源,windows并非如此。

    而对于Python,它有Python解释器,Java有Java虚拟机,他们实际上对Linux的需求是没有C/C++来的高。即便如此,Linux也是值得Python/Java开发者去学习的。如果你是做C/C++开发,那么Linux是必备的,还记得当前被VC6支配的恐惧吗?

    Linux学习方向

    那么一般说的学Linux是要学什么呢?方向不同,要学习的内容也不同,可以大致分为这么几个方向:

    • 运维,维护Linux服务器

    • 应用开发,开发Linux应用程序

    • 底层开发

    我本人是做Linux应用开发的,因此对于运维方向和底层方向不是很了解,这里仅简单说一下。

    运维Linux主要需要学会对服务器的基本部署,监控,配置,管理等等, 你可以认为,这些机器归你管了,7*24小时保障它能正常提供服务(删库跑路就别做了),所以7月24日请对运维的朋友好点。也欢迎运维的朋友留言纠正或者补充我的说法。

    底层开发需要了解uboot,文件系统,内核等底层相关内容,主要工作可能涉及文件系统裁剪,驱动开发,内核模块定制(如内存管理,进程调度)等等。底层开发总体来说要求比较高。

    应用开发自然是需要学习如何开发在Linux上运行的应用程序,如何定位Linux应用程序问题等等。

    来源:公众号【编程珠玑】 作者:守望先生

    Linux应用开发学什么

    Linux的学习很多会以命令为主,因而初学会觉得枯燥甚至疑惑,鼠标点点点就能完成的事,为什么要劈里啪啦敲这么多?这里给出两点理由,也欢迎你补充:

    • 出于资源的考虑,绝大部分Linux服务器没有图形界面

    • 命令行便于自动化,将一系列操作写入脚本,可代替手动操作

    而它的学习我把它分为这么几个阶段:

    • 基本使用

    • 开发调试

    • 系统认识

    这三个阶段对知识积累的要求不一样,但总体来说并没有严格的先后之分。

    类于windows,当年你学习windows的时候学了什么?

    • 开关机?

    • 安装卸载软件?如安装视频播放器,音乐播放器(为啥要安这玩意?)。

    • 如何打开安装的软件?如打开浏览器上网,打开编辑器写文档

    • 如何存放自己的资料?移动,创建,删除等等

    • 如何使用office 办公软件

    • ……

    是不是想想好像也没有特意地去学习?

    那么对于学习Linux来说也是类似的,就是学会这些最普通的使用,

    • 如何开关机

    • 如何上网

    • 如何打开命令行

    • 如何使用命令行安装卸载软件

    • 如何编辑文本

    • 如何创建,移动,删除文件

    • 如何查看文件内容,解压缩文件

    • ……

    这个阶段最难的就是从图形界面到命令行的转换

    那么第二阶段呢,就需要学会:

    • 如何编写Linux应用程序

    • 如何编译或者构建你的程序

    • 如何运行你的程序

    • 如何定位程序bug

    而第三阶段,则是一个需要漫长的学习过程,但都是为开发服务,包括:

    • 理解并践行一切皆文件

    • ELF文件,Linux主要可执行文件格式

    • Linux各大机制的基本原理,如进程调度,内存管理,虚拟内存,文件系统等,既然要写Linux应用程序,怎么能不了解它所在平台的主要机制呢?

    越是疑难问题,越需要这些最基本的知识。

    怎么学?

    来到了大家最关心的问题了,同样的,每个人的情况不太一样,这里只给出我的个人建议。

    关于第一阶段,你可以先定个小目标,例如一段时间内学会在Linux下进行你的日常活动(玩游戏就算了),例如编写文档,看视频等等。同时建议:

    • 选择主流的发行版,如ubuntu,centos等,遇到问题时比较容易解决

    • 在window下安装虚拟机,这样Linux环境就随你折腾了

    在这期间,你可能需要了解

    这里的学习你可以通过网上搜索资料或者购买相关书籍进行操练。如果你不想安装虚拟机或者docker,你可以通过一些在线的Linux来体验。

    第二阶段也是主要的阶段,这一阶段要学习的东西非常多,多是命令的学习,这里同样可以参考《鸟哥的Linux私房菜》。不过初期阶段建议抱着一个目的去学习,就是如何在Linux写一个完整的程序,为了达到这个目的你需要学习

    这个过程涉及到的命令非常多,但是不建议每一个都去细学,首先知道有这么一个命令即可,然后需要的时候能够快速找到用法,如通过man命令查看手册。总之,记住你的目标就是流畅地进行开发调试,而在达成这个目标地过程中,你自己自然会慢慢接触很多东西。

    但是有必要说明的是,开发Linux应用程序并不一定要在Linux下编写代码,你可以选择利用samba等工具在windows和linux之间共享文件,然后再在windows下熟悉的工具中或者你认为比较强大合适的工具中编写代码,在Linux下进行编译调试即可。当然你也可以选择Linux下的IDE,或者将vim调教一下也是可以的。

    第三阶段要求是比较高的,这个时候你应该学习过操作系统的相关课程(如,《现代操作系统》,《操作系统原理》等),然后你可以通过诸如《Linux内核设计与实现》,《深入Linux内核架构》,《深入理解Linux内核》等书籍进行相关概念学习,也可以通过阅读源码进行深入学习,最终,你需要了解堆和栈,内存管理,进程调度,虚拟内存,文件系统等相关知识。
    当然相关命令学习也必不可少,例如readelf,nm,ipcs,iostat,objdump,free,chrt,pmap,uptime,top,pidstat等。

    以上就是三个阶段Linux相关的学习内容和建议,实际上其他相关内容的同步学习也非常重要,包括相关数据结构与算法,系统编程,计算机网络等内容的学习,否则看到很多命令的结果仍然会一脸懵逼。

    最后,建议实践再实践

    总结

    限于本人知识水平有限,以上属个人建议和看法,仅供参考,欢迎留言说说你为什么要学Linux,有什么学习方法?

    推荐阅读:

    linux常用命令--开发调试篇

    Linux常用命令--文本查看篇

    Linux常用命令--系统状态篇

    Linux常用命令-解压缩篇

    关注公众号【编程珠玑】,获取更多Linux/C/C++/Python/Go/算法/工具等原创技术文章。后台免费获取经典电子书和视频资源

    展开全文
  • 就会——电脑安装linux虚拟机

    千人学习 2019-08-13 11:24:18
    在Linux环境下学习编程开发,运维管理,都需要用到Linux系统。 可以安装Linux、Windows双系统,也可以将电脑重装为Linux系统,最简单的方法就是安装一个Linux虚拟机。 用的时候打开虚拟机,不用的时候关闭虚拟机。...
  • 从零开始学习机器学习视频教程

    万人学习 2017-12-04 22:38:30
    机器学习难,主要的难度在于算法模型多不好理解,各种各样的工具不知道如何使用,实际项目不知道如何开发。本门课程将系统入门机器学习,课程内容不光是对算法的学习,还包括诸如算法的评价,方法的选择,模型的...
  • 计算机图形导论

    千次阅读 多人点赞 2018-10-12 22:42:46
    计算机图形概念 1.1什么是计算机图形?(Computer Graphics) 关于计算机图形的定义众说纷纭。 IEEE 对计算机图形的定义为:Computer graphicsis the art or science of producing graphical images with...

     

    一.计算机图形学概念

    1.1什么是计算机图形学?(Computer Graphics)

    关于计算机图形学的定义众说纷纭。

    IEEE 对计算机图形学的定义为:Computer graphicsis the art or science of producing graphical images with the aid of computer。

    国际标准化组织 ISO 将计算机图形学定义为:计算机图形学是一门研究通过计算机将数据转换成图形,并在专门显示设备上显示的原理方法和技术的学科。它是建立在传统的图学理论、应用数学及计算机科学基础上的一门边缘学科。

    总而言之计算机图形学是研究怎样利用计算机来显示、生成和处理图形的原理、方法和技术的一门学科,这里的图形是指三维图形的处理。

    1.2图形和图像

    图形和图像辨析

    计算机图形学(computer graphics)的基本含义是使用计算机通过算法和程序在显示设备上构造图形。图形是人们通过计算机设计和构造出来的,不是通过摄像机、扫描仪等设备输入的图像。这里的图形可以是现实中存在的图形,也可以是完全虚拟构造的图形。以矢量图的形式呈现,更强调场景的几何表示,记录图形的形状参数与属性参数。例如,工程图纸,其最基本的图形单元是点、线、圆/弧等,其信息包含图元的几何信息与属性信息(颜色、线型、线宽等显式属性和层次等隐式属性)。

    图像处理(image processing)则是研究图像的分析处理过程,图像处理研究的是图像增加、模式识别、景物分析等,研究对象一般为二维图像。图像以点阵图形式呈现,并记录每个点的灰度或色彩。例如,照片、扫描图片和由计算机产生的真实感和非真实感图·形等, 最基本的图像单元(pels,picture elements)是点—像素(pixel),其信息实际上是点与它的属性信息(颜色、灰度、亮度等)。

     

    1.3计算机图形学发展

    • 20 世纪 50 年代:1946 年 2 月 14 日,世界上第一台电子计算机ENIAC在美国宾夕法尼亚大学问世,1950 年第一台图形显示器诞生于麻省理工学院,从此计算机具有了图象显示功能,也开启了图形显示与计算机技术联系的桥梁。

    • 20 世纪 60 年代:1962 年美国 MIT 林肯实验室的 Ivan E.Sutherland 发表了一篇题为“sketchpad:一个人机交互通信的图形系统”的博士论文,首次使用了“Computer Graphics” 这一概念,证明了交互式计算机图形学是一个可行的、有应用价值的研究领域,从而确立了计算机图形学正式成为一个独立学科的分支。随着光栅显示器的诞生,对光栅图形学算法的研究迅速地发展壮大起来,大量基本概念以及相应的算法应运而生。

    • 20 世纪 70 年代:图形学在这一时期进入了兴盛期,光栅图形学算法迅速发展,区域填充、裁剪、消隐等概念及其相应算法纷纷被提出,实用的 CAD 图形系统也开始出现。除此之外,真实感图形学和实体造型技术的产生也是 70 年代计算机图形学的两个重要进展。

    • 20 世纪 80 年代以后:出现了带有光栅扫描显示器的微型计算机和图形工作站,极大的推动了计算机图形学的发展,如 Machintosh、IBM 公司的 PC 及其兼容机,Apollp、Sun 工作站等。随着奔腾 III 和奔腾 IV 系列 CPU 的出现,计算机图形软件功能一开始部分地由硬件实现。高性能显卡和液晶显示屏的使用,高传输率大容量硬盘的出现,特别是 Internet 的普及使得微型计算机和图形工作站在运算速度、图形显示细节上的差距越来越小,这些都为图形学的飞速发展奠定了物质基础。

    • 20 世纪 90 年代以后:微机和软件系统的普及使得图形学的应用领域日益广泛,计算机图形学朝着标准化、集成化和智能化的方向发展,多媒体、人工智能、计算机可视化、虚拟现实等分支蓬勃发展,三维造型也获得了长足发展。ISO 公布的图形标准越来越精细,更加成熟。这是存在着一些事实上的标准,如 SGI 公司开发的 OpenGL 开放式三维图形标准,微软公司为PC 游戏开发的应用程序接口标准DirectX 等,Adobe 公司 Postscript 等,均朝着开放式、高效率的方向发展。

     

    二.计算机图形学总体框架

    数学基础:主要包括一些基本的算法,例如向量与几何的变换,如几何建模时的三维空间变换、绘制时的三维到二维的投影变换和二维空间的窗口和视图变换等。

    建模:三维和二维空间的各种几何模型,有解析式表达的简单形体,也有隐函数表达的复杂曲线等。建模的主要工作是几何计算。

    渲染:或者叫做绘制,指的是模型的视觉实现过程,计算机图形学的光照、纹理等理论和算法都需要对模型进行处理,其中也要用到大量的几何计算。

    交互技术:如今的交互式图形学已经可以提供图形通讯手段,成为图形交互的主要工具。几何计算贯穿于以上各个过程之中,是计算机图形学的基础。在图形学中那些看上去是“绘制”的内容,本质上仍是几何计算的问题。例如隐藏线、隐藏面的消除以及具有光照效果的真实感图形显示虽是提升图形显示效果的手段,但其主要的工作恰是几何计算。Gourand 插值模型(通过对多边形顶点颜色进行线性插值来绘制其内部各点)和 Phong 插值模型(对多边形顶点的法线方向进行插值以产生中间各点的法线方向)的实质均是几何插值问题;光线跟踪的工作和时间花费主要是几何计算-光线与景物的求交计算及交点处景物表面的法向、反射光线与折射光线的方向计算等。

     

    2.1 建模

    没有模型,图形就无从谈起,建模是计算机图形学各项工作的基础和前提,建模技术的核心是根据研究对象的三维空间信息构造其立体模型,尤其是几何模型,并利用相关建模软件或编程语言生成该模型的图形显示,然后对其进行处理。目前,物体的三维几何模型就其复杂程度来说可以分为三类:线模型、面模型和体模型。对三维建模技术的研究基本上都是针对三维面元模型和体元模型来展开的。

     

    2.2 渲染

    计算机图形学的一项主要工作是将计算机中抽象的模型转换为人们直观可见、可以形象理解的图形。它综合利用数学、物理学、计算机等知识,将模型的形状、物理特性(如材料的折射率、反射率、物体发光温度等,机械强度、材料密度等对运动模拟的影响等),以及物体间的相对位置、遮挡关系等性质在计算机屏幕上模拟出来,是一个将“几何”演绎到画面上的再创造过程,这就是渲染,也叫绘制。

    2.2.1什么是渲染?

    当需要把模型或者场景输出成图像文件、视频信号或者电影胶片时就需要用到渲染

    (Render)。渲染是指软件由模型生成图像的过程。模型是用语言或者数据结构进行严格定义的三维物体或虚拟场景,它包括几何、视点、纹理、照明等信息。图像是数字图像或者位图图像。除去后期制作,渲染是计算机图形处理的最后一道工序,通过它得到模型与动画的最终显示效果。实现渲染依靠多种软件,如各种 CG 软件自带渲染引擎、RenderMan 等。

    随着计算机图形学的不断深入发展,渲染的应用领域越来越广泛:计算机与视频游戏、模拟、电影或者电视特效以及可视化设计。作为产品来看,现在已经有各种不同的渲染工具产品,有些集成到更大的建模或者动画工具中,有些是独立产品,有些是开放源代码的产品。从内部来看,渲染工具都经过了仔细的设计,其理论基础是光学、视觉感知、数学以及软件开发等各种科学理论。

    2.2.2渲染技术有哪些?

    扫描线渲染与栅格化:扫描线渲染是一行一行进行的一项技术和算法集。所有待渲染的多边形首先按照顶点 y 坐标出现的顺序排序,然后使用扫描线与列表中前面多边形的交点计算图像的每行或者每条扫描线,在活动扫描线逐步沿图像向下计算的时候更新列表。这种方法的一个优点是没有必要将主内存中的所有顶点都转到工作内存,只有与当前扫描线相交边界的约束顶点才需要读到工作内存,并且每个定点数据只需读取一次。主内存的速度通常远远低于中央处理单元或者高速缓存,避免多次访问主内存中的顶点数据,就可以大幅度地提升运算速度。

    栅格化又叫光栅化,是将几何数据经过一系列变换后最终转换为像素,从而呈现在显示设备上的过程。栅格化将顶点数据转换为片元,片元中的每一个元素对应于帧缓冲区中的一个像素。如下图。

     

    光线投射:从不同视角观察场景,并根据几何与反射强度的基本光学原理计算观察到的图像,这就是光线投射。光线投射算法的基本思想是从视平面每个像素发出一条光线,穿过体数据,基于最基本的光线吸收和发射模型,沿着光线方向对颜色和阻光度进行积累。当光线与物体交叉的时候,交叉点的颜色可以用几种不同的方法来计算。其中最简单的方法是用交叉点处物体的颜色表示该点的实际颜色;也可以用纹理映射的方法来确定;一种更加复杂的方法是依据局部光照模型进行计算。为了减少人为误差,可以对多条相邻方向的光线进行平均。另外的一些计算涉及到从光源到物体的入射角,以及根据光源的强度计算像素的亮度值。

    光线投射算法从视点发出一组光线,对光线经过的三维数据集上的数据可以间隔均匀地采样,与人类真实视觉相似,适用于透视投影。因此光线投射主要被用于实时模拟场景下, 例如三维计算机游戏以及动画等,这类场景往往对细节不太重视而且通过人为制造细节可以得到更好的表现效果。

    辐射着色:辐射着色是模拟反射光线如何反射到它表面以及如何照亮周围环境的方法。这种方法可以生成较为真实的浓淡效果,并且更加易于捕捉室内场景的环境光。这种模拟的光线基础是特定物体表面某一点的漫反射的光线散布在很大的方向范围内并且会照亮周围 的环境。 各种模拟技术的复杂性可能会有所不同。许多渲染方法所用的辐射着色模型都非常原始, 它们只是简单地根据环境因数变化照亮整个场景。但是当高级的辐射着色与高质量的光线跟 踪算法组合在一起使用的时候,它们能够生成相当真实的图像,尤其是对于室内场景更是这样。在高级的辐射着色模拟中,递归的有限元分析算法不断地将光线在模型表面之间来回反射,直到达到一定的递归条件为止。这样一个表面的色彩就会影响其它相邻表面的色彩,反之亦然。整个模型的照明结果会被保存起来,在光线投射或者光线跟踪模型中作为输入使用。由于这项技术的递归特性,所以对于复杂物体的模拟速度非常缓慢。一些先进的辐射着色计算方法可能只计算房间中从墙面、地板与房顶反射的环境光,而并不计算复杂物体反光对于辐射着色的影响,或者在辐射着色计算中使用同样尺寸及纹理的简单物体取代复杂物体。如果场景中运动的辐射着色物体很少,那么可以在多帧画面中重复使用同样的辐射着色数据。

    光线跟踪:类似于光线投射,但是光线跟踪使用了更加先进的光学模拟方法,并且通常使用蒙特·卡罗方法以实现更加真实的结果,不过这样做的代价通常是速度的大幅度降低。

    光线跟踪是比其他渲染方法如扫描线渲染等更加能够实现的模拟光线,因此像反射和阴影这样一些需要复杂精确渲染的效果,就需要光线跟踪算法来实现。因此,在要求高质量渲染效果的光线跟踪中,通常每个像素都需要采样多条光线,并且不仅是跟踪到第一次相交, 而是需要按照“入射角等于反射角”这样的光学定律以及更加高级的处理折射与粗糙表面反射的定律处理多次连续反射。一旦光线遇到光源更可能出现的是光线反射次数已经达到设定的限制,那么最终点的表面照明就通过上面的方法确定下来,并且经过多次反射发生的变化也可以估计在观察点看到的亮度。每个采样点、每个像素都要重复这个过程。在有些场合中每个交点可能生成多条光线。

    作为一种非常有效的方法,光线跟踪的处理速度很慢,但也在一些需要高真实感效果的场合下得到应用,例如电影制作、广告制作等。此外,简化的光线跟踪方法可以广泛应用于不需要高质量细节的场合。目前已经出现了一些处于原型阶段硬件加速的光线跟踪设备,在一些游戏演示中也有实时软件或者硬件光线跟踪的应用。

     

    2.3 图形交互

    l 几何约束 :几何约束可以用于对图形的方向、对齐方式等进行规定和标准。

    l 引力场 :

    引力场可以看作是一种定位约束,通过在特定点周围假想有一个区域,当光标中心落在这个区域内时,会自动地被直线上最近的一个点代替。就像一个质点进入直线周围的引力场,然后被吸引到这条直线上去一样。引力场的大小要适中,太小了不容易进入引力区,太大了线和线的引力区相交,光标在进入引力区相交部分有可能会被吸引到不希望选的线段上去,增大误接的概率。

    l 拖动 :要把一个对象移动到一个新的位置时,如果不是简单地用光标指定新位置的一个点,而是用光标移动时拖动着被移动的对象,会使用户感到更直观,并且可以使对象放置的位置更恰当。

    l 橡皮筋技术 :

    被拖动对象的形状和位置随着光标位置的不同而变化,是一个不断地进行画图—擦除— 画图的过程。

    ①从起点到光标中心点(x,y)处画图

    ②擦除起点到光标中心点(x,y)处的图形

    ③光标移动到新的位置:x=x+△x,y=y+△y

    ④转第①步,重复这个过程,直到按下确认键。

    l 操作柄技术 :

    可以用来对图形图像进行缩放、旋转、错切等几何变换。先选择要处理的图形对象,该图形对象的周围会出现操作柄,移动或者旋转操作柄就可以实现相应的变换。

     

    2.4几何计算

     

    三.计算机图形学著名公司

    展开全文
  • Java学习指南(Swing高级篇)

    万人学习 2019-03-19 22:49:50
    Drop,一个可拖拽排序的列表,以及一个拼图游戏的实现 * 课程特色 * 轻快 - 采用小章节教学,起来轻松 实用 - 以实际工程需要出发来设计课程 有趣 - 穿插大量特效实例,增加趣味性和学员的成就感 专业 - 课程中...
  • 手把手带你python爬虫

    千人学习 2019-12-05 16:17:54
    课程名称:手把手带你学会Python爬虫 课程特色:大量的课堂案例,让你解决疑难杂症能力更上一层楼 学习建议:建议懂前端基础和后端基础的人观看 课程简介:课程包含urllib、requests、正则、xpath、bs4、selenium、...
  • 该课程是《一就会——电脑安装linux虚拟机》的提高篇。
  • JAVA后端应该什么技术?

    万次阅读 多人点赞 2019-07-01 16:17:34
    Java语言是最常见的后端开发语言之一,Java语言由于自身具备构建多线程的能力,且体系结构比较中立,所以在大型互联网平台的开发中得到了广泛的采用。 目前要想从事Java的后端开发应该学习以下内容: ...

    Java语言是最常见的后端开发语言之一,Java语言由于自身具备构建多线程的能力,且体系结构比较中立,所以在大型互联网平台的开发中得到了广泛的采用。

    目前要想从事Java的后端开发应该学习以下内容:

    第一,Servlet技术。Servlet技术是Java后端的重要技术之一,作为Java Web开发的核心组件,Servlet承担了Web MVC结构中的核心作用(功能导航)。传统的Model2结构(Servlet+JavaBean+JSP)虽然在目前已经很少使用了,但是Web开发的基本结构依然没有改变。Servlet技术的应用涉及到Web容器、会话(HttpSession)、安全、同步、Web应用部署等相关内容。

    第二,Java操作数据库。后端开发免不了与数据库打交道,所以掌握Java的数据库操作是一个基本要求。Java操作数据库涉及到的内容有JDBCJNDIRMIDAO等内容,其中使用RMI+JDBC是构建java数据库开发的一个常见的解决方案,而JNDI则是对各种资源的定义。

    第三,Spring框架。Spring+SpringMVC+MyBatis是目前一个比较常见的后端开发方案,Spring的原理就是构建了一个业务组件容器SpringMVC则是Web MVC的一个具体实现框架,而MyBatis则是一个基于DAO的实现框架。从性能的角度来说,Spring是EJB的轻量级解决方案,得到了广大Java程序员的欢迎。如果有Servlet以及数据库操作的基础,那么学习这几个框架的使用是一件非常轻松的过程。虽然基于Spring的编程比较方便,但是Spring也有缺点,比如配置文件过于繁琐。

    第四,结合hadoop构建Java的分布式开发。Java的分布式开发是提高Java后端处理能力的重要内容,RMIJava分布式开发比较常见的解决方案,学习起来也比较简单。在学习完RMI之后可以进一步学习在Hadoop平台(大数据平台)下构建Java的分布式应用,另外Docker(云计算常用)也是一个不错的构建分布式开发的平台。

    Java开发涉及到的内容比较多,需要一个系统的学习过程,建议在实际使用过程中学习,这样效果会更好。

    本文分享到此就结束,以上就是我对Java后端需要掌握哪方面的技术的一个简单分享,希望对你们会有所帮助,如果你现在也在学习Java,在入门学习Java的过程当中有遇见任何行业,技术方面的问题,你都可以加入我的Java学习交流群:https://jq.qq.com/?_wv=1027&k=5wobSeD 里面有我从去年到现在,根据市场技术栈需求录制的最新视频教程,群文件里面还有我这几年整理的学习手册,面试题,开发工具,PDF文档教程,需要的话可以自己去下载。

    展开全文
  • Arduino开发从零开始电子的都玩这个

    千次下载 热门讨论 2014-09-29 13:32:52
    作为开源硬件的代表之一,Arduino包含一套硬件和软件的交互制作平台,已经迅速普及到全球范围。本书由浅入深,从电子基础知识讲起,深入Arduino语法和各种案例,专为零基础的电子爱好者和发烧友编写。...
  • Python GUI库PyQt5视频教程,内容包括pyqt5的安装、环境搭建、配置,桌面系统的开发等。该系列课程一共20套,每一套视频课程会深入讲解Python的一类知识点。Python是当今炙手可热的编程语言,可用于多个领域,人工...
  • 可能很多刚接触 Spring Boot 的小伙伴都会有这样的疑问,Spring Boot 要怎么,要不要先 SSM?今天结合自己的经验,和大家说一说我的看法,也顺便推荐几个 Spring Boot 学习资料。 1.Spring Boot 是什么 我们刚...

    可能很多刚接触 Spring Boot 的小伙伴都会有这样的疑问,Spring Boot 要怎么学,要不要先学 SSM?今天结合自己的经验,和大家说一说我的看法,也顺便推荐几个 Spring Boot 学习资料。

    1.Spring Boot 是什么

    我们刚开始学习 JavaWeb 的时候,使用 Servlet/JSP 做开发,一个接口搞一个 Servlet ,很头大,后来我们通过隐藏域或者反射等方式,可以减少 Servlet 的创建,但是依然不方便。

    再后来,我们引入 Struts2/SpringMVC 这一类的框架,来简化我们的开发 ,和 Servlet/JSP 相比,引入框架之后,生产力确实提高了不少,但是用久了,又发现了新的问题,即配置繁琐易出错,要做一个新项目,先搭建环境,环境搭建来搭建去,就是那几行配置,不同的项目,可能就是包不同,其他大部分的配置都是一样的。

    Java 总是被人诟病配置繁琐代码量巨大,这就是其中一个表现。那么怎么办?Spring Boot 应运而生,Spring Boot 是 Pivotal 团队在 2013 年开始研发的一个基于 Spring 的全新框架,试图将 Spring 中臃肿的配置进行简化,使 Java 开发更加轻量与快速,这个框架非常活跃,官方也非常重视。

    Spring Boot 主要提供了如下功能:

    1. 为所有基于 Spring 的 Java 开发提供方便快捷的入门体验。
    2. 开箱即用,有自己自定义的配置就是用自己的,没有就使用官方提供的默认的。
    3. 提供了一系列通用的非功能性的功能,例如嵌入式服务器、安全管理、健康检测等。
    4. 绝对没有代码生成,也不需要XML配置。

    Spring Boot 的出现让 Java 开发又回归简单,因为确确实实解决了开发中的痛点,因此这个技术得到了非常广泛的使用,大概从 2017 年年初开始,Spring Boot 基本上面试必问,现在流行的 Spring Cloud 微服务也是基于 Spring Boot,因此,所有的 Java 工程师都有必要掌握好 Spring Boot。

    从 Spring Boot 诞生的过程中,我们可以看到:

    1. Spring Boot 并非另起炉灶,而是在现有的 Spring 框架的基础上整出来的,它把 Spring 中繁琐的配置进行了简化。
    2. Spring Boot 降低了 Spring 家族的使用门槛,使新手更易上手 Spring 框架。

    既然 Spring Boot 不是另起炉灶,那么 Spring Boot 学习要不要跳过 SSM 呢?听松哥来分析。

    2.要不要跳过 SSM

    这是很多人问我的一个问题,我的建议是:不要

    Spring Boot 基于 Spring,简单且容易上手,很多人想当然的跳过 SSM 直接上 Spring Boot。但是当我们细究 Spring Boot 中的自动化配置、条件注解、Java 配置等东西时,实在找不出太多新鲜玩意,Java 配置是 Spring3 开始提供的,条件注解 也是 Spring 中的东西,很多很多,都是 Spring 中就有的,只不过这些东西在 Spring Boot 时代大放异彩。

    也就是说,即使你跳过了 SSM 直接去学习 Spring Boot,实际上还是在学习 Spring 中的东西,那既然这样,我们还不如坐下来,老老实实把 Spring 过一遍。

    各个领域的开发工程师其实都会面临类似的问题,学习了一些优秀的封装框架之后,还有没有必要去学习底层?当然有必要!因为底层的东西可以让你深刻的理解你目前用的这个东西,也能让你在出问题时快速解决掉问题。

    其实无论你想搞什么技术,都要有牢固的基础知识,这些牢固的基础知识就像肥沃的土壤,可以孕育出各种不同技术方向的牛人,基础掌握好了,学什么框架都快。今天你跳过 SSM 直接学了 Spring Boot,假如有一天 Spring Boot 不行了,Pivotal 团队又基于 Spring 框架搞了一个新的框架出来,那你是不是又要去学一遍?但是如果你一开始就掌握了 Spring 的各种用法,无论基于它搞出来什么样的框架,你都能快速上手。更进一步,如果你研究透了 Spring 中的 AOP、Ioc/DI,你会发现很多框架大同小异,核心思想就是这些东西,那么你在学习 Spring 之外的框架,就会容易很多。

    如果你对 SSM 还不太熟悉的话,可以在公号后台分别回复 springspringmvcmybatis 获取松哥手敲 5 万余字的干货教程。

    3.都要学哪些

    那么 Spring Boot 学习都要学哪些东西呢?我这里列举了一个进阶路线:

    1. 最基础的当然是 Spring/SpringMVC 相关的东西了。
    2. 搭配各种页面模版的使用,例如 Jsp/Thymeleaf/Freemarker/Groovy Templates 等。
    3. 和各种 SQL 数据库的整合,以及一些常见的数据持久化框架,例如 JdbcTemplate、MyBatis、Jpa 等。
    4. 和各种 NoSQL 数据库的整合,例如 Redis、MongoDB、Elasticsearch 等。
    5. 搭配安全管理相关的知识点,例如 Spring Security、Shiro 等。
    6. 缓存的使用,例如 JCache、Ehcache 等。
    7. 和消息中间件的搭配整合,如 ActiveMQ、RabbitMQ、Kafka 等。
    8. 数据校验/定时任务/邮件发送等。
    9. 各种监控的使用。
    10. 结合 WebSocket 的使用。
    11. Spring Cloud 中相关组件。

    上面这些只是我列出来的一些比较常见的技术点,每个技术点都还可以延伸出很多其他的东西,大家可以结合自己的情况,按照顺序一个一个来学,这里边还涉及到很多第三方的框架,例如 Redis、MongoDB、RabbitMQ 等,Spring Boot 的出现只是让这些组件在和 Spring 家族的产品整合时变得更加方便,但是并不会简化这些组件原本的用法,所以,该学 Redis、该学 MongoDB、该学 RabbitMQ 等等,还是一个不能少。以 Redis 为例,学会了 Redis,学会了 Spring 整合 Redis,再回过头来看 Spring Boot 整合 Redis,那简直太 easy 了(大家在公众号后台回复 redis,有松哥手敲的 redis 教程)。

    当然,学习 Spring Boot 最终我们还是奔着快速开发和微服务去的,所以,像 Docker、Spring Cloud 等技术,也是需要去了解一下的。

    4.怎么学

    Spring Boot 发展到今天,网上的资料和图书现在是越来越多了。在看资料学习的同时,大家也要留意以下几个点:

    1. 多看源码。不同于其他全新的框架源码你可能会看懵了,由于 Spring Boot 是基于 Spring 的,所以只要你 Spring 基础扎实,看 Spring Boot 源码可以说是毫无压力。如果看 Spring Boot 源码觉得有压力,那可能你 Spring 基础不牢靠,这个时候不妨放下 Spring Boot,去复习下 Spring。
    2. 每当学会 Spring Boot 中的一个知识点,不妨想想这个功能在 Spring 框架中要如何使用,如何配置,两边都搞懂了,互相印证,加深对一个知识点的理解。
    3. 多多关注 Spring Boot 的发展动态。不同于传统的框架可能一年更新一两次,Spring Boot 更新非常频繁,二次每次更新都会带来一些好玩的东西,可能会有新的 API 加入进来,也可能会有旧的 API 失效,变化大,因此多多关注,避免掉坑。

    最后,我这里给大家列举几个我自己经常关注的几个资源。

    4.1 官方文档

    老实说,Spring Boot 的官方文档是我接触的所有官方文档中最条理清晰浅显易懂的,大家做开发,多多少少都接触过一些第三方的开放平台,很多平台的文档真是让人忍不住想吐槽,框架都做出来了,认认真真写个文档有那么难么?

    不过 Spring Boot 的官方文档可以算是非常非常友好了。虽然是英文的,但是实际上对英文要求并不高,连读带猜,其实很容易明白它的含义,我一般对 Spring Boot 中某个知识点有疑问的时候,都是首选官方文档,当前最新版的官方文档地址是:

    • https://docs.spring.io/spring-boot/docs/2.2.4.RELEASE/reference/html

    当然,如果你嫌官方文档打开慢,松哥也帮你下载好了最新版的 pdf,公众号后台回复 springboot2.2.4 可以获取。

    4.2 Spring 官方博客

    每次 Spring 或者 Spring Boot 发新版本,松哥都会去看一下新版本有哪些好玩的东西,增加了哪些内容。我不可能把源码读一遍然后总结出来它的变化,那一般是如何获取权威的第一手信息呢?关注 Spring 官方博客即可。

    打开 Spring 官网,在顶部菜单里有一个选项就是 Blog,关于 Spring 家族产品的任何更新计划,更新结果,都会在这里通知到大家。

    在这里插入图片描述

    松哥也推荐大家多多关注这个 Blog,一方面能够及时接收到一手信息,另一方面还能提高英语,一举两得。宅在家,泡一壶茶,细细的品一品这个网站,真的蛮不错。

    Blog 地址:

    • https://spring.io/blog

    4.3 中文资料

    说到中文资料,就不得不说松哥自己的在线教程和离线 pdf 文档了。手敲了 274 页教程,囊括了 Spring Boot2 常见的各种用法,即有离线的 pdf 供大家下载,也有在线的学习网站,这就是满满的诚意,还没下载 pdf 的小伙伴不要错过。

    在这里插入图片描述

    在线教程地址:

    • http://springboot.javaboy.org

    离线 pdf 下载文档,在公众号后台回复 springboot 获取百度网盘地址。

    4.4 学习案例

    除了这些文字性的东西之外,一些在线案例也至关重要。这里给大家推荐两个仓库,这两个仓库中的所有案例都是基于 Spring Boot2 来做的。

    首先就是我公众号上文章的配套案例:

    GitHub 地址:

    • https://github.com/lenve/javaboy-code-samples

    Gitee 地址:

    • https://gitee.com/lenve/javaboy-code-samples

    这个仓库中的大部分案例都是针对 Spring Boot 的,而且有一个好处就是这些案例都有对应的讲解文章,每个案例都对应一个文章,岂不美哉。

    在这里插入图片描述

    另一个仓库就是我整理的比较完善的一个仓库,但是就没有对应的讲解文章了:

    GitHub 地址:

    • https://github.com/lenve/javaboy-video-samples

    Gitee 地址:

    • https://gitee.com/lenve/javaboy-video-samples

    5.小结

    资料贵精不贵多,关键是要动手去学。大学时候,有的同学热衷于收集各种资料,电脑硬盘塞得满满的,但是就是不学,这些资料再多也没有用。

    展开全文
  • Python,2天零基础入门

    万人学习 2021-06-30 15:41:39
    Python作为炙手可热的编程语言,其流行度依然...连Google都在大规模使用Python,你就不用担心了会没用。   本课程基于Python3版本,通过详细的讲解与实战案例,让你快速入门并能够自主地编写简单的Python程序。
  • C语言到底到什么程度,才能够进行嵌入式内核、驱动的开发? 嵌入式不仅要求学员掌握C语言的基本语法,还要对 1)计算机基本原理、系统架构 2)编译、链接原理、程序加载运行原理、嵌入式系统硬件 3)C标准、C...
  • 计算机图形OpenGL版(第三版带完整书签版).pdf

    千次下载 热门讨论 2013-06-11 11:37:40
    计算机图形是利用计算机研究图形的表示、生成、处理和显示的一门重要的计算机学科分支,它是计算机科学中最活跃的分支之一。近年来,随着计算机及互联网技术的迅速发展,计算机图形正越来越深入我们的生活,它在...
  • 本课程是《数据分析技术应用》系列进阶课程的初级入门课程,学员研修完毕后能够进行较为复杂的描述性统计分析、推断性统计分析、数据可视化分析、预测分析等常用数据分析处理,满足商务运营和科学研究所需的常规数据...
  • 本次课程介绍了ADO.NET的开发前的数据库的基础知识的储备,本次课程中 以SQL Server做为数据库产品,对数据库做了详细的讲解。内容包含了数据库介绍、CS和BS架构、常见的数据库产品、SQL Server安装和基本配置、创建...
  • 【信息奥赛一本通】题解目录

    万次阅读 多人点赞 2018-02-14 00:58:54
    【语言及算法基础篇】 第一部分:C++语言 第一章:C++语言入门 Hello,World!(信息奥赛一本通-T1001):点击这里 输出第二个整数(信息奥赛一本通... 地球人口承载力估计(信息奥赛一本通-T1005):点击...
  • 6自由度机器人运动正反解C++程序

    热门讨论 2015-07-26 21:14:10
    6自由度机器人运动正、反解C++程序,可直接运行,简单易懂!
  • 本次课程是初级课程,只要熟悉计算机的基本应用和操作,都可以完成本次课程学习。本课程深入浅出的介绍了C#语言的基本语法结构、条件选择、循环、异常处理、数组、集合、值类型和应用类型、字符串的常用方法、日期...
  • 本系列课程除了非常详细的讲解Django框架本身的知识点以外,还讲解了web开发中所需要用到的技术,完本系列课程后,您将独立做出一个具有后台管理系统,并且前端非常优美实用的网站。对于从事一份Python Web开发...
  • 从入门开始JAVA第二章JAVA语言基础

    万人学习 2017-05-10 16:20:57
    学习JAVA之路的第二章,主要讲解java开发工具eclipse以及Java的一个语言基础以及二进制的一个讲解

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,362,057
精华内容 3,344,822
关键字: