一位资深程序员大牛给予Java初学者的学习路线建议 【任何时期都可以好好看看】
https://www.imooc.com/article/8993
https://www.jianshu.com/p/4f1c7badd6a9 【java书籍】
Java编程语言(第三版)---Java四大名著----James Gosling(Java之父)
Java编程思想(第4版)----Java四大名著----------------Bruce Eckel
JAVA 2核心技术 卷I:基础知识(原书第8版)---Java四大名著-----Cay Horstmann
JAVA 2核心技术 卷II:高级特性(原书第8版)----Java四大名著-----Cay Horstmann
Effective Java中文版------Java四大名著--------Joshua Bloch
<深入理解java虚拟机> <java并发编程实践> <重构、改善既有代码的设计> <设计模式(大话设计模式)>
https://www.cnblogs.com/WangBoBlog/p/7622753.html
==============================================================================
一、项目过程中遇到的一些问题记录
0,新装的Java环境,遇到连不上dubbo 的时候(可以先ping一下dubbo服务的地址,此时应该ping不通),需要特别注意一个地方:VPN的配置文件,默认的VPN配置文件中没有到dubbo服务的路由,需要在配置文件中添加一个路由: route 100.100.0.0 255.255.0.0 vpn_gateway。然后再ping一下dubbo服务的地址,此时应该可以ping通了。
0, 有时候遇到一些很奇怪的问题,可能原因是代码没生效。这时候尝试 clean 代码,并且在 run 和 debug 之间多切换切换。
1,版本号依赖 pom.xml,dubbo-provider.xml(提供服务的项目中要暴露服务接口),dobbo-consumer(webapp中要声明应用到的服务接口), Impl类文件上面的注解@Service("markingTaskService"); maven clean重启
2,有时候会遇到无法启动,端口号被占用。解决方法如下:
- 运行jps命令找到正在运行的服务和webapp的进程id,如下图,其中两个App分别是服务的进程ID, BootStrap对应的ID是webapp的进程ID.
使用 taskkill /F /pid 12776 命令终结此进程, /f表示强制结束。
3, 前端angular端口有时候也报被占用, 可以使用 netstat -aon | findstr "4200" 命令查找占用4200端口的进程ID,然后使用taskkill /f /pid xxx结束进程。
注释:在Linux和Windows下,查看端口号被谁占用的命令都是 netstat命令,但是这个命令在两个平台上的使用方法不一样,可以使用 netstat ?命令(两个平台都支持这个写法)查看一下具体的参数含义。
在Linux下,netstat -tunlp | grep 8080 ,其中p参数负责显示pid。 在Windows下,netstat -ano | grep 8080 ,其中o参数负责显示pid。
4,Idea Intellij中自动注入时@Autowired时,报红线提示。不影响启动,但是视觉效果不好。可以如下设置:Settings--->Editor---->Inspections---->Spring--->Spring Core--->Code--->Autowiring for Bean Class(将Error改为Warning就可以了)
5, 换新电脑之后,发布api的时候报错,错误信息是 root工程在 (默认的Apache的)*仓库 找不到,而我们的*仓库已经换成自己的了。idea中的配置使用的是repository中的setting.xml。而这个setting.xml中的*仓库已经是自己的。所以在找 root 工程的时候用的配置文件并不是repository中的setting,而是用的原来的conf文件中的setting.xml。 所以将conf文件夹中的setting.xml替换成自己的就可以了。 然后运行mvn clean install -U。
6, exam-webapp 启动时遇到启动一半不往下走了, 原因是在某个controller中的某个 方法名 处打了断点,所以走不动了。一个比较奇葩的问题,记录一下。
7, idea intellij 中关闭coverage的开关: alt+ctrl+F6 。 coverage意思是单元测试的覆盖率,即 单元测试 所覆盖的代码范围。
8,自定义模板设置:3中的变量 $END$的作用是将光标位置默认放置在此处
9,一些对象中的对象,返回前端之后会变成引用。解决这个问题的方法是将 整个对象先变成json字符串(有个参数开关),然后再从json字符串转换为json对象。如下:
10,新建文件时自动填充作者时间等信息
11,idea里有个前进后退的功能,即在鼠标停留的位置随意切换。默认快捷键如下图是ctrl+alt+左右箭头。
还可以将其设置到工具条中,方法如下图:,Navigation Bar ToolBar里的内容就是快捷工具条上的图标。选中ToolBar Run Actions,然后点击右上角的add after,从main menu中找到需要添加到工具条上的功能,按Ctrl选中前后箭头,然后应用就可以了。还可以move up / move down调整位置。
12,int updatedCnt = namedJdbcTemplate.update(sql, paramMap); 返回值是此条SQL语句成功更新的记录数量。(更新前的原值和更新后的新值相等也算成功更新, { 由于条件不符合没找到 } 或 { 找到没更新成功(这种一般是sql执行出错了) } 算没成功更新)。
13,IDEA Intellij如何折叠代码块。 将鼠标放在if 或for代码块内, 然后选择 Code | Folding | Fold Code Block,或者快捷键 [ctrl+shift+.]。
14,经常遇到 在Navicat中可以查出结果的SQL但是在代码中却无法查询到结果的情况。这种情况一般都是 执行顺序、执行时机问题。比如在查询这一步时,之前的代码已经把数据清除了,所以代码这里查不到了,但是如果有事务控制,Navicat中的数据还没有删除,所以此时将SQL在Navicat中执行可以查询到结果。
15,
16,
17,
===============================================================================
===============================================================================
二、知识点记录:
0, Intellij IDEA 破解下载 https://www.jetbrains.com/idea/download/#section=windows
- Version: 2018.2.3
- Build: 182.4323.46
- Released: September 4, 2018
破解前 先将“ 0.0.0.0 account.jetbrains.com ”添加到hosts文件中
1, 简单破解 http://idea.lanyus.com/
2, 永久破解:
①,下载破解补丁 http://idea.lanyus.com/jar/JetbrainsCrack-3.1-release-enc.jar
②,将补丁放在安装包的/bin路径下,如图中放置在最后的jar文件,并且对本文件夹(bin)下的idea.vmoptions配置文件进行修改[注意:(可能是版本还是不同操作系统的原因,有人可能没有idea.vmoptions,但是有idea.exe.vmoptions和idea64.exe.vmoptions这两个文件,在这里面进行配置应该也是一样),打开后在最后一行添加如下一条配置指令:
windows版:-javaagent:[这里放置对应补丁包的路径](比如:D:/indea/bin/JetbrainsCrack-2.7-release-str.jar , 注意后缀也要加上!!!)
Mac版:-javaagent:../bin/JetbrainsCrack-2.7-release-str.jar
③保存编辑后的文件,然后打开idea,进入激活窗口此时需要选择 激活码 的激活方式,并输入如下激活码进行激活:
④ 激活码从 http://idea.lanyus.com/ 此网站获取,填写后即可到2100年。!!!!
3,检查java代码的插件:alibaba Java 开发规约插件,该插件是由阿里巴巴p3c项目组研发(P3C是世界知名的反潜机,专门对付水下潜水艇,寓意是扫描出所有潜在的代码隐患。)在IDEA的插件仓库中搜索alibaba即可,如下图。
1 JVM JRE JDK
JVM:英文全称Java Virtual Machine,字面意思“Java虚拟机”,简单来说就是一个软件。一个什么软件呢?一个可以运行Java的软件。我们在将.java编译后,会生成相应的.class文件,那么,问题来了,什么问题呢?就是这个.class文件怎么运行?运行在哪里?答案就是JVM。JVM就是加载并运行.class文件的软件。
JRE:英文全称Java Runtime Enviromental,字面意思“Java运行时的环境”,简单来说就是一个平台。一个什么平台呢?一个专门运行Java程序的平台。它包括了JVM和Java的一些常用的类库,JVM就是上面所说的Java虚拟机,而类库就是我们在编写好Java程序后所依赖的核心类和支持文件,没有这些类库,我们编写好Java程序就没法正常执行,可以说JRE是运行Java程序的最小环境。
JDK:英文全称Java Development ToolKit,即Java开发工具包,它除了包括JRE和JVM外,还包括java(用于执行.class文件)、javac(用于将.java文件编译成.class文件)等工具,这些工具能够很好地帮助我们进行Java开发。理论上讲,有了JDK就不需要JRE了。
2 JDK SE? EE? ME?
Java SE(Java Platform,Standard Edition), java的标准版本,一般就是指JDK(Java SE Development Kit)。Java EE (Java Platform,Enterprise Edition),java 的企业版本Java ME(Java Platform,Micro Edition),java的微型版本。JavaEE是开发企业级应用的一套API(或者叫标准),是建立在JavaSE之上的。
比如JDBC是JavaSE里面的内容,而JPA却是JavaEE里面的内容,但是JPA实际上是对JDBC的一种封装。
JavaEE SDK就是Oracle提供的调试运行环境(GlassFish)。
企业级开发一般分为两大阵营(或者有其他?请评论补充),
一种是官方推的JavaEE,一种是Spring这种所谓的轻量级企业应用框架。
如果你要开发前者,你就可以使用JavaEE SDK,然而也不是必须的,你可以使用其他JavaEE环境,比如JBoss Weblogic之类的。如果是后者,就没必要下载JavaEE SDK,就一个Tomcat就搞定了。
注:两大阵营并非完全不容对方,而是在互相推动着彼此的发展,比如JPA的标准制定就是参照Hibernate,而Spring现在的很多东西也在和官方的标准靠拢,比如现在的4.x版本里面的Spring Cache就在兼容JCache(JSR-107)
3 JDK安装(Linux 和 Windows下)以及JDK环境变量配置教程 [很简单,几乎就是配置个环境变量就可以了]
https://blog.csdn.net/itxiaolong3/article/details/77691245
这是官方对于奇数版本与偶数版本区别的解释:
从JDK版本7u71以后,JAVA将会在同一时间发布两个版本的JDK,其中:
奇数版本为BUG修正并全部通过检验的版本,官方强烈推荐使用这个版本。
偶数版本包含了奇数版本所有的内容,以及未被验证的BUG修复,Oracle官方表示:除非你深受BUG困扰,否则不推荐您使用这个版本。
2, 基本步骤:
- 将下载包[点我] 解压到一个目录
- 配置环境变量,如下
Linux下:
1, 编辑 /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$JAVA_HOME/bin" export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export JAVA_HOME=/path/to/ jdk1..0_171 , source /etc/environment //使配置文件立即生效 , 编辑 /etc/profile [全局用户,每次重启电脑都会自动添加环境变量]
export JAVA_HOME=/path/to/jdk1..0_171
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH , source /etc/profile , 编辑~/.bashrc,同样添加profile下面的环境变量,否则新打开的shell窗口没有java环境变量,不会识别java命令。
, DONE! windows下:
下载JDK的exe安装包,然后配置环境变量如下,
系统变量->新建 JAVA_HOME,值为jdk的安装路径,精确到jdk文件夹(D:\workware\jdk).然后在系统变量的Path变量中添加 "%JAVA_HOME%/bin;"即可。 java -version测试安装是否成功!※ Idea IDE第一次打开时要配置JDK,找到文件夹xx/xx/java/jdk1.8.0_171 即可,不需要到更下层的bin/之类的文件夹。
4 安装maven3.5.4(Linux 和 Windows)
官方下载地址: https://maven.apache.org/download.cgi
注意Linux下载的是第一个 apache-maven-3.5.4-bin.tar.gz 而不是 apache-maven-3.5.4-src.tar.gz
window下载 apache-maven-3.5.4-bin
环境变量配置:
Linux下配置:
然后解压到某个文件夹,然后在/etc/profile下配置环境变量如下。同时也在/root/.bashrc下也配置下面的变量
export M2_HOME=/e/0Ubuntu/software/maven/apache-maven-3.5.4
export CLASSPATH=$CLASSPATH:$M2_HOME/lib
export PATH=$PATH:$M2_HOME/bin然后 source /etc/profile 使配置文件立即生效。然后mvn -v 检验是否安装成功。
Windows下配置:
M2_HOME %M2_HOME%\bin
maven配置
在当前用户的目录下(/root下)创建一个 .m2目录(或者使用mvn clean命令,将会自动在当前用户的用户目录下产生一个.m2目录).将maven安装目录下的conf/settings.xml maven配置文件复制到.m2目录下,这样以后每次maven升级时都无需再次配置此文件了。 【创建一个仓库目录,然后将conf/setting.xml文件复制到此文件夹下,然后在idea中配仓库地址即可。】
基本上就两个地方需要配置:
- localRepository节点:此节点配置本地仓库路径。如果不配值默认路径就是.m2/repository文件夹
- mirror 节点:maven中心仓库的镜像,可以设置为阿里云的镜像,如下
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
6 Tomcat9.0的下载与安装(Linux 和 Windows) 官网下载
1, 下载core中的 tar.gz (pgp, sha1, sha512) 【windows下载 core中的64-bit Windows zip (pgp, sha512)】
2, 将压缩包解压到某个文件夹xxx,然后进入xxx/bin 执行命令 ./startup.sh 开启tomcat, 执行./shutdown.sh关闭tomcat。 一般到这里边成功了。如果不成功,则需要进一步的配置,如下(以Linux为例):
- 编辑/etc/profile文件,加入如下内容
export CATALINA_HOME=你的tomcat路径
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:${CATALINA_HOME}/lib
export PATH=${CATALINA_HOME}/bin:$PATH
- 编辑xxx/bin/startup.sh, 在最后一行【exec "$PRGDIR"/"$EXECUTABLE" start "$@" 】前添加以下代码
JAVA_HOME=你的JAVA路径
JRE_HOME=${JAVA_HOME}/jre
PATH=${JAVA_HOME}/bin:${JRE_HOME}:$PATH
CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
TOMCAT_HOME=你的tomcat路径
/注意,路径都是精确到版本的那个文件夹(比较外层的那个文件夹,bin外面的那个文件夹)
最快的方法就是找一个多年开发经验的人问一下,自己摸索确实挺费劲。熟悉之后也不需要记录什么了
File-->new project,然后在 file->project structure-->project或快捷方式中配置JDK, 然后import module。
然后IDEA的settings--->Build, Exection,Deployment-->Maven-->配置settings.xml和repository(仓库).
[这样配置之后每次新建project后还需要每次都配置一下,所以在File->other settings-->settings for new projects中配置一下maven配置文件和仓库地址,以后新建project都会使用这个maven配置]
可以装个插件 Maven Helper
8 maven引入SpringMVC相关依赖
官方网站:http://search.maven.org ,然后在 advanced search中的By Coordinate--->groupid 搜索 org.springframework。在结果中找到5.0.7版本。基本用到4个jar包:
9 zookeeper的安装[分为单机和集群两种安装]
1, 原理
2, 下载地址:http://mirror.bit.edu.cn/apache/zookeeper/
3, 单机和集群安装方法:
https://blog.csdn.net/ron03129596/article/details/68962448
https://www.cnblogs.com/crazylqy/p/7119030.html
4,
10, dubbo相关,不用安装
官网: http://dubbo.apache.org/#/docs/user/quick-start.md?lang=zh-cn
11, openVPN安装指南
注意:
1,公司项目中 vpn的配置文件中新增了一些网关配置,新建环境时注意加进去,否则项目启动不起来。
2,同一个账号如果在两个电脑上登录,则会不断的重连,导致两个电脑都不能连接成功。
Ubuntu:
https://blog.csdn.net/u011138447/article/details/51216455 【安装指南】
https://openvpn.net/index.php/open-source/downloads.html 【官网下载原码】
查看版本: openvpn --version
启动命令: sudo openvpn --daemon --cd /etc/openvpn --config client.ovpn --log-append /var/log/openvpn.log
获取更简单的 openvpn --config path/to/ths.ovpn
Windows:
注意将配置文件放到OpenVPN安装目录下的config文件夹下,否则会报配置文件找不到.
有时候openvpn会莫名其妙的挂掉,卸载掉重新装就可以了。
12, etcd集中配置
https://github.com/coreos/etcd/releases/ 【下载包地址】
https://www.cnblogs.com/nima/p/8028551.html【安装及启动等说明】
环境变量配置:
ETCD_ENDPOINT http://192.168.195.98:2379 [使用Telnet 192.168.195.98 2379 测试本地是否可以访问此地址和端口!每次配这个都错,注意注意。还会影响到openVPN]
ETCD_REVERSION 0
ETCDTL_API 3[没用到]
13, 项目总结
本机配置完如下即可运行项目。
1, maven配置,用户名/密码 镜像地址(本地仓库) 2, etcd环境变量配置(远程etcd地址),本机无需装 ; 3, vpn启动
14, 自动化部署
1,
http://gs.mizss.com/hanfeng/demo/wiki/%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E9%83%A8%E7%BD%B2%E7%AE%80%E8%BF%B0
2, api工程
测试版发布步骤:
mvn clean deploy 发布快照版本 直接打包jar,并发布到maven私服(阿里的一个服务器)中
发布正式版步骤:
- 运行maven release插件命令:mvn clean release:clean release:prepare release:perform 。这个命令做的事情:将本地pom.xml文件中的版本号去除snapshot,然后打个tag发布到git仓库中,然后将本地的pom.xml文件版本号加1(同时加上snapshot)。
- 然后去git仓库 点击版本发布,点击时将通知jenkins服务器拉取git仓库中的tag代码,将其打成jar包,并传送到maven私服上(脚本命令)。
3, service工程
测试版发布步骤:
运行maven release插件命令: mvn clean release:clean release:prepare release:perform。这个命令做的事情: 同api修改版本号,然后打个tag发布到git仓库中,通知jenkins拉取git仓库中的tag代码,将其打包成zip包,并通过脚本命令将其传送到dubbo服务器上(亦是阿里的一个服务器)并将此服务运行起来。[Jenkins服务器和duboo服务器互相无密码互连]
正式版发布步骤:
- 开始和service的测试版发布步骤一样,然后到git仓库中点击 发布新版。
4, webapp工程
测试版发布步骤:
- 运行maven release插件命令: mvn clean release:clean release:prepare release:perform。 这个命令做的是: 同上修改版本号,然后打个tag发布到git仓库中。通知jenkins拉取git仓库中的tag代码,将其打成war包,并通过脚本命令将其传到tomcat服务器上。同时前端zip包传到nginx服务器上。
15, Swagger入门教程 [编写接口文档]
17,redis 在idea中的插件 Iedis, 需要破解,网上可以破解
18,jacob--Java Com Bridge 使用指南
jacob包已上传至百度云 另可通过此下载 https://sourceforge.net/projects/jacob-project/files/jacob-project/ 。经自己实验,将jacob-1.18-x64.dll放入 ..../jdk/jre/bin目录下有效。
19,
20,
21,
22,