php怎么启动会话,开发独立EXE桌面应用程序?
摘要:在我认识的所有程序员里,每个人几乎都有专属于自己的常用工具和相关资源,今天给大家奉上数十个程序员硬核工具,我相信这里总有一款工具是属于你的!
程序员生产力工具大全如下:
1. Idea-Intellij IDEA (java 编程语言 开发的集成环境)
业界排名第一的java开发工具,非常非常好用,如果还在用eclipse的朋友,赶紧来体验一把,你一定会爱上她的。
2. SecureCRT (SSH终端仿真程序)
SecureCRT是一款终端仿真程序,支持SSH(SSH1和SSH2)以及Telnet和rlogin协议。SecureCRT用于连接运行包括Windows、UNIX和VMS在内的远程系统的理想工具。
3. Termius (全平台的远程终端)
termius是一款全平台的远程终端,Termius不仅涵盖了Windows、Linux、OSX,还变态得支持Android和iOS(以后在地铁、公交上都可以随时拿出手机来排查线上问题啦,还真是广大程序员的福音呢。
4. Google Chrome (谷歌浏览器)
Google Chrome是一款由Google公司开发的网页浏览器,该浏览器基于其他开源软件撰写,包括WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。
5. iTerm (为Mac OS X编写的终端仿真程序)
iTerm是一个为Mac OS X编写的,功能齐全的终端仿真程序;目标是在为用户提供OS X下最佳的命令行体验;字母i代表了本地苹果的外观和风格的程序界面,并把重点放在完整的国际支持; 它合并由两个项目, CTerminal和TerminalX ,而这两者都是基于JTerminal项目;该软件非常有实用和易用性。
6. Visual Studio Code (简称“VS Code”,编写现代Web和云应用的跨平台源代码编辑器)
重新定义和优化了代码编辑,以便生成和调试新式 Web 应用程序和云应用程序。也是著名的文本编辑器,它是轻量级的,vSCode的一大特点就是你可以通过多种方式来调整设置,而且Vim可以和VScode集成在一起,它还带有一个集成终端,可用的扩展太多,使开发人员的工作变得更加轻松。我最喜欢的一些扩展是AWS Toolkit, ESLint,Live Server, Live Share, Prettier-代码格式化程序,YAML,Live Sass编译器,Docker等。
7. VMware Fusion & VMware workstation (为计算机开发的虚拟机管理程序)
是在计算机上无缝运行 Windows 的最佳方式,可确保 Windows 应用程序在计算机上实现无缝运行可以在基于 Intel 的计算机上无缝运行 Windows、Linux 以及其他 PC等多个操作系统,进而构建、测试或演示软件。
8. Navicat Premium (数据库管理工具)
Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL、SQLite、Oracle 及 PostgreSQL 资料库,让管理不同类型的资料库更加的方便。
9. Postman (api调试工具)
简单来说,四个词,简单、实用、大方、美观!postman这款网页调试工具的windows客户端,功能强大的HTTP调试与模拟插件。使用Postman可以进行API开发、请求、调试,除了它,还可以使用lnsomnia和Insomnia Designer作为API文档。
10. RedisDesktopManager (一款可视化 redis管理工具 )
Redis Desktop Manager是一款简单快速、跨平台的Redis桌面管理工具,也被称作Redis可视化工具,Redis Desktop Manager官方版是一款开源软件,支持通过SSH Tunnel连接,支持windows、mac等多平台。
11. Dash (基于MAC的 API文档浏览器和代码片段管理器)
“开发者不可或缺的杰作。”Dash 可让您的 Mac 即时离线访问 200 多个 API 文档集。立刻搜索离线文件集200层+的API ,100+备忘单和 href="">更多 功能。您甚至可以"">生成自己的文档集 或 href="">请求 包含href="">文档集 。
12. Fiddler & Wireshark (http抓包工具)
Fiddler和Wireshark都是进行抓包的工具:所谓抓包就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。作为开发者,经常想调试一下http请求发送的数据的详情,那么可以使用这2款软件。用抓包工具wireshark的人相对来说更多一些。
13. HBuilder X (HTML5的Web开发工具)
当前最快的HTML开发工具,强大的代码助手帮你快速完成开发,最全的语法库和浏览器兼容性数据让浏览器碎片化不再头痛。作为HBuilder下一代的全新编辑器,HBuilderX被定位为ide和编辑器的完美结合,除了对某种语言的语法分析、提示、转到定义、调试,同时加强了对通用文本处理能力,界面更加清爽,拥有比上一代更加有效的快捷键体系。
14. MobaXterm (远程终端控制软件,集串口,SSH远程登录和FTP传输三合一的工具)
多功能终端MobaXterm Professional Edition 是一款豪华、全功能的终端软件。MobaXterm带来了所有必要的Unix命令到Windows桌面,在开箱单便携式exe文件。MobaXterm允许您启动远程会话。远程shell,MobaXterm远比Putty好用,您可以选择创建SSH,远程登录,Rlogin,RDP,VNC,XDMCP,FTP,SFTP或串行会话。
15. Sublime Text (跨平台代码编辑器)
http://www.sublimetext.cn/
Sublime Text 是一款用于代码、标记和散文的精致文本编辑器。Sublime Text 中文网致力于为广大国内开发者提供详尽的中文文档、使用说明等,助力开发者快速掌握这个编辑器。
16.webstorm (专业的HTML编辑工具)
web开发的必备的一款开发神器,比如写js、页面、css,那么这款软件用起来非常顺手。此软件和idea出自于同一家公司,这家公司做了很多异常好用的软件,基本上你需要的各种开发相关的IDE,这家公司都生产。可以说是“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”。新版对JavaScript,TypeScript和CSS支持更好,改进了Vue.js的体验,并为Jest集成增加了新功能。
17.Xshell (功能强大的终端模拟器)
linux原创控制软件,完全免费且非常稳定的 SSH 客户端 ,支持多种远程协议,提供了很多特色与高级功能,简体中文界面也让你轻松管理远程服务器。 Xshell 的 Screen 会话不闪屏,而且可以回滚;Script 的执行顺序可以调整;可以同时发送指令到多个 session;支持布局切换等。
18. SwitchHosts (修改Hosts文件的工具)
这是用于在多个HOSTS之间进行切换。可在公用hosts文件 、当前系统hosts、本地方案和在线方案间进行切换。作为一名开发人员,经常需要修改本地host,你还是通过修改host文件来操作的么?那样太慢了,这里建议大家使用switchhosts这款软件,可以快速修改本地host,非常好用。
其他工具:
1. CodeIf(智能命名) : https://unbug.github.io/codelf
大部分开发者都或多或少遇到过变量命名的烦恼,如果命名不规范,不仅会影响开发的效率,而且对后面维护的同学来说也是一个不小的挑战,因为他要去揣摩你这个变量的含义。随着项目越来越复杂,变量和函数数量越来越多,虽然每个编程语言都有各种命名规范,但是也不能解决所有的问题。
“计算机科学里两件最难的事:缓存失效和命名。” Codelf通过搜索在线开源平台Github, Bitbucket, Google Code, Codeplex, Sourceforge, Fedora Project的项目源码,帮开发者从中找出已有的匹配关键字的变量名,从而帮助为变量名苦恼的开发者命名。这个搜索服务支持直接搜索中文。
同时可以在自己用的编辑器里安装插件,支持 VS Code、Atom、Sublime Text 和 Chrome。
2. DocsChina-印记中文 : https://www.docschina.org
这是一个前端中文文档合集,进入网站可以看到开发中经常使用的前端中文文档。如果你的英文实在不怎么好,还在为找中文文档而烦恼,这里将是你非常好的选择。记得放到自己的浏览器收藏夹里哦!
3. any-rule(正则表达大全): http://github.com/any86/any-rule
any-rule 维护了一个常用正则表达式合集,并且本身是一个支持 Web/VS Code/idea/Alfred Workflow 多平台的正则表达式工具。
4. tool.lu(在线工具): https://tool.lu
程序员总是有很多小工具要使用,比如图片、Base64编码、Markdown编辑器时间戳转换,进制转换等,在线运行各种语言代码。这个网站包含了太多程序员需要用到的小工具了。比如你想运行点JAVA代码,又不想麻烦的在系统中安装JAVA环境,可以使用里边的在线运行代码工具,然后选择JAVA,写点JAVA代码就可以直接运行了。
5. Baomitu(前端静态源库): https://cdn.baomitu.com
这个静态资源库是支持HTTP/2的CDN服务,有了它,如果你是自己的小型项目或者是做测试就不用下载任何的代码库,直接粘贴地址过来用就可以,因为是国内的CDN库,速度还非常的快。
6. Typora-Markdown(编写工具):https://www.typora.io
一款实用的 Markdown 编写工具,所见即所得,用Markdown编写文章是一个程序员的标准配置,也就是标配。现在有很多在线工具都支持Markdown,什么有道云笔记、雀语,、印象笔记等。这种简单的界面,沉浸式的编写,清晰的大纲,它就像一件称手的兵器,让你一旦拥有就爱不释手。
7. Snipaste (简单便捷的截图软件):https://zh.snipaste.com/download.html
一款免费的桌面截图软件,功能强大,使用方便,支持任何屏幕位置截图,支持窗口截图,支持快捷方式截图。您可通过截取贴图,使两张图合并为一张图,还能调整截图文字图像等等,是一款非常强大的贴图软件,喜欢此款贴图软件的朋友不要错过。
8. Captura (最好用的开源录屏、gif动态图片制作工具)
官网:https://captura.updatestar.com/ github:https://github.com/MathewSachin/Captura
通过这款工具可以帮助你轻松录制各种视频。支持全屏录制、区域录制两种方式,全屏录制可以录制全部的电脑屏幕,将电脑屏幕上所有的动态都录制下来,该软件还拥有视频编解码器,可以对视频进行解码,支持mp4、avi、GIF、webm等格式,可以满足一般的解码需要。还支持屏幕截图、剪贴板,简单的图像编辑等功能,是一款非常好用的屏幕录像工具。
9. 向日葵 (远程控制软件): https://sunlogin.oray.com/
向日葵远程控制是一款提供远程控制服务的软件。向日葵远程控制支持主流操作系统Windows、Linux、Mac、Android、iOS跨平台协同操作,在任何可连入互联网的地点,都可以轻松访问和控制安装了向日葵远程控制客户端的设备。整个远控过程,可通过浏览器直接进行,无需再安装软件。
10. Everything (本地文件检索工具):http://www.voidtools.com/support/everything/
由voidef="">tools 开发的一款文件搜索工具,这款软件是基于名称实时定位文件和目录。Everthing功能强大,体积小巧,第一次安装使用时会建立一个索引数据库,将所有文件和文件夹的名称导入其中,后续使用能够以极快的速度快速搜索,查找到你所需要的文件。
11. StarUML (UML画图工具)
画uml图的一款神器,类图、时序图、流程图、状态图等等,都可以用这款工具轻松应对。
12. uTools (生产力工具集):https://u.tools/
一个极简、插件化、跨平台的现代化桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。这个工具,我只能说他是一款神奇,太牛逼,这款工具中汇集了很多好用的工具,可以通过这款工具秒开电脑上的各种软件。
搜索资源网站工具:
1.Bing
Bing 国际版:https://cn.bing.com/ 感觉比某度要好用多了。
2.DuckDuckGo
DuckDuckGo:https://duckduckgo.com/ 从官网的介绍来看这个搜索引擎不收集用户信息,而且没有广告。
3.Stack Overflow
Stack Overflow:https://stackoverflow.com/ 我们如果常用 Google,很多技术问题的答案就在这个网站上,如果你无法使用 Google 可以在这个网站上直接检索就好了。
4.Gitlogs
Gitlogs:https://www.gitlogs.com/ Gitlogs 是专门针对 GitHub 项目的搜索引擎,我们通过他可以快速找到想要项目。
5.jiumo search
文档搜索引擎 jiumo search 鸠摩搜书:https://www.jiumodiary.com/ 可以用来找一些技术文档手册,很多在百度网盘里。
6.Ebooke
Ebooke:https://ebookee.org/ Ebookee 是一个基于互联网并提供免费电子图书下载的搜索引擎网站。
7.Iconfinder
图标搜索:https://www.iconfinder.com/ 用来查找 logo 图片。
8.TinEye
TinEye:https://www.tineye.com 用图片来检索图片,我们可以上传图片或输入图片的 URL 来检索。
9.SemanticScholar
SemanticScholar:https://www.semanticscholar.org/ SemanticScholar 是一个免费学术搜索引擎,其检索结果来自于期刊、学术会议资料或者是学术机构的文献。
10.LibreStock
LibreStock:https://librestock.com/ LibreStock 上可以检索一些优质的高清图片。
11.CC Search
CC Search:https://ccsearch.creativecommons.org/ CC Search 上搜索到的图片资源都是无版权的,我们可以免费的使用。
12.Pexels
Pexels:https://www.pexels.com/ 高质量的图片网站,可以免费使用。
13.Unsplash
Unsplash:https://unsplash.com/ 免费高清素材网站。
14.The App Store
The App Store:https://theappstore.org/ The App Store 是一个针对苹果手机、iPad、Mac 设备的应用搜索工具。
在线画图工具:
• 在线画图工具ProcessOn:https://www.processon.com/
• 在线画图工具draw.io:https://app.diagrams.net/
• 在线思维导图工具:http://www.mindline.cn/webapp
• PlantUML在线编辑器:http://haha98k.com/
在线开发辅助工具:
日常开发经常会用到一些辅助工具我总结为8大类,包括:编解码工具、转换工具、正则工具、编译工具、网络工具、格式化工具、可视化工具、在线生成器、以及其他工具等等。 具体列表如下:
在线编码工具:
• BASE64编解码工具:https://base64.supfree.net/
• MD5编码工具:https://www.zxgj.cn/g/md5
• AES/DES加解密:http://www.fly63.com/tool/cipher/
• JWT解码工具:http://jwt.calebb.net/
• ASCII编解码工具:https://www.matools.com/code-convert-ascii
• Unicode编解码工具:https://www.zxgj.cn/g/unicode
• UTF-8编解码工具:https://www.zxgj.cn/g/utf8
• 字符串编解码工具:https://www.zxgj.cn/g/enstring
• URL编解码工具:http://tool.chinaz.com/tools/urlencode.aspx?jdfwkey=lbixz1
在线转换工具:
•在线ASCII码对照表:http://www.fly63.com/tool/ascii/
• 通用进制转换工具:https://www.zxgj.cn/g/jinzhi
• 在线浮点数十进制转换:http://www.binaryconvert.com/
• RGB颜色转换:https://www.zxgj.cn/g/yansezhi
• 时间戳转换工具:https://www.zxgj.cn/g/unix
• 计量单位换算工具:http://www.fly63.com/tool/unitable/
• 在线JSON解析:http://www.json.cn/
• 在线JS代码格式化工具:https://prettier.io/playground/
• SQL压缩/格式化工具:https://www.zxgj.cn/g/sqlformat
• JSON和XML在线转换:https://www.zxgj.cn/g/jsonxml
• JSON/YAML在线转换:http://www.fly63.com/tool/jsonyaml/
• 人民币大小写转换工具:http://www.fly63.com/tool/renmingbi/
正则表达式工具:
• 正则表达式调试工具:https://regexr.com/
• 正则表达式可视化工具:https://jex.im/regulex/
网络工具:
• IP地址归属地查询:https://www.ip138.com/
• IP地址查询:https://www.ipip.net/ip.html
• HTTP在线接口测试工具:http://www.fly63.com/php/http/
在线编译运行工具:
• C#在线编译运行:https://rextester.com/
• C/C++在线编译调试:https://www.onlinegdb.com/
• 在线编译工具套装:https://c.runoob.com/
可视化/格式化工具:
• 在线前端编辑器: https://codepen.io/
• 在线数据可视化:https://flourish.studio/
• 在线JSON解析:http://www.json.cn/
• 在线CSS代码可视化工具:https://enjoycss.com/
• XML格式化工具:https://www.zxgj.cn/g/xmlformat
• 在线JS代码格式化工具:https://prettier.io/playground/
• SQL压缩/格式化工具:https://www.zxgj.cn/g/sqlformat
• JSON和XML在线转换:https://www.zxgj.cn/g/jsonxml
• JSON/YAML在线转换:http://www.fly63.com/tool/jsonyaml/
在线生成器:
UUID在线生成器:https://www.zxgj.cn/g/uuid随机数生成器:https://www.zxgj.cn/g/suijishu其他常用工具:
在线Nginx配置工具:https://nginxconfig.io/在线对比工具:http://www.fly63.com/tool/textdiff/在线Chrome浏览器插件:https://www.crx4chrome.com/在线接口文档管理工具:http://www.docway.net/在线素材工具:
如果你写文章,或者做视频,那就一定少不了要找素材,包括各种图片、背景、emoji表情、表情包、壁纸、视频、gif图等等。
• 免费透明背景图片素材:http://pngimg.com/
• Emoji表情搜索:https://emoji.svend.cc/
• Emoji表情包下载:https://emojiisland.com/
• open source icons:https://feathericons.com/
• 表情包在线网站:https://fabiaoqing.com/
• 免费PNG图片库:https://pluspng.com/
• ICON图标在线下载:https://www.iconfinder.com/
• 极简壁纸:https://bz.zzzmh.cn/
• Wallpaper Abyss壁纸:https://wall.alphacoders.com
• Pixabay图片素材库:https://pixabay.com/zh/
• Unsplash图片素材库:https://unsplash.com
• Pexels图片素材库:http://www.pexels.com
• NASA图片视频素材库:https://images.nasa.gov
设计制作类工具:
对于那些文章创作者和视频创作者而言,设计封面,做海报,设计LOGO,图片美化等等基本也是刚需。
这样大概率日常会用到一些简易好上手的在线设计制作类工具,比如在线P图、音/视频轻量化剪辑、logo制作、海报设计制作、图片美化、在线图片转换或生成等等。
• 在线PS:https://www.uupoop.com/
• 在线音频剪辑:https://www.weixinsyt.com/
• 在线视频剪辑:https://www.kapwing.com/
• 免费logo在线制作:http://www.uugai.com/
• 艺术字体在线生成:https://www.qt86.com/
• 在线表格转换工具: https://tableconvert.com/
• 在线海报设计工具: https://www.designcap.com/
• 图片智能放大工具:https://bigjpg.com/
• 二维码美化器:https://mh.cli.im/
• 在线代码截图工具:https://carbon.now.sh/
• 在线抠图工具:https://www.remove.bg/zh
• ICO图标在线生成:http://www.fly63.com/php/ico/
• SVG转PNG工具:http://www.fly63.com/tool/svg2img/
• 视频转GIF工具:http://www.fly63.com/tool/giftxt/
• 二维码在线生成器:http://www.fly63.com/tool/ewm/
• 二维码在线解码:http://www.fly63.com/php/decoder/
写辅助工具:
写文章的过程中经常会用到和写作相关的辅助工具,比方说:字数统计工具、Markdown格式的文章排版工具、图床网站、代码截图工具等等,所以下面这些在线工具就能很好地满足我的需求。
• 在线字数统计:https://www.eteste.com/
• mdnice markdown排版工具:https://mdnice.com/
• md2all markdown排版工具:http://md.aclickall.com/
• 在线图床神器:https://picx.xpoet.cn/
• 在线免费图床:https://sm.ms/
• 图壳图床:https://imgkr.com/
• 在线代码截图工具:https://carbon.now.sh/
• 在线短链接工具:https://urlify.cn/
• 在线文本替换:http://www.fly63.com/tool/textreplace/
在线办公工具:
部分在线工具主要用来处理一些和文档以及文稿相关的事情,经常用到的比如:在线的全套pdf处理和转换工具、各种各样多媒体文件间的相互转换工具、在线识别工具、在线压缩工具等等。
• pdf在线处理工具1:https://smallpdf.com/cn/pdf-tools
• pdf在线处理工具2:https://tools.pdf24.org/zh/
• pdf转word在线工具:https://www.pdftoword.com/
• 在线多媒体转换器合集:https://cn.office-converter.com/
• 在线文字识别工具:https://ocr.wdku.net/
• 在线文件压缩工具:https://docsmall.com/
文档笔记工具:
好记性不如烂笔头,作为一个学习者,我觉得记笔记是必不可少的步骤。当然现在基本都做电子笔记和电子文档比较多。 现如今各式各样优秀的文档工具和笔记软件鳞次栉比,好用的也有很多,整理成如下列表,这东西各有长处,使用哪个最合意还得看个人习惯和需求了。
• 印象笔记:https://www.yinxiang.com/
• 有道笔记:https://note.youdao.com/
• OneNote:https://www.onenote.com/
• 幕布:https://mubu.com/
• 为知笔记:https://www.wiz.cn/
• 石墨文档:https://shimo.im/
• Simplenote:https://simplenote.com/
• 语雀:https://www.yuque.com/
编程学习网:
• 哔哩哔哩:https://www.bilibili.com/
• C语言网:https://www.dotcpp.com/
• cppreference:http://zh.cppreference.com/
• 中国大学MOOC:https://www.icourse163.org/
• 牛客网:www.nowcoder.com
• 网易公开课:open.163.com
• CodeGym:https://codegym.cc/
• BeginnersBook:https://beginnersbook.com/
• JavaSED:http://www.javased.com/
• codecademy:https://www.codecademy.com/
• Coursera:https://www.coursera.org/
• StackOverFlow:https://stackoverflow.com/
• LeetCode:https://leetcode-cn.com/
• LintCode:https://www.lintcode.com/
在线教程文档:
这部分主要集中了在做开发过程中随手参考所要用到的几乎所有在线教程和官方文档,有中文版文档的基本都优先列出来了,但更多时候是英文的官方文档。
• Git中文教程:https://git-scm.com/book/zh/v2
• SVN中文手册:http://svnbook.red-bean.com/nightly/zh/index.html
• jQuery API中文文档:https://jquery.cuishifeng.cn/
• Nginx中文文档:https://www.nginx.cn/doc/index.html
• Kafka中文文档:https://kafka.apachecn.org/
• Mybatis中文文档:https://mybatis.org/mybatis-3/zh/index.html
• 微信小程序官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/
• Nodejs中文教程文档:http://nodejs.cn/learn
• Apache Web Server文档:http://httpd.apache.org/docs/
• Spring文档中文版:https://www.springcloud.cc/spring-reference.html
• Golang标准库文档中文版:https://studygolang.com/pkgdoc
• Java 8官方文档:https://docs.oracle.com/javase/8/docs/api/index.html
• Maven官方文档:http://maven.apache.org/guides/
• Tomcat 8官方文档:http://tomcat.apache.org/tomcat-8.0-doc/index.html
• Spring Boot官方文档:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
• RabbitMQ官方文档:https://www.rabbitmq.com/documentation.html
• RocketMQ官方文档:http://rocketmq.apache.org/docs/quick-start/
• Dubbo中文文档:https://dubbo.apache.org/zh/docs/
• Netty官方文档:https://netty.io/wiki/index.html
• Elasticsearch官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
• Spring Cloud官方文档:https://spring.io/projects/spring-cloud
• Docker官方文档:https://docs.docker.com/get-started/
• kubernetes中文文档:https://kubernetes.io/zh/docs/home/
• thymeleaf官方文档:https://www.thymeleaf.org/documentation.html
• Vue.js中文文档:https://cn.vuejs.org/v2/guide/
• React.js官方文档:https://reactjs.org/docs/getting-started.html
• Jenkins中文文档:https://www.jenkins.io/zh/doc/
华为云平台:
高效易用的低代码aPaaS平台-应用魔方AppCube:https://www.huaweicloud.com/product/appcube.html集华为研发实践、前沿研发理念、先进研发工具为一体的软件开发平台-软件开发平台 DevCloud:https://www.huaweicloud.com/devcloud/以上内容分享自华为云社区《吐血整理:程序员都在用什么工具?》,作者: 考过IE励志当攻城狮 ,部分内容整理自互联网~
为什么说程序员做外包没前途?
没有正确答案,只有认知和角度上的不同。
说到技术外包,有以下4个方面需要聊:
(国外/国内)参与外包的客观环境/条件(重点分析)外包的种类(简单举例)做技术外包的个人目的,通常会遇到的问题(重点分析)总结前面,程序员参与外包(长短期)的价值(简单阐述)一、环境和条件编程起源于英美,历经70-80年发展,编程文化在逐渐沉淀,形成一种工程师文化之下的亚文化。
1 海外
40-60年代,在欧美,工程师一度曾是“书呆子”(nerd)的代名词,
(左边呆萌的Steve Wozniak一直被Jobs的“光环”遮蔽,实际上他是苹果早期产品的重要缔造者)
今天,程序员被公认为一个独立时髦的职业,‘nerd’ 被视作聪明、多金而富于冒险精神的一个群体。
(工程师也可以是Elon Musk这样的人,聪明且坏,有人甚至给Musk贴上了asshole的标签,)
更多工程师由幕后走到聚光灯下,正如Musk和Zuckerberg,这些工程师是各种创新的源动力,他们的创造精神和冒险精神植根于一流高等院校和多如牛毛的创新型企业中,这个群体遵循一致的标准和规则,如 1)客观严谨 2)开放自由 3)沟通与共享 4)创新与尊重
有了一脉相承的文化和准则,创新生态才能充满活力。
2 国内
南橘北枳的情况在国内技术圈肉眼可及。
在国内,技术圈是否有自己的技术文化?
不太确定,
如果有的话,相信更多存在于少数公司(大厂或小而美技术公司),这是有原因的——工程师和程序员文化需要一些必备的条件,见下图
F区间是一个终点区间,技术创造者在这里应得到相应的“回报”,而这取决于E区间的“资本与秩序”的情况。
C-D即文化积淀的区间,需要整个技术群体去建设维护,但如果没有A-B,C-F只能是个理想的真空地带。
生活必须:
在国内,程序员群体从各地云集到北、上、深、杭等城市,必须考虑的是攒钱购房以及娶妻生子,压力可想而知,远谈不上兴趣与理想(当然,如果房子妻子是理想,直接指向物就是“钱”);
独立思考:
回归教育,“实用型教育”虽然能够成功且系统化的长期输送人力,但“书中自有颜如玉,书中自有黄金屋”从来就不是创造创新的温床,“应试教育”的结果是,对人才的判断标准始终会是“执行力”,而个体对自我目标的判断仅存在一个“通途”问题。
那么,回归主题,在这样的大条件下,做外包有前途么?
在国外,应该是有的。
虽然硅谷(Bay Area)程序员们的压力也不小,租房奇高,近期连Dropbox这样的大公司都在撤出到德州的Austin,但基于深厚技术文化的协作、创新终究是有丰厚回报的,无论兼职于初创公司还是投身外包公司,都不是一个很坏的选择。
国内就不同了。
二、外包种类外包有几个类型:
1)个人通过中介做技术兼职(业余时间挣外块,或者彻底做斜杠青年);
2)和他人搭伙,给各类甲方做技术开发服务;
3)供职于大中小型外包企业,做开发服务或者被外派到甲方长期驻场。
三、个人目的参与技术外包,无非如下几种目的:
1)挣点闲钱/私房钱;
2)偶尔换换口味;
如果自己在ToB企业内打工,参加一些有趣的小型ToC小项目(微信小程序商城、效率小工具开发、小而美网站开发等),换换脑子,同时多涉猎一些不同类型开发实战,不是坏事;
3)友情帮忙,同时和小伙伴兼职创业试水;
看看是否有机会将某行业解决方案雏形通过不断迭代实现行业标准化(这个很难);
4)纯在外包服务公司打工,拿人钱财替人消灾;
1和2,如果搭伙的外包项目/产品团队很专业,多半是一次愉快的经历,否则就不好说了。
当然这样的外包工作,你也不是冲着“挣前途”去的,所以心态会比较放松。
可能遇到的问题是,项目主不断改开发需求,你被逼急了多半会“跑路”。
对于3,非全力投入事情通常不会有结果,除非有很好的行业资源/投资人,毕竟这几年的技术风口无论是“区块链”、“人工智能”、“大数据”、“物联网”都不是10人以内的普通小团队可以搞定的。
我想,题主指的外包可能是4,即给外包公司打工,说实话,程序员都不太愿意在外包公司做,原因有二:
首先,如果外包到甲方驻场,能学到东西还好,学不到又总996,早晚会“跑路”;
其次,如果是在纯技术外包公司做项目,因为没机会认真打磨一个产品,隔上几个月就拿到另一个功能需求表(很可能是些增删改查的cms),年复一年,技术栈老化,离退休就不远了。
四、参与外包的价值短期:
短期来看,做外包,无论是兼职还是在外包公司做,应该都是有价值的(包括金钱上),尤其是毕业1-4年,学习欲望强烈,能够接触各类项目/产品,打磨自己解决问题的能力,还是值得的。
国内,个人认识的前后端工程师,30岁前接短期兼职外包的会比较多,30岁以后有的去大厂、有的改行、有得开始做管理,接外包会比较少。
反观,在国外由于第一部分所述,更多人将工作与兴趣做了很好的平衡,持续学习,将撸码作为一种修行,时不时好“基友”在一起联手做点有意思的小产品开发,不至于因为房贷压力而改变自己的职业规划路径。
长期:
长期来看,作为程序员始终做外包,不是你自己有没有前途的问题,是老板未来有一天怎么安排你的问题。
零基础学习java?
恰好我之前写了四篇Java工程师学习指南,就用前两篇的内容来回答一下这个问题吧。我写过一个Java工程师学习指南,我把它分为了四个部分,第一步是打好Java基础,掌握Java核心技术,第二步是掌握Java Web技术栈,能够做一些项目,第三步是掌握Java方面的进阶技术,包括网络编程、并发编程、JVM等,第四步是掌握后端进阶技术,比如分布式、缓存、消息队列等技术。按照这样的一个脉络,我觉得能够掌握这里面的绝大部分内容,并且有过相应的一些实践,那么可以算是学好了Java。当然,学好Java只是一个开始,要真的干好活,做好项目,以及其他各方面的技术工作,则是在学好Java的基础去延伸和展开的。接下来就是具体的文章,建议大家按顺序阅读,有点长,收藏的时候记得点赞或者评论哈。笔芯!Java工程师学习指南入门篇最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线。所以,今天我们重新开一个新的专题,分别按照四篇文章讲述Java的学习路线(分别是入门篇,初级篇,中级篇,高级篇),笔者也打算趁此机会,回忆一下自己的Java学习历程。今天我们要讲的是,小白同学如何入门Java。先声明一点,文章内容不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。本文所述的方法不一定适合所有人,如有错误敬请谅解。01 前期准备工作开发环境搭建这一步我们往往会直接跳过,但既然是面向小白的教程,这里就提一下吧。首先你需要一台电脑,然后安装好JDK和JRE,JDK提供的是Java开发工具,也就是一些必备的jar包,JRE则是Java的运行环境组件,我们熟悉的JVM就在这里面。安装好这两个东东之后,一般还要配置一下环境变量,否则有一些目录可能无法被正确找到。IDE选择和安装IDE指的就是本地开发编辑器,没有了它,你就只能直接在记事本这类工具里敲代码了。IDE最大的好处就是整合了大量的工具和功能模块,让你非常轻松地完成开发。以前大家都用eclipse,不过eclipse已经不流行了,现在我推荐你直接用intellij idea作为你的第一个代码编辑器。如果是用过eclipse的同学,基本上也可以无痛切换。intellij idea可以直接在官网上下载,试用版30天,如果想要永久使用,网上也有一些办法滴。关于jar包jar包是什么,其实就是将一堆class格式文件打包,Java中把它称为jar包,这些jar包在编译器中能被直接识别,让开发者使用。对于新手来说,可能只需要用到JDK自带的一些API,但是如果你要引用外部jar包,可能就会遇到一些困难了。对于idea来说,导入外部jar包有两种办法,一种是手动导入jar包,一种是使用maven。后者会在Java Web相关的文章中讲起。手动导入jar包其实也不难,你需要先下载好jar包,然后在对应的项目下选择导入jar包即可,具体的方法这里就不展开说了,因为在网上都找得到。02 学习Java基础的几种方法了解基础语法学习一门语言,最开始要做的事情就是学习它的语法。我最早学习Java语法是在Runoob,这个网站可以让你对任意一门语言完成最快速的语法入门,当然,这只是相当于你浏览了一遍基础语法。想要真正掌握Java语言基础,光看基础语法还远远不够,我在大三第一次接触Java课程,听老师讲面向对象三大特征听得一头雾水,连数组的初始化方式都理不清楚,但这些内容都是我们需要掌握的。所以,为了学好Java基础,我们还需要看视频或者看书进行学习。看视频视频的话,可以到极客学院或者慕课网听Java基础课程,当然也可以看我分享的Java视频课程。大家也都知道,现在Java的培训班非常多,基本上学的东西也都大同小异,不过它们的有些课程还不错,大家有渠道的话也可以去看一看。看视频的好处是你可以更好地接收知识,同时也会耗费你更多实践,所以,有时候你也可以选择看书。看书看书的话,对于小白来说不推荐太复杂的书,比如《Java编程思想》这种书,新手千万不要看。我个人建议,你只需要先看看《Java入门到精通》这种类型的书就足够了,因为这个部分的学习只是为你后面的学习开个头,你以后可能还要回过头来重新研究这些内容。现在市面上介绍Java基础的书籍实在太多了,质量参差不齐,内容同质化严重,笔者看过的其实也不多。给大家一个建议,你只需要挑一两本书来看即可,这里推荐两本最简单的吧,《head first java》和《Java从入门到精通》。看博客这里再推荐另一种学习方式,就是看博客,博客比起书籍来说,更适合对于某个技术点的学习,你可以很容易地在网上找到这个知识点相关的原理,实现方法,以及代码范例。我的博客里没有讲解特别基础的东西,如果你看一些比较基础的文章,可以到Runoob等网站上查看。如果你有一个很明确的知识点想要学习,相信搜搜引擎会给你更好的答案。代码实践除此之外,一般的Java书籍或者视频课程都会要求你相应完成一些练习题,这部分内容你需要自己在电脑里使用IDE完成。在IDE里,你可以很好地熟悉Java语言的使用,基本代码的实现,同时可以尝试各种各样的API,并且测试一些语言特性,比如继承,封装,多态等等。另外,这也是你熟悉IDE的一个好机会,因为在公司里做开发可能要用到IDE各种各样的功能,提前熟悉好IDE绝对是有益无害的。03 Java入门必备知识点梳理在Java入门阶段,你可能需要接触到以下这部分知识,不管你是从通过哪种方式学习,这些内容都是你学习Java基础时绕不过的重点。Java基础知识这部分内容是你必须要掌握的内容,在入门阶段你需要把这些基础打扎实,以便于在学习后面的内容时可以更上一层楼。如何把基础打扎实呢,最好的办法就是在IDE上把书上或者视频上的每个例子都实现一遍,当然有的时候你也可以自己写一些有意思的例子。1 基本数据类型比如int,double,char,以及其包装类。熟悉基本数据类型的使用,了解每种类型所占的字节数,以及它们和包装类之间的相互转换。2 流程控制比如for循环,if else,while循环等等如果是学过c语言的同学,这部分可以跳过了。3 字符串类型String的使用字符串类型是Java中很重要的类型,它不是基本数据类型,但却很常用,熟悉和实践String相关的api,开始你对字符串的学习吧。4 数组数组的初始化方式有哪些,二维数组应该怎么写,把数组当成方法参数又该怎么处理?5 类和对象Java中最重要的两个概念:类和对象,它们有什么用呢,有什么区别和联系呢,请在代码中实践它们吧。Java核心技术对于这部分内容,我相信很多小白只能了解它们的基本使用方法,但是并不明白其背后的一些原理:比如为什么接口和抽象类有这些区别,多态的意义是什么,为什么要有反射。新手在学习这部分内容时,只需要知道怎么用就可以了。当然,你最好把这些特性都实现一遍,以加深印象。至于为什么有这些特性,这些特性背后的原理是什么,不是我们现在讨论的内容,这些内容我们将在初级和中级篇中讲述。因为,要了解这些原理,你得了解JVM,了解并发技术的基础,了解网络基础,甚至更多。显然,这不是你现在能做到的。1 接口和抽象类写一些接口,同时写一些实现类去实现这些接口,并且了解一下为什么我们需要接口,为什么子类需要实现接口里的方法。同理,去实现一些抽象类吧。然后,看看它和接口有什么不同。2 继承,封装和多态如何理解继承,子类和父类之间有什么联系呢。封装是一种保护代码的方式,有哪些方式可以实现封装呢。多态一般分为重载和重写,它们分别怎么使用?3 异常处理Java中的异常处理主要用于捕获和处理错误,请你写一些try catch代码块去捕获错误吧。4 集合类集合类是我们经常需要打交道的东西,List,Map,Set等等,赶快去熟悉API,然后写一些测试例子吧。5 IO输入流和输出流IO输入流和输出流可以操作文件,网络数据等内容,如何在Java代码中完成这么复杂的操作呢,其实只需要简单的几个api就可以了。6 多线程为了让系统资源最合理地分配和调度,我们需要多线程,多线程会让程序变得有趣,也会带来很多问题,使用Thread和相关API,去尝试这些有趣的事情吧。可选内容:1 反射(了解即可,不是入门必须)2 枚举类型和泛型(了解即可,不是入门必须)3 网络通信(了解基本的socket使用即可,需要网络基础)4 数据库操作(了解基本的JDBC即可,需要数据库基础)04 总结总而言之,对于一个Java小白来说,入门Java可以分为这几步:1 首先搭建好Java开发环境 2 通过Runoob等一些网站熟悉Java的基本语法 3 通过看书看视频等方式熟悉Java基础知识,通过代码实践加深理解 4 通过看书看视频等方式初步了解Java核心技术,通过代码实践加深理解。本文主要是为大家提供一个学习的思路,以及推荐一些学习方法,如果你能够按照这样的步骤去学习,并且配合上一些适合你自己的学习方法来完成学习计划,相信你可以很好地完成对Java的入门。Java工程师学习指南初级篇最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线。所以,今天我们重新开一个新的专题,分别按照四篇文章讲述Java的学习路线(分别是入门篇,初级篇,中级篇,高级篇),笔者也打算趁此机会,回忆一下自己的Java学习历程。今天我们要讲的是,小白同学如何入门Java。先声明一点,文章内容不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。本文所述的方法不一定适合所有人,如有错误敬请谅解。01 Java Web项目指南jav在上一篇文章中,我们讲到了入门Java的几个步骤,先搭建好环境,然后熟悉基本语法,接着熟悉Java的一些核心技术,并且在代码中进行实现。如果你已经完成了这部分内容的学习,应该会感觉自己对Java已经有一定了解了,可以轻松地写出一些Java代码,比如实现多线程输出数字,再如操作IO流等等。当然,这些代码通常只是一些demo,我们在实际的项目中可能并不会这么简单地使用这些技术,我们可能会同时使用集合类,多线程,以及操作数据库的API。所以,在今天的初级篇中,我们就来谈谈怎么做项目吧。Java Web项目对于大部分Java新手来说,最适合他们入门的项目就是Java Web了。因为Java天然适合做Web应用,并且生态完善,更有很多开源的工具和框架去支撑这些应用,比如Spring,Hibernate,SpringMVC等等。那么,如何开始着手做一个Java Web项目呢。个人认为最好的方式就是看视频了。因为,看书的话,很多内容比较过时,并且一般不会提供源代码。也有一些大佬喜欢推荐开源的项目(在GitHub上面的项目),但是对于小白来说,如果没有很完整的文档去指导他们,那也是毫无意义的。曾几何时,Java Web的项目还在使用JSP + Servlet进行开发,后来出现了Struts2,再后来,出现了我们现在也一直在用的SpringMVC,说实话,不论使用哪种开发框架,你都需要先花一些时间去学习相关的技术,否则你会发现,即使是看视频,你也不知道里面在讲什么。要想做好一个JavaWeb项目,你不仅需要一个好的项目课程,还需要足够的知识储备,下面就让我们来理一理这些内容把。知识储备Java基础部分的内容咱们上次说过了,这里就不再重复啦~下面我们分别来说说其他几方面的知识储备把02 前端知识推荐资源:在w3cschool学习html,css和js,支持在线测试代码。既然是做Web,就难免要涉及到前端技术,不过,现在前后端分离已经是一种趋势,所以,如果你对前端不感兴趣,也没必要花太多时间去学习。对于大部分同学来说,你最好要了解html的基本标签和格式,自己能够写一些简单页面,CSS的话,也可以稍微接触一些。相对于前面两个服务于样式的技术,我们倒是更应该去学习一下JavaScript,了解它的一些基本语法,以及ajax的使用,因为在前后端交互时,ajax是非常重要的。所以,做一个Java Web项目,你不需要花太多时间在写前端页面上,如果有源代码可以直接使用,当然,对于一些需要修改的前端页面,你得怎么去做修改它,因为有时候你需要使用JSP,JSP既包括前端代码也包括Java代码,如果你完全看不懂前端代码的话,那就很尴尬了。03 Java Web常用技术JavaWeb的技术栈其实比较庞大,所以我们不要求面面俱到,只是希望你能够熟悉一下项目中可能用到的技术。下面列举一些常见的技术,大家最好要了解一下。1 JSP和Servlet推荐资源:《JavaWeb入门到精通》,慕课网、极客学院等网站上的JavaWeb基础课程这是Java Web开发最原始的形态,现在很少直接使用了,但是后来的各种框架其实也是建立在servlet之上来做的。你们需要了解这两个技术分别是用来干什么的,最好能写一些demo来实践。对于JSP,有时候你可能还要学习jstl等标签语言,因为这些标签可以让你更方便地往JSP中插入Java代码。2 Spring和SpringMVC推荐资源:《Spring实战》,慕课网、极客学院等网站上的SpringMVC基础课程。事实上,除了上述资源之外,你也可以直接到官网上查看快速开始文档。Struts2早已被时代抛弃,Spring则是当今的霸主,你需要了解Spring如何使用,以及SpringMVC如何使用,并且学会在项目中使用它。由于SpringBoot最近很火,并且搭建方式比SpringMVC更简单,你也可以先学习SpringBoot,以便更快速地搭建起你的第一个Java Web项目。3 MySQL推荐资源:《Sql必知必会》,Runoob上的MySQL基础教程,慕课网、极客学院等网站上的视频课程一个JavaWeb应用一定要有数据啊,所以我们需要用到数据库,其实搭一个mysql数据库是非常简单的,但是对于初学者来说最麻烦的就是写sql了,所以,先学会建表,熟悉sql,对你以后做项目也是大有裨益的。4 Hibernate和Mybatis推荐资源:Runoob上的Hibernate和Mybatis基础教程,慕课网、极客学院等网站上的视频课程当你学会了使用sql去查询数据,可能还不足以让你在项目中很方便地处理数据,因为我们还需要一个步骤,就是把数据库的数据转化成Java里的对象。orm框架就是为了解决这一问题而出现的,它可以让一张表和Java类一一对应,让数据查询变得非常方便。Hibernate和Mybatis都是orm框架,只不过现在mybatis越来越火了。所以,你需要了解这一技术,因为它会广泛地运用到大部分Java Web项目中。5 Maven推荐资源:《maven实战》,易百教程里的maven教程,慕课网、极客学院等网站上的视频课程刚才咱们已经说过了Spring,orm框架,以及MySQL等方面的技术了。实际上,一个简单的Java Web项目也只需要这些东西了。但是,有一个问题,就是:一个项目里用到这么多技术,所需要的jar包也会很多,我们如何管理这些jar包呢。如果直接导入所需jar包,那当jar包更新或者需要替换时,每次都要手动操作,非常麻烦。另外,当jar包很多时,项目打包后的war格式文件也会很大,不利于传输。为了解决上述问题,maven应运而生了。maven通过pom.xml文件来指定所需的jar包,并且自带了很多构建相关的功能,比如编译,打包,运行单元测试等等,因为它本身就是一个构建工具。当然,新手可能还难以理解这些概念,你必须要知道的是,大部分Java Web项目需要用maven来管理,你需要学会maven的基本用法,最基本的用法就是:学会修改pom.xml文件。6 Tomcat推荐资源:慕课网、极客学院等网站上的视频课程。对于小白来说,Tomcat相关的技术是非常复杂的,毕竟它是一个应用服务器啊,事实上这个时候,你只需要学会如何安装Tomcat即可。毕竟,它在项目中的作用就是提供一个运行环境而已。正常来说,你只要下载解压Tomcat的压缩包即可。由于现在的IDE都支持集成Tomcat,所以一般情况下你都可以在IDE中配置好你的Tomcat路径,然后设置好你的项目路径,IDE会自动把你的工程代码部署到Tomcat服务器上。如果你使用想跳过IDE直接部署工程到Tomcat上,也可以直接编译工程并且打包得到war格式的文件(这个步骤可以使用maven来完成),然后拷贝war文件到Tomcat下的特定目录即可。上述两种部署方式的详细步骤请到搜索引擎寻找答案。7 Git和GitHub推荐资源:廖雪峰的Git教程,GitHub官网,慕课网、极客学院等网站上的视频课程。既然要做项目,为什么不把它发布在GitHub上。当你熟悉了Git指令之后,你可以很方便地发布你项目中的每一次更新,并且同步到GitHub上,这样既可以让你更好地管理项目版本,又可以让你GitHub更加活跃,为你未来的面试加分。所以,赶紧学好Git指令,然后开启你的项目之旅吧。04 其他常用组件除了上面几种必备的技术之外,有时候我们在项目中还会用到其他东西,在这里我们把它们叫做组件。这里只做简单的介绍,至于具体怎么使用,在网上都可以很容易地找到相关文章。1 日志系统当项目代码比较多的时候,容易发生错误,日志可以很好地记录代码运行时的错误,常用的日志系统有log4j,logging等等,另外你还需要了解一下slf4j。2 单元测试日志系统可以记录代码问题,单元测试则是为了避免代码出错,常用的单元测试组件主要是JUnit,建议你找个文档看一看,然后下载下来玩一下。3 JSONJSON逐渐成为前后端数据交互的标准格式,为了在项目中使用JSON的API,你也需要导入它的jar包,一般我们都会使用阿里提供的fastjson,赶快下载来玩一玩吧。当然,常用的Java Web组件还有很多,比如HTTPClient,再比如一些加密工具,一些压缩工具等等,这里就不再一一列举了。5 总结今天的内容就到这里了,与其说是初级篇,反而更像是“项目篇”呢。因为学完基础内容之后,做项目是最好的复习和实践方式了。所以这篇文章围绕着做项目来展开,也就不足为奇了。今天我们主要讲的是,做好一个JavaWeb项目,需要哪些知识储备,需要了解哪些技术,并且我也推荐一些比较精品的视频课程。后面我还会写一篇文章,专门讲一讲怎么做项目,会更加详细,更加侧重怎么去做,敬请期待吧。总结以下今天说的几个要点吧:1 Java基础知识储备 2 前端知识储备 3 了解和使用JavaWeb常用技术 4 JavaWeb常用组件介绍 5 视频课程推荐俗话说的好,磨刀不误砍柴工,相信你看了本文之后,可以更好地做好知识储备,然后开始Java Web的项目实践,希望你能够顺利地完成你的第一个项目。笔者在今年秋招中成功拿到BAT网易等大厂的研发offer,期间总结了很多经验和技巧,我把它们写成文字,做成专题,发表在公众号上,希望让更多有需要的朋友看到。关注微信公众号【Java技术江湖】后,可以在后台回复“资料”即可领取3T精品学习资源(不断更新中,不止是Java方向哦),学习资源包括基础,实战以及求职等内容。我写过一个Java工程师学习指南,我把它分为了四个部分,第一步是打好Java基础,掌握Java核心技术,第二步是掌握Java Web技术栈,能够做一些项目,第三步是掌握Java方面的进阶技术,包括网络编程、并发编程、JVM等,第四步是掌握后端进阶技术,比如分布式、缓存、消息队列等技术。按照这样的一个脉络,我觉得能够掌握这里面的绝大部分内容,并且有过相应的一些实践,那么可以算是学好了Java。当然,学好Java只是一个开始,要真的干好活,做好项目,以及其他各方面的技术工作,则是在学好Java的基础去延伸和展开的。接下来就是具体的文章,建议大家按顺序阅读,有点长,收藏的时候记得点赞或者评论哈。笔芯!Java工程师学习指南入门篇最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线。所以,今天我们重新开一个新的专题,分别按照四篇文章讲述Java的学习路线(分别是入门篇,初级篇,中级篇,高级篇),笔者也打算趁此机会,回忆一下自己的Java学习历程。今天我们要讲的是,小白同学如何入门Java。先声明一点,文章内容不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。本文所述的方法不一定适合所有人,如有错误敬请谅解。01 前期准备工作开发环境搭建这一步我们往往会直接跳过,但既然是面向小白的教程,这里就提一下吧。首先你需要一台电脑,然后安装好JDK和JRE,JDK提供的是Java开发工具,也就是一些必备的jar包,JRE则是Java的运行环境组件,我们熟悉的JVM就在这里面。安装好这两个东东之后,一般还要配置一下环境变量,否则有一些目录可能无法被正确找到。IDE选择和安装IDE指的就是本地开发编辑器,没有了它,你就只能直接在记事本这类工具里敲代码了。IDE最大的好处就是整合了大量的工具和功能模块,让你非常轻松地完成开发。以前大家都用eclipse,不过eclipse已经不流行了,现在我推荐你直接用intellij idea作为你的第一个代码编辑器。如果是用过eclipse的同学,基本上也可以无痛切换。intellij idea可以直接在官网上下载,试用版30天,如果想要永久使用,网上也有一些办法滴。关于jar包jar包是什么,其实就是将一堆class格式文件打包,Java中把它称为jar包,这些jar包在编译器中能被直接识别,让开发者使用。对于新手来说,可能只需要用到JDK自带的一些API,但是如果你要引用外部jar包,可能就会遇到一些困难了。对于idea来说,导入外部jar包有两种办法,一种是手动导入jar包,一种是使用maven。后者会在Java Web相关的文章中讲起。手动导入jar包其实也不难,你需要先下载好jar包,然后在对应的项目下选择导入jar包即可,具体的方法这里就不展开说了,因为在网上都找得到。02 学习Java基础的几种方法了解基础语法学习一门语言,最开始要做的事情就是学习它的语法。我最早学习Java语法是在Runoob,这个网站可以让你对任意一门语言完成最快速的语法入门,当然,这只是相当于你浏览了一遍基础语法。想要真正掌握Java语言基础,光看基础语法还远远不够,我在大三第一次接触Java课程,听老师讲面向对象三大特征听得一头雾水,连数组的初始化方式都理不清楚,但这些内容都是我们需要掌握的。所以,为了学好Java基础,我们还需要看视频或者看书进行学习。看视频视频的话,可以到极客学院或者慕课网听Java基础课程,当然也可以看我分享的Java视频课程。大家也都知道,现在Java的培训班非常多,基本上学的东西也都大同小异,不过它们的有些课程还不错,大家有渠道的话也可以去看一看。看视频的好处是你可以更好地接收知识,同时也会耗费你更多实践,所以,有时候你也可以选择看书。看书看书的话,对于小白来说不推荐太复杂的书,比如《Java编程思想》这种书,新手千万不要看。我个人建议,你只需要先看看《Java入门到精通》这种类型的书就足够了,因为这个部分的学习只是为你后面的学习开个头,你以后可能还要回过头来重新研究这些内容。现在市面上介绍Java基础的书籍实在太多了,质量参差不齐,内容同质化严重,笔者看过的其实也不多。给大家一个建议,你只需要挑一两本书来看即可,这里推荐两本最简单的吧,《head first java》和《Java从入门到精通》。看博客这里再推荐另一种学习方式,就是看博客,博客比起书籍来说,更适合对于某个技术点的学习,你可以很容易地在网上找到这个知识点相关的原理,实现方法,以及代码范例。我的博客里没有讲解特别基础的东西,如果你看一些比较基础的文章,可以到Runoob等网站上查看。如果你有一个很明确的知识点想要学习,相信搜搜引擎会给你更好的答案。代码实践除此之外,一般的Java书籍或者视频课程都会要求你相应完成一些练习题,这部分内容你需要自己在电脑里使用IDE完成。在IDE里,你可以很好地熟悉Java语言的使用,基本代码的实现,同时可以尝试各种各样的API,并且测试一些语言特性,比如继承,封装,多态等等。另外,这也是你熟悉IDE的一个好机会,因为在公司里做开发可能要用到IDE各种各样的功能,提前熟悉好IDE绝对是有益无害的。03 Java入门必备知识点梳理在Java入门阶段,你可能需要接触到以下这部分知识,不管你是从通过哪种方式学习,这些内容都是你学习Java基础时绕不过的重点。Java基础知识这部分内容是你必须要掌握的内容,在入门阶段你需要把这些基础打扎实,以便于在学习后面的内容时可以更上一层楼。如何把基础打扎实呢,最好的办法就是在IDE上把书上或者视频上的每个例子都实现一遍,当然有的时候你也可以自己写一些有意思的例子。1 基本数据类型比如int,double,char,以及其包装类。熟悉基本数据类型的使用,了解每种类型所占的字节数,以及它们和包装类之间的相互转换。2 流程控制比如for循环,if else,while循环等等如果是学过c语言的同学,这部分可以跳过了。3 字符串类型String的使用字符串类型是Java中很重要的类型,它不是基本数据类型,但却很常用,熟悉和实践String相关的api,开始你对字符串的学习吧。4 数组数组的初始化方式有哪些,二维数组应该怎么写,把数组当成方法参数又该怎么处理?5 类和对象Java中最重要的两个概念:类和对象,它们有什么用呢,有什么区别和联系呢,请在代码中实践它们吧。Java核心技术对于这部分内容,我相信很多小白只能了解它们的基本使用方法,但是并不明白其背后的一些原理:比如为什么接口和抽象类有这些区别,多态的意义是什么,为什么要有反射。新手在学习这部分内容时,只需要知道怎么用就可以了。当然,你最好把这些特性都实现一遍,以加深印象。至于为什么有这些特性,这些特性背后的原理是什么,不是我们现在讨论的内容,这些内容我们将在初级和中级篇中讲述。因为,要了解这些原理,你得了解JVM,了解并发技术的基础,了解网络基础,甚至更多。显然,这不是你现在能做到的。1 接口和抽象类写一些接口,同时写一些实现类去实现这些接口,并且了解一下为什么我们需要接口,为什么子类需要实现接口里的方法。同理,去实现一些抽象类吧。然后,看看它和接口有什么不同。2 继承,封装和多态如何理解继承,子类和父类之间有什么联系呢。封装是一种保护代码的方式,有哪些方式可以实现封装呢。多态一般分为重载和重写,它们分别怎么使用?3 异常处理Java中的异常处理主要用于捕获和处理错误,请你写一些try catch代码块去捕获错误吧。4 集合类集合类是我们经常需要打交道的东西,List,Map,Set等等,赶快去熟悉API,然后写一些测试例子吧。5 IO输入流和输出流IO输入流和输出流可以操作文件,网络数据等内容,如何在Java代码中完成这么复杂的操作呢,其实只需要简单的几个api就可以了。6 多线程为了让系统资源最合理地分配和调度,我们需要多线程,多线程会让程序变得有趣,也会带来很多问题,使用Thread和相关API,去尝试这些有趣的事情吧。可选内容:1 反射(了解即可,不是入门必须)2 枚举类型和泛型(了解即可,不是入门必须)3 网络通信(了解基本的socket使用即可,需要网络基础)4 数据库操作(了解基本的JDBC即可,需要数据库基础)04 总结总而言之,对于一个Java小白来说,入门Java可以分为这几步:1 首先搭建好Java开发环境 2 通过Runoob等一些网站熟悉Java的基本语法 3 通过看书看视频等方式熟悉Java基础知识,通过代码实践加深理解 4 通过看书看视频等方式初步了解Java核心技术,通过代码实践加深理解。本文主要是为大家提供一个学习的思路,以及推荐一些学习方法,如果你能够按照这样的步骤去学习,并且配合上一些适合你自己的学习方法来完成学习计划,相信你可以很好地完成对Java的入门。Java工程师学习指南初级篇最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线。所以,今天我们重新开一个新的专题,分别按照四篇文章讲述Java的学习路线(分别是入门篇,初级篇,中级篇,高级篇),笔者也打算趁此机会,回忆一下自己的Java学习历程。今天我们要讲的是,小白同学如何入门Java。先声明一点,文章内容不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。本文所述的方法不一定适合所有人,如有错误敬请谅解。01 Java Web项目指南jav在上一篇文章中,我们讲到了入门Java的几个步骤,先搭建好环境,然后熟悉基本语法,接着熟悉Java的一些核心技术,并且在代码中进行实现。如果你已经完成了这部分内容的学习,应该会感觉自己对Java已经有一定了解了,可以轻松地写出一些Java代码,比如实现多线程输出数字,再如操作IO流等等。当然,这些代码通常只是一些demo,我们在实际的项目中可能并不会这么简单地使用这些技术,我们可能会同时使用集合类,多线程,以及操作数据库的API。所以,在今天的初级篇中,我们就来谈谈怎么做项目吧。Java Web项目对于大部分Java新手来说,最适合他们入门的项目就是Java Web了。因为Java天然适合做Web应用,并且生态完善,更有很多开源的工具和框架去支撑这些应用,比如Spring,Hibernate,SpringMVC等等。那么,如何开始着手做一个Java Web项目呢。个人认为最好的方式就是看视频了。因为,看书的话,很多内容比较过时,并且一般不会提供源代码。也有一些大佬喜欢推荐开源的项目(在GitHub上面的项目),但是对于小白来说,如果没有很完整的文档去指导他们,那也是毫无意义的。曾几何时,Java Web的项目还在使用JSP + Servlet进行开发,后来出现了Struts2,再后来,出现了我们现在也一直在用的SpringMVC,说实话,不论使用哪种开发框架,你都需要先花一些时间去学习相关的技术,否则你会发现,即使是看视频,你也不知道里面在讲什么。要想做好一个JavaWeb项目,你不仅需要一个好的项目课程,还需要足够的知识储备,下面就让我们来理一理这些内容把。知识储备Java基础部分的内容咱们上次说过了,这里就不再重复啦~下面我们分别来说说其他几方面的知识储备把02 前端知识推荐资源:在w3cschool学习html,css和js,支持在线测试代码。既然是做Web,就难免要涉及到前端技术,不过,现在前后端分离已经是一种趋势,所以,如果你对前端不感兴趣,也没必要花太多时间去学习。对于大部分同学来说,你最好要了解html的基本标签和格式,自己能够写一些简单页面,CSS的话,也可以稍微接触一些。相对于前面两个服务于样式的技术,我们倒是更应该去学习一下JavaScript,了解它的一些基本语法,以及ajax的使用,因为在前后端交互时,ajax是非常重要的。所以,做一个Java Web项目,你不需要花太多时间在写前端页面上,如果有源代码可以直接使用,当然,对于一些需要修改的前端页面,你得怎么去做修改它,因为有时候你需要使用JSP,JSP既包括前端代码也包括Java代码,如果你完全看不懂前端代码的话,那就很尴尬了。03 Java Web常用技术JavaWeb的技术栈其实比较庞大,所以我们不要求面面俱到,只是希望你能够熟悉一下项目中可能用到的技术。下面列举一些常见的技术,大家最好要了解一下。1 JSP和Servlet推荐资源:《JavaWeb入门到精通》,慕课网、极客学院等网站上的JavaWeb基础课程这是Java Web开发最原始的形态,现在很少直接使用了,但是后来的各种框架其实也是建立在servlet之上来做的。你们需要了解这两个技术分别是用来干什么的,最好能写一些demo来实践。对于JSP,有时候你可能还要学习jstl等标签语言,因为这些标签可以让你更方便地往JSP中插入Java代码。2 Spring和SpringMVC推荐资源:《Spring实战》,慕课网、极客学院等网站上的SpringMVC基础课程。事实上,除了上述资源之外,你也可以直接到官网上查看快速开始文档。Struts2早已被时代抛弃,Spring则是当今的霸主,你需要了解Spring如何使用,以及SpringMVC如何使用,并且学会在项目中使用它。由于SpringBoot最近很火,并且搭建方式比SpringMVC更简单,你也可以先学习SpringBoot,以便更快速地搭建起你的第一个Java Web项目。3 MySQL推荐资源:《Sql必知必会》,Runoob上的MySQL基础教程,慕课网、极客学院等网站上的视频课程一个JavaWeb应用一定要有数据啊,所以我们需要用到数据库,其实搭一个mysql数据库是非常简单的,但是对于初学者来说最麻烦的就是写sql了,所以,先学会建表,熟悉sql,对你以后做项目也是大有裨益的。4 Hibernate和Mybatis推荐资源:Runoob上的Hibernate和Mybatis基础教程,慕课网、极客学院等网站上的视频课程当你学会了使用sql去查询数据,可能还不足以让你在项目中很方便地处理数据,因为我们还需要一个步骤,就是把数据库的数据转化成Java里的对象。orm框架就是为了解决这一问题而出现的,它可以让一张表和Java类一一对应,让数据查询变得非常方便。Hibernate和Mybatis都是orm框架,只不过现在mybatis越来越火了。所以,你需要了解这一技术,因为它会广泛地运用到大部分Java Web项目中。5 Maven推荐资源:《maven实战》,易百教程里的maven教程,慕课网、极客学院等网站上的视频课程刚才咱们已经说过了Spring,orm框架,以及MySQL等方面的技术了。实际上,一个简单的Java Web项目也只需要这些东西了。但是,有一个问题,就是:一个项目里用到这么多技术,所需要的jar包也会很多,我们如何管理这些jar包呢。如果直接导入所需jar包,那当jar包更新或者需要替换时,每次都要手动操作,非常麻烦。另外,当jar包很多时,项目打包后的war格式文件也会很大,不利于传输。为了解决上述问题,maven应运而生了。maven通过pom.xml文件来指定所需的jar包,并且自带了很多构建相关的功能,比如编译,打包,运行单元测试等等,因为它本身就是一个构建工具。当然,新手可能还难以理解这些概念,你必须要知道的是,大部分Java Web项目需要用maven来管理,你需要学会maven的基本用法,最基本的用法就是:学会修改pom.xml文件。6 Tomcat推荐资源:慕课网、极客学院等网站上的视频课程。对于小白来说,Tomcat相关的技术是非常复杂的,毕竟它是一个应用服务器啊,事实上这个时候,你只需要学会如何安装Tomcat即可。毕竟,它在项目中的作用就是提供一个运行环境而已。正常来说,你只要下载解压Tomcat的压缩包即可。由于现在的IDE都支持集成Tomcat,所以一般情况下你都可以在IDE中配置好你的Tomcat路径,然后设置好你的项目路径,IDE会自动把你的工程代码部署到Tomcat服务器上。如果你使用想跳过IDE直接部署工程到Tomcat上,也可以直接编译工程并且打包得到war格式的文件(这个步骤可以使用maven来完成),然后拷贝war文件到Tomcat下的特定目录即可。上述两种部署方式的详细步骤请到搜索引擎寻找答案。7 Git和GitHub推荐资源:廖雪峰的Git教程,GitHub官网,慕课网、极客学院等网站上的视频课程。既然要做项目,为什么不把它发布在GitHub上。当你熟悉了Git指令之后,你可以很方便地发布你项目中的每一次更新,并且同步到GitHub上,这样既可以让你更好地管理项目版本,又可以让你GitHub更加活跃,为你未来的面试加分。所以,赶紧学好Git指令,然后开启你的项目之旅吧。04 其他常用组件除了上面几种必备的技术之外,有时候我们在项目中还会用到其他东西,在这里我们把它们叫做组件。这里只做简单的介绍,至于具体怎么使用,在网上都可以很容易地找到相关文章。1 日志系统当项目代码比较多的时候,容易发生错误,日志可以很好地记录代码运行时的错误,常用的日志系统有log4j,logging等等,另外你还需要了解一下slf4j。2 单元测试日志系统可以记录代码问题,单元测试则是为了避免代码出错,常用的单元测试组件主要是JUnit,建议你找个文档看一看,然后下载下来玩一下。3 JSONJSON逐渐成为前后端数据交互的标准格式,为了在项目中使用JSON的API,你也需要导入它的jar包,一般我们都会使用阿里提供的fastjson,赶快下载来玩一玩吧。当然,常用的Java Web组件还有很多,比如HTTPClient,再比如一些加密工具,一些压缩工具等等,这里就不再一一列举了。5 总结今天的内容就到这里了,与其说是初级篇,反而更像是“项目篇”呢。因为学完基础内容之后,做项目是最好的复习和实践方式了。所以这篇文章围绕着做项目来展开,也就不足为奇了。今天我们主要讲的是,做好一个JavaWeb项目,需要哪些知识储备,需要了解哪些技术,并且我也推荐一些比较精品的视频课程。后面我还会写一篇文章,专门讲一讲怎么做项目,会更加详细,更加侧重怎么去做,敬请期待吧。总结以下今天说的几个要点吧:1 Java基础知识储备 2 前端知识储备 3 了解和使用JavaWeb常用技术 4 JavaWeb常用组件介绍 5 视频课程推荐俗话说的好,磨刀不误砍柴工,相信你看了本文之后,可以更好地做好知识储备,然后开始Java Web的项目实践,希望你能够顺利地完成你的第一个项目。Java工程师学习指南中级篇最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我写的文章都是站在Java后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线。所以,今天我们重新开一个新的专题,分别按照四个部分讲述Java的学习路线,笔者也打算趁此机会,回忆一下自己的Java学习历程。今天我们要讲的是第三部分,Java工程师学习指南(中级篇)。先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。当然,本文提到的大部分内容都能在我的博客中找到对应的一些文章。所以也欢迎大家去我博客找到你们需要的资源。本文中的方法不一定适合所有人,如有错误还请谅解。上期回顾在上一篇文章中,我们主要讨论的是如何做一个Java Web项目,以及前期需要哪些方面的基础。最后,我还推荐了几个比较不错的视频课程,以便给大家参考。当然,跟着视频课程做完一个项目,你只是照葫芦画瓢又练习了一遍,可能其中有很多东西你并不太理解,比如你可能不知道为什么代码要分层,为什么要用maven进行线上编译,为什么Tomcat启动时会输出那么多的日志。有疑问很正常,因为一个Java Web项目涉及的技术还是很多的,如果要理解这些技术的原理,光靠一个项目课程是远远不够的。所以,在你体验了Java Web项目的开发流程以后,你应该花些时间去了解相关技术原理了,今天我们要讲的也是这部分内容。对于即将参加校招的同学来说,最重要的也是这部分内容,你需要了解JVM虚拟机原理,Java并发原理,并且熟悉JDK的部分源码,了解这些API的底层实现。除此之外,还有很多,下面我们分别来谈一谈。PS:文中多次提到我的博客,是因为我的博客里整理了多个技术专栏,基本上包含了下面所说的内容。关注公众号后,在公众号后台回复“练级”即可获得我的技术博客地址,以及其他相关的资源。01 计算机基础知识计算机基础课程(非科班)如果你不是计算机专业的同学,那你可能要注意一下了。在学习下面这些内容之前,你最好要学习一下计算机基础课程。这里我们说的计算机课程是:数据结构,操作系统,计算机网络。数据结构:这门课应该算是三门课程比较简单的一门了,推荐《数据结构与算法(Java语言描述)》,看书结合代码实践,把基本的数据结构算法写一写就可以了。操作系统:关于操作系统我看了很多本书,但是没有感觉特别好的,所以如果有时间的话可以先看另外一本书《深入理解计算机系统》,这本书讲了很多计算机的基本概念,不局限于操作系统。然后可以看一看汤小丹写的《操作系统》,或者你们学校的教材。计算机网络:网络方面的书也非常多,推荐看一下《计算机网络:自顶向下方法》,另外还有一本《TCP/IP 详解:卷一》也是备受推崇的书。除此之外,我还要推荐一下刘欣老师的书《码农翻身》,书中用一些有趣的故事来讲解操作系统和计算网络的一些复杂概念,有助于大家理解这部分内容。02 JVM虚拟机JVM虚拟机为什么把JVM放在第一位,因为它是最基础也最重要的一块内容。所有的Java代码都运行在JVM上,事实上,JVM在操作系统中只是一个进程。为了了解Java代码的运行方式,底层引擎的执行原理,以及内存的分配情况,我们必须要学习JVM虚拟机。推荐资源:《深入理解JVM虚拟机》很高兴地告诉你们,学习JVM你只需要把这本书吃透即可,当然,看一遍可不够,笔者前后至少看了三遍,有条件的话最好把书中的实例都跑一跑。另外,JVM也是面试必考的内容,所以,相应地去准备一些面试题也是很有必要的,如果你基本掌握了这本书的内容,相信你不会惧怕任何JVM面试题。03 设计模式与源码阅读设计模式为什么在这里提到设计模式呢,因为设计模式是Java编程规范的经典总结,并且在JDK源码中经常使用,由于我们后面会讲到JDK源码方面的学习,所以对于设计模式,建议大家先学习一下,最好的学习方式就是看书结合实践,把一些常用的设计模式自己实现一下。推荐资源:《head first 设计模式》JDK源码(主要指集合类源码)接下来下场的选手是:JDK源码。不过对于大部分人来说,只要能够掌握集合类,字符串这些源码就可以了,其他部分的源码主要集中在JUC并发包里,而这些内容我们会放在Java并发技术里来讲。为什么我们需要掌握集合类源码呢,其一是因为面试喜欢考,其二是因为集合类的源码实现都比较经典,难度也不算太大,并且运用了很多优化方法,所以了解它对于学习Java的同学来说大有裨益。推荐资源市面上并没有哪本书专门来讲JDK源码的,所以这部分内容的学习资源主要是两个部分,一是JDK源码本身,而是一些技术博客。1 对于JDK源码,直接看可能比较有难度,不推荐新手这么做。 2 讲解源码的文章质量参差不齐,所以我只推荐几个我自己比较熟悉的,一个是importnew。一个是我的博客。另外,我之前分享的一篇文章《你不可错过的Java学习资源》中也推荐了很多大牛和博客,大家也可以去看看。Spring源码说实话,Spring源码的复杂度远高于集合类的源码,这也是因为Spring运用了很多的设计模式,并且有着非常繁杂的类关系。所以,我不建议大家直接去读Spring源码,因为即使是看Spring源码解析的书籍,你也会感到很吃力。所以,我推荐的方式是,看书+看一些比较好的源码解析文章。另外要告诉大家的是,Spring的源码很多,并不是所有内容都需要你掌握的,大家都知道Spring最常用的特性就是IOC和AOP,所以看源码解析时,最重要的也是这两个部分了。另外,看完Spring的源码解析以后,别忘了看SpringMVC的源码解析,学习方法也是一样的,找重点内容看即可。推荐资源:《Spring源码深度》,我的博客专栏04 Java并发技术Java并发技术相信你为了搞定集合类源码和Spring源码花了不少功夫了,接下来轮到Java并发技术出场了。我们在入门篇其实已经谈到了多线程,但是也仅仅停留在使用Thread或者Runnable实现简单的多线程demo。实际上,为了理解Java并发技术的底层实现,我们还需要知道JMM模型,了解synchronized和volatile的底层实现,同时还要明白Java中的多线程和操作系统的多线程和什么联系和区别。除此之外,我们经常谈到的线程安全,有哪些实现方法,也是这部分内容的要点。学习并发技术,我建议分为三个步骤1 首先熟悉Java的多线程基础知识,比如Thread的使用,线程的状态转换,以及一些api的使用方式。 2 了解一些理论基础,比如JMM,操作系统的多线程实现。这部分内容推荐通过看书和看博客来学习。 3 了解并使用JUC的一些API,然后开始看JUC的一些源代码。这个阶段是最重要也是最困难的。推荐资源: 书籍:《Java并发编程艺术》,《Java并发编程实战》 网站:我的博客专栏,并发编程网,importnew,《你不可错过的Java学习资源》05 Java网络编程Java网络编程在搞懂Java并发编程技术之后,相信这部分内容也难不倒你。当然,前提是你对计算机网络有一定了解,因为网络编程涉及到TCP和HTTP相关的知识点。在学习这部分内容的时候,你首先要了解socket的使用以及原理,然后再去了解NIO的相关API,多写一些客户端和服务端通讯的demo,以便熟悉这些内容。为了更好地理解网络编程,你还要去了解UNIX网络编程模型。除此之外,如果你想要更好地理解Java网络编程,你还需要去了解Tomcat的实现原理。同时,Netty也是值得你去学习的一部分内容,最好有机会去用一用这一网络编程框架,学有余力的同学还可以考虑看看它的源码(笔者没有看)。推荐资源:我的技术博客,《Java网络编程》,《你不可错过的Java学习资源》05 Java8Java的版本一直在更新,但目前在用的主要还是Java8和Java7,等再过几年可能这部分的内容就过时了。但是目前看来,对Java8的学习和了解还是很重要的,毕竟面试也喜欢考。对这部分内容学习的最好方式就是:看文章+代码实践推荐资源:《Java8实战》06 总结今天的内容貌似有点多,大家会不会感觉有点吃不消呢。没关系,因为这部分内容确实需要花很多时间去学习。对于一个在校的Java学习者来说,可能没有机会接触到多么高大上的项目,所以对内功的修炼显得格外重要。看书,写demo,读源码,看似简单的事情实际上需要花费大量时间和精力,这个过程是需要你静下心来,慢慢沉淀的,在学习的过程中你也可以和笔者一样,写一些总结和博客,以便更好地回顾自己的学习历程。总结以下今天所讲的内容吧:1 计算机基础课程:数据结构,网络和操作系统 2 JVM基本原理 3 设计模式,JDK源码,Spring源码 4 Java并发技术,JUC源码 5 Java网络编程 6 Java8如果你对上述内容仍有疑问或者有一些建议,也可以和我交流。 关注公众号后在后台回复“少侠”可以获得我的联系方式。欢迎来撩。Java工程师学习指南完结篇先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。因为笔者还只是一名在校生,所以写的内容主要还是针对Java初学者或者接触Java后端不久的朋友,不适用于已经工作多年的Java大佬们。所以本文中的方法不一定适合所有人,如有错误还请谅解。本期的内容是系列文章的最后一部分内容了。这个系列可能还有很多东西没有说清楚,也有很多内容被忽略了。但是这些内容也确实是笔者结合自己经验总结而成的,希望能对大家有用 ~ 当然如果有什么建议也可以随时和笔者交流。上期回顾上期我们重点介绍了Java工程师进阶所需要掌握的一些技术内容。特别对于即将参加校招的同学来说,最重要的也是这部分内容,你需要了解JVM虚拟机原理,Java并发原理,并且熟悉JDK的部分源码,了解这些API的底层实现。之所以把这部分放在Java Web项目之后来讲,是因为我觉得,一开始做项目的时候你不可能已经掌握好上述内容了,所以你完全可以带着问题去做项目,再花时间去学习底层原理,这样你可以很好地结合你之前实践过的代码去理解那些底层技术了。本期主题本期主要介绍的是Java后端技术比较“高端”的一些内容,也就是我们经常聊的分布式,架构,缓存,消息队列等内容,另外我们也会介绍一些大后端相关的技术,比如云计算(OpenStack和docker),大数据(hadoop生态),以及一些常用的后端技术。这些内容其实离我们并不远,只不过在平时的项目中可能用的比较少,所以作为学生党一般也只能通过一些文章或者书本去学习理论知识。那么基于这么一个情况,我们来谈谈怎么学习这部分的内容吧。01 Web后端架构Web后端架构后端进阶第一步,先把Web架构相关的技术学好吧,因为之前大家都做过Java Web项目,想必对这块内容还是比较熟悉的吧。我们需要了解Web架构演化的历史,了解为什么要做服务器集群,为什么要用缓存,为什么要做拆分,做主从,以及为什么要有分布式。推荐资源:《深入分析Java Web技术内幕》,《大型网站技术架构》两本都是阿里大佬出的书,两位都是淘宝系的技术大牛。前一本书主要讲述的Java Web的一些技术基础,关于Web架构的内容比较少。后一本则是李智慧大佬写的架构科普书籍,用非常简单易懂的语言写出了大型Web项目架构之美,分别着眼于高可用,高性能,高扩展等方面讲解了很多设计结构的原则和方法。这本书应该是Web架构小白最好的入门书籍了。02 分布式理论基础由于下面的内容或多或少都会涉及到分布式相关的知识,所以这一部分我们主要介绍一下有关分布式的基础知识。笔者对分布式的学习主要也停留在理论上,所以这里讲的也是一些理论的东西。推荐资源:《从Paxos到zookeeper分布式一致性原理与实践》,我的技术博客专栏“分布式系统理论与实践”这本书比较好地科普了分布式基础知识,也介绍了zookeeper的原理和使用。了解zookeeper是了解分布式技术很重要的一个环节。1 CAP 和 BASE谈分布式就要谈CAP,一致性,高可用,网络分区容忍性为何只能三选二,为什么网络分区容忍性必须要被考虑。CAP在实际应用中真的可靠么?BASE出现的原因,为什么BASE更容易实现,更适合实际应用,BASE可以通过哪些技术去实现呢?2 一致性协议和算法一致性协议也是分布式理论的一个重点,2PC,3PC,分别指的是什么,其中分别有什么问题。3PC解决了2PC的一个问题,却仍然不完美。Paxos和Raft两种一致性算法,显然前者比后者复杂得多,但是Raft可能更加实用。为什么我们需要一致性算法,它们又有什么用呢。3 分布式事务和最终一致性分布式事务是一个复杂的概念,主要指分布式系统中需要强一致场景时所用到的事务。理解和实现它都不是简单的事情。如果我们退而求其次,不要求强一致性,而选择最终一致性,则可以用更加灵活的方案,比如事务消息。03 常见分布式技术推荐资源:《从Paxos到zookeeper分布式一致性原理与实践》,我的技术博客专栏“分布式系统理论与实践”,《深入理解Spring Cloud与微服务构建》,《分布式服务框架原理与实践》。1 zookeeper上文说到zookeeper是分布式技术很重要的一块内容,这是因为zookeeper用于管理和协调分布式组件,虽然它出自hadoop生态,却用于很多应用当中,基本上有分布式的地方就有zk的存在。简单说来,zk可以提供全局统一的节点树结构,通过节点来管理资源,同时zk自身是使用集群方式部署的,所以保证自己是高可用的。根据这一特点,它可以作为服务注册中心,还可以实现分布式锁等功能。2 分布式服务分布式服务是一个挺有意思的东西,也很常用,简单来说,就是把服务组件部署在不同节点上,通过rpc的方式访问,为了实现这一功能,我们需要考虑通信协议,序列化方式,进一步来说,我们还要了解如何做服务注册和发现,以及如何做限流,做服务熔断和降级,等等等等。常见的分布式服务框架有dubbo,以及Spring Cloud这类产品,学会使用他们,然后了解它们的底层实现原理,相信会是一个很有趣的过程。3 负载均衡关于负载均衡,说起来其实很简单,就是把一组请求分成多组,按照某种规则分发到多台服务器上。但是负载均衡也涉及很多内容,包括负载均衡的算法,负载均衡的实现方式,我们需要了解它到底是在哪一层实现的。一般来说,常用的负载均衡方式有nginx和lvs两种,分别是7层和4层的负载均衡,一个基于域名进行负载均衡,一个基于端口号做负载均衡。了解它们的实现原理,会让你更好地理解这部分内容。4 分布式session和分布式锁这两个组件也是分布式项目中经常要用到的,了解它们的使用和实现原理,有助于以后在项目中的实践。分布式session一般有多种实现方式,可以存数据库或者缓存,也可以单独部署成一个服务,总之最重要的一点就是,性能要好,并且要高可用。分布式锁则用于一些需要一致性的场景中,比如订单生成这种全局唯一的功能,分布式锁通常可以用缓存或者数据库来实现,但为了保证高性能,并且避免死锁,我们一般采用Redis或者zookeeper来实现。04 缓存讲到缓存,我们说的最多的就是Redis,所以我们要讲的也是Redis。学习Redis,除了学会使用简单的api之外,最好还要了解它的实现原理。推荐资源:我的技术博客专栏“重新学习MySQL和Redis”,《Redis设计与实现》这里我们主要介绍三部分内容,也是我个人认为比较重要的三块内容。1 数据结构和底层实现Redis的数据结构比较丰富,但更有意思的是这些数据结构背后的底层实现,也就是作者如何用c语言来实现这些结构的。其中会有你熟悉的数组,链表,还有一些有意思的结构比如跳表,哈希表。2 持久化方式持久化方式主要分两种,aof和rdb,前者基于追加日志的方式来实现日志持久化,后者则是使用备份数据的方式来实现持久化。3 分布式方案这是Redis最有趣也最复杂的部分。 首先,Redis可以使用主从的方式部署,其中“哨兵”这一组件用于故障切换。基于哨兵的主从部署后来发展为Redis cluster的部署方式,也就是Redis集群,通过分片的方式来部署Redis集群,并且集群中任一节点都可以用来对外提供服务。当然,除了Redis集群之外,还有codis的分布式方案,codis基于代理的方式来实现,表面上还是使用原来的Redis API,但实际上访问的却是一个Redis集群。05 消息队列消息队列的作用一般来说就是削峰,控流,解耦合,目前业界也有很多的消息队列产品,在很多公司都会使用,当然,它们各有各的优缺点,我们也不必全都了解,这里我们大概介绍3种消息队列,它们各自的特点都比较鲜明,值得大家去了解一番。1 RabbitMQ笔者刚开始接触的消息队列是rabbitmq,它的使用方法比较简单。 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现,主要有以下特点:安装部署简单,上手门槛低,功能丰富,符合AMQP标准;企业级消息队列,经过大量实践考验的高可靠;集群易扩展,可以轻松的增减集群节点;有强大的WEB管理页面。2 Kafka与其他MQ相比较,Kafka有一些优缺点,主要如下优点:可扩展。Kafka集群可以透明的扩展,增加新的服务器进集群。高性能。Kafka性能远超过传统的ActiveMQ、RabbitMQ等,Kafka支持Batch操作。容错性。Kafka每个Partition数据会复制到几台服务器,当某个Broker失效时,Zookeeper将通知生产者和消费者从而使用其他的Broker。缺点:重复消息。Kafka保证每条消息至少送达一次,虽然几率很小,但一条消息可能被送达多次。消息乱序。Kafka某一个固定的Partition内部的消息是保证有序的,如果一个Topic有多个Partition,partition之间的消息送达不保证有序。复杂性。Kafka需要Zookeeper的支持,Topic一般需要人工创建,部署和维护比一般MQ成本更高。RocketMQRocketMQ是一个纯java、分布式、队列模型的开源消息中间件,前身是Metaq,当 Metaq 3.0发布时,产品名称改为 RocketMQ。具有以下特点:1、能够保证严格的消息顺序2、提供丰富的消息拉取模式3、高效的订阅者水平扩展能力4、实时的消息订阅机制5、亿级消息堆积能力除此之外,它还有一个优点,就是支持事务消息,让分布式事务的实现变得简单05 分布式数据库这里说的分布式”数据库“,其实指的是数据库的分布式方案,更具体来说,主要指的是数据库的主从部署,以及分库,分表。1 主从复制和读写分离这是数据库高可用的基础。MySQL数据库会使用日志来完成主从复制,先写主库,然后再同步到从库。读写分离则一般是指的是:从库负责读,主库负责写。2 分库分表方案分库分表是解决大表性能瓶颈的一种方法,当然也分为横向拆分和纵向拆分,横向拆分指的就是减少单表的数据量,放到其他表或者其他库中。纵向拆分则一般指按照业务来拆分,把不必要的字段放到其他表中。分库分表可以在应用层做,通过对id或者其他字段进行hash以便映射到对应的表中。当然也可以通过数据库中间件来完成,例如mycat这种中间件,通过代理的方式实现分库分表,非常方便。06 大后端相关技术这部分的内容笔者也只是略知一二,所以这里只是抛砖引玉,做一个简单的科普罢了。毕竟咱们学技术的人都是先讲深度再来谈广度。当你对之前的内容掌握得比较好的时候,再去看看大后端的一些其他技术,也会感觉挺有意思的。下面这些技术主要是我自己学习路上接触过的一些内容,所以比较熟悉,才拿出来分享,至于适不适合大家的口味,可能就见仁见智了。Hadoop生态笔者之前参与过数据仓库相关的项目,所以稍微了解了这方面的内容,感觉hadoop生态还是挺有意思的。大家不妨去了解一下其中的基本组件,然后打一个集群自己玩玩看。 常见的组件有:hdfs,hbase,hive,zookeeper,flume,sqoop,yarn。推荐资源:我的技术博客-个人分类-hadoop,《大数据技术原理与应用》对于入门hadoop生态来说,这本书完全足够了,如果你要做大数据平台开发或者是数据研发工程师,可能需要非常全面地了解这些组件的底层原理。云计算初探笔者之前参与过私有云相关的项目,所以稍微了解了这方面的内容,感觉这方面的内容也蛮有趣的。我在项目中主要接触到的是OpenStack,docker以及kubenetes,OpenStack是一个私有云生态,内部结构对于我们来说还是比较复杂的,不过最根本的虚拟化技术还是基于kvm虚拟化来实现的。docker则是现在非常流行的一种容器,用于快速部署应用。kubenetes也借着docker的东风火了起来,可以理解为是基于容器的分布式调度系统。这些技术在企业中也是比较常用的,只不过对于研发同学来说,更多时候扮演的是工具的角色。推荐资源:《Docker技术入门与实战》,《kubenetes权威指南》其他常见后端技术除此之外,想必大家还了解过很多其他的技术,只不过不同的业务用到的组件往往不一样,所以并不是每个东西你都需要去了解。比如搜索引擎技术Lucene,基于它的两款产品solr和elasticsearch,通常出现在需要搜索功能的项目中。再比如流式计算技术,如storm和spark streaming等等,通常都用于大数据部门,用作实时数据采集。又如ELK实现的分布式日志系统,多用于分析和定位系统问题,经常会出现在一些比较重要的应用当中。当然,也有现在大火的人工智能,还有太多的技术我们没机会去了解和使用,我们能做的也就是在自己能力范围内把需要做的东西做到最好了。所以,这些内容并不是每一样你都需要知道,但是如果有时间去了解一下的话,还是建议多了解一点的。07 总结总结今天码的字有点多,所以难免有些写的不太好的地方,希望大家见谅。纵观全文,我们主要讲了这些内容:1 Web架构 2 分布式基础理论 3 常见分布式技术 4 缓存 5 消息队列 6 数据的分布式方案 7 大后端相关技术至此本系列文章就已经结束了,不知道大家有什么问题或者建议想和笔者交流吗~赶紧加我的微信来聊聊吧。写本系列文章也是因为有很多朋友想要了解更加清晰的Java后端学习路线,所以我总结了之前自己的学习历程,才创作出这四篇文章,希望能够对大家有所帮助~
有哪些游戏不会玩物丧志反而会学到东西?
题主问题:有哪些游戏不会玩物丧志反而会学到东西?
自古以来任何会导致偏离社会共识的娱乐都会被冠以玩物丧志之名,比如电视、桌球、小说,游戏等都背过这个锅,而且任何娱乐创造出来的那一刻起就是为了让人沉迷而存在的,而意志力较弱的人更容易沉迷其中,所谓的玩物丧志是需要具体问题具体分析的。这次向大家推荐三款游戏,不仅不会玩物丧志,还能在其中学到知识,希望大家喜欢。
第一款游戏:Scribblenauts RemixScribblenauts Remix的中文名字叫做涂鸦冒险家,游戏的主题就是会把你写下来的单词转化为对应的物体,且除了最开始的初始关卡是固定的之外,余下全靠脑洞。这就对玩家的英语词汇量提出了很高的要求,大量的形容修饰词就是你过关的关键,游戏玩法开放,你可以对着场景用英语单词做到几乎任何事情。也正是因为这样,在玩游戏的时候,一本英语词典自然就成为必不可少的辅助道具了,一边玩游戏一边学英语,绝对不算玩物丧志吧。
游戏截图:
下面是部分玩家的评论,大家也可以参考一下。
第二款游戏:Lightbot : Code HourLightbot : Code Hour,中文名称 电灯机器人:编码时光。在现在这个信息时代,对于电脑网络的技术要求越来越高,所以基本上就有很多的人都会学习一些电脑的编程技术。但是对于很多的人来说,在生活当中并没有专门的时间去学习这一项技能。这个游戏就是一个最好的选择,他能够通过现象的时间来帮助你更好地去理解,编程学习简单的编程技巧。即使是从来都没有学过编程,通过简单的了解之后都能够上手玩这个游戏,并且在后期会越来越难学到的,也越来越多。
游戏截图:
当然也看看一些朋友的评价:
第三款游戏:Crazy Machines 3:疯狂机器3Crazy Machines 3,中文名称:疯狂机器3是一款创作型游戏,游戏中你可以制作你喜欢的任何机器,通过摆弄芯片,你可以钻研更深的细节,并制造具有个别属性的物体,一切皆有可能。让你再次陷入对物理解谜的迷恋。解决令人震惊的难题、制造你自己的机器、并把你的大作在互联网上和大家分享。
游戏截图:
结束语以上三款游戏就是我个人像大家推荐的游戏,玩游戏并不一定都是玩物丧志,像以上三款游戏,就需要多动脑经,能让人在其中学到很多的东西,还有很多的游戏,在玩的过程当中,不仅能够学到知识,还能够开发大脑,有着非常好的作用。这三款游戏我认为非常好,能够帮助我们开发自己大脑。所以推荐给大家。希望大家喜欢。
我是小小,希望我的信息对大家有帮助,码字不易,点个关注,点个赞。谢谢。(备注:以上游戏都可以轻松在网络找到,这里我就不放下载地址了。)
还有什么好看的耽美甜文吗?
谢邀,推荐几本小说,望喜欢!
《帝王攻略》作者:语笑阑珊文案
出身皇家,楚渊每一步棋都走得心惊,生怕会一着不慎,落得满盘皆输。
十八岁登基,不出半年云南便闹起内乱,朝中一干老臣心思虽不尽相同,却都在等着看新帝要如何收场。
岂料这头还没来得及出响动,千里之外,西南王段白月早已亲自率部大杀四方,不出半年便平了乱。
宫内月影稀疏,楚渊亲手落下火漆印,将密函八百里加急送往云南——这次又想要朕用何交换?
笔锋力透纸背,几乎能看出在写下这行字时,年轻的帝王是如何愤怒。
段白月慢条斯理摊开纸,只端端正正回了一个字。
你
《桃花债》作者:大风刮过文案
宋珧元君本是天庭里的一个散仙,过着逍遥自在的神仙生活。
谁知玉帝却降下旨意,因为两位星君私通被打入轮回历劫,要他下凡去当那「棒打鸳鸯」的那根大棒子。
还以为并非什么太艰难的任务,谁知反派还不是这么好当的,命格星君给的剧本太过简略,他还得自己琢磨好邪恶第三者的台词,并且强迫自己适时露出不怎么道地的禄山之爪......
怎么看,该上诛仙台的都是他宋珧元君啊!
《重生之巨星不落》作者:缘何故文案
为演艺奉献青春,最终只是个万年配角
为爱情付出一切,到头来却一无所得
干脆一切归零,从头来过 这一次,又能得到什么
万年配角重生成影帝的不成器弟弟,为了自己钟爱的演艺事业努力打拼的故事。
此文兄弟年上,暴躁攻、温柔受,治愈系甜文
内容标签:强强 重生 娱乐圈 灵魂转换
《君为下》作者:绿野千鹤文案
楼璟是被父亲打个半死,硬抬进了东宫的。
做太子妃,就是夺了他的爵位,折了他的前程,楼璟能做的,便只有……帮着太子,守好这万里河山……
帝曰:皇后,你到底知不知道什么是夫为妻纲?
楼璟抱起穿着龙袍的人,笑道:知道,知道,就是臣绝不让皇上累着。
《将门男妻》作者:修七文案
从前有一个少年,
有一天,
他嫁了一个将军。
凶残暴力娇花VSXXXX将军
背景架空无逻辑
《含桃》作者:绿野千鹤文案
仲夏之月,天子以含桃先荐寝庙——《礼记·月令》
辰子戚的理想,是当个开养鸡场的大侠,将来出门仗剑走天涯,回家烧鸡诗酒茶!大侠当不成也就罢了,皇帝老爹还要拿他祭祀神明!不过这个神明,好像哪里不太对?
神明:啾?
酷炫**幼鸟攻X睚眦必报小心眼大忽悠受
《魔道祖师 》作者:墨香铜臭文案
高贵冷艳闷骚攻x邪魅狂狷风骚受
前世的魏无羡万人唾骂,声名狼藉。被护持一生的师弟带人端了老巢,纵横一世,死无全尸。
曾掀起腥风血雨的一代魔道祖师,重生成了一个……**。***是个人人喊打的断袖**!
我见诸君多有病,料诸君见我应如是。
但修鬼道不修仙,任你千军万马,十方恶霸,九州奇侠,高岭之花,但凡化为一抔黄土,统统收归旗下,为我所用,供我驱策!
《吃饭睡觉打僵尸》 作者:打僵尸文案
呆萌心机受x高冷武力值爆表攻
这就是一个肉食性奸诈小人带着自己的奸夫、宠物、植物在末世找肉,顺便发挥一下热量,开开心心打僵尸的文文。
在末世找肉是艰难&危险的,八过找肉的过程可以是欢乐和JQ遍布的。
冰山妖孽天然呆,豌豆辣椒食人花,一个不少多多益善~
来坐上末世的末班车,体验一场惊喜与惊吓共存、正直与伪善皆有的旅程吧!
喜欢的话,可加个关注!
萌腐喵推书主推言情、耽美哦