凉衫薄

人生哪能多如意,万事只求半称心。
未分类
前言 一年前,我从一个Linux C/C艹程序员转到Java程序员,终于从原始进程级别的底层开发转到了分布式的云开发。回看一年前连Java语法都不怎么会,虽然现在也不算多牛逼,但至少各种生态技术都用的如鱼得水了,这之间还是有很多收获的。下面我总结了一下学习过程和顺序,希望大家少走弯路。 出门装 1. Java语法 很多人推荐《Java编程思想》,我是不推荐这本书入门,外国人写的东西就是啰啰嗦嗦,《从入门到精通》系列挺好的,习惯了中国式教育,高效快速。 2. Java Web 说实话,jsp这些东西已经很过时了,但是servlet-api里面的一些东西直接影响了你学后面的一些东西,比如:过滤器,监听器,会话之类的,多看看web.xml里的一些配置,知道这些东西该怎么配。 3. Maven 项目依赖,构建管理工具,学会如何配置仓库,镜像,特别重点:生命周期和插件。 刷钱装 咳咳,刷钱装,顾名思义就是刷钱的装备,在游戏里面你的经济直接影响了你的发育速度以及后期参战能力,怎么能在最短的时间里刷出更多的钱,在避免前期被敌人gank死的情况下尽快把你的刷钱装做出来吧。 4. SSM还是SSH(辉耀还是狂战) 不开玩笑了,SSH是指(spring+struts2+hibernate),SSM是指(spring+springMVC+mybatis),结合现在形式来看,除非你去维护一些老项目,不然SSH这一套绝对过时了,当然spring-data-jpa里面用到了hibernate,这个可以学学,不然你就去学SSM,下面分开来讲。 5. Spring Java的生态真的得感谢Spring,具体的自己去看书,下面划一下重点。 1、IoC控制反转 2、AOP面向切面编程 3、Bean生命周期 4、Spring数据库事务(敲黑板特别重点,期末要考:四种隔离级别和传播行为) 5、jdk代理和cglib代理的区别 实战:Maven创建web项目后,如何写配置文件整合Spring(一个程序员最起码离开各种平台要学会搭项目,配置项目)。 6. Spring MVC 作为Spring全家桶的一个成员完美的诠释了MVC架构,下面划一下重点。 1、Spring MVC处理请求流程(敲黑板特别重点,期末要考) 2、Spring MVC几种注解的应用 实战:在上一个实战的基础上,把Spring MVC给整合进去,怎么去写配置 7. Mybatis 比较流行的持久化框架,优点在于暴露sql,便于sql优化,适合互联网架构场景。下面划一下重点。 1、懒加载,别名,Typehandler等概念 2、mapper.xml文件的书写 3、一对多关系的查询 4、分页插件 实战:在上一个实战的基础上,把Mybatis给整合进去,怎么去写配置文件。能够做到SSM的整合算是互联网架构入门了,真是这样。 保命装 在游戏里面身板不是特别好,不出点保命装,出去和别人打,直接送你回泉水 这里的保命装主要是一些中间件的应用,互联网架构中,常见的中间件有rabbitmq,redis,zookeeper,dubbo或dubbox,shiro,下面一一划重点。 8. redis 当下最最流行的缓存中间件,不废话,直接划重点 1、redis的几种数据结构 2、redis命令行接口的使用 3、redis编程接口的使用 4、redis的主从结构 5、SSM项目如何整合Redis,RedisTemplate和CacheManager等一些常见API的使用 实战:在整合了SSM框架的基础上,通过Spring把Redis也给整合进去,如何去写配置 9. rabbitmq 消息队列,除此之外还有activemq,这里只介绍rabbitmq,划重点 1、熟悉amqp协议 2、rabbitmq中几种交换机的区别和使用场景 3、rabbitmq的几种使用场景(削峰,异步,解耦) 4、rabbitmq的命令行接口和编程接口 5、SSM项目整合rabbitmq,熟悉AmqpTemplate,RabbitTemplate,MessageListener等API 实战:在整合SSM框架的基础上,通过Spring把Rabbitmq给整合进去,如何去写配置 10. zookeeper,dubbo 这两个放一块讲,zookeeper作为分布式协同中间件,平时用的比较多的地方算是在dubbo里面了,dubbo是阿里推出的一个RPC框架,dubbox是当当网在dubbo的基础上支持了RESTFUl接口,划重点。 1、zookeeper的数据结构 2、zookeeper的选主算法 3、zookeeper的命令行接口和编程接口 4、dubbo的流程,原理和配置,如何向注册中心注册 实战:在整合SSM框架的基础上,通过Spring将zookeeper和dubbo给整合进项目里,如何去写配置。 11. shiro 这东西严格来说不是中间件,算一个授权认证框架,还有Spring-Security也是,不过Spring-security比较重量级,一般会选择使用shiro,下面划重点。 1、整个shiro处理授权认证流程的架构都很重要 2、如何通过shiro过滤器代理web请求 3、如何开发自定义Realm 4、凭证匹配器 5、三种过滤器(FormAuthenticationFilter,UserFilter,LogoutFilter) 6、如何自定义过滤器 7、会话管理器(会话持久化) 8、缓存管理器(怎么去整合redis缓存) 9、rememberMe管理器 10、安全管理器 11、如何定义URL过滤规则 实战:在整合SSM框架的基础上,通过Spring将shiro给整合进项目里,如何去写配置,如何实现授权认证流程,如何进行权限管理 打架装 恭喜你现在不至于被别人秒了,刷了这么久,出点打架装去参团吧 12. Spring boot 上面在实战过程中,通过Spring去整合各种框架和中间件的xml配置是不是写得很头痛,现在有了一个更好得东西叫Spring boot,这个东西没别的,就是帮你解决以上配置繁琐的问题的。Spring boot是基于约定的配置和自动化配置。什么是约定的配置呢?比如,一般我们项目会设置端口为8080,所以他就帮你约定配置好了这个端口,你就不需要去配置端口了,当然你要想改为其他端口也还是可以改的。什么是自动化配置呢?比如Spring boot检测到你类路径下有Mybatis相关的类,那么他就会从你的properties中,去找数据库ip,用户,密码等,然后帮你把mybatis自动给配置好,有了这东西,你能从这些繁琐的配置中解放出来,而更关注于业务层面。 13. Spring Cloud 当下流行的一个微服务框架,以Spring boot项目为基础,划重点。 1、服务治理中心 2、微服务之间的互相调用(RestTemplate和Feign) 3、网关(zuul和gateway) 4、服务容错(降级和熔断的概念和实现) 5、服务追踪 6、消息总线 7、配置中心 8、Ribbon客户端负载均衡策略 9、分布式事务(敲黑板特别重点,期末要考) 14. Linux 说实话,我发现Java程序员很多连Linux都不会,这种现象在C/C艹程序员身上就少多了,并不是鄙视Java程序员,毕竟现在我自己也是一个Java程序员。这些东西还是有必要去学的,下面划重点。 1、目录文件的操作 2、软件的安装及配置 3、Linux系统的目录结构 4、Vi/Vim编辑器的使用 5、通过源码编译软件(有些软件根本就不提供二进制发行版,你不得不通过源码编译OpenCV、Redis) 6、进程的操作,网络的操作 7、《UNIX环境高级编程》选读,你能了解Linux C一些API,对Linux更了解 8、不同发行版的区别(主流的就三种系列Redhat,debian,arch) 15. docker 现在都是云原生应用,容器化部署,devops的热门,更是将docker推向高潮,最为一个开发人员,最基本的运维还是要懂的,其实你会Linux的话,docker简直如鱼得水,下面划重点。 1、docker基本的命令(拉取镜像,创建容器,commit镜像,push镜像) 2、dockerfile脚本的书写,如何去构建镜像 3、进入运行容器的几种方式(attach,exec,ssh等) 4、docker-compose编排docker服务,docker-compose.yml配置的书写 16. nginx 反向代理服务器,划重点。 1、反向代理和正向代理的区别和概念 2、nginx配置,如何转发请求 3、动静分离,负载均衡等概念 后期神装 三万敌法哪能一秒躺,那是你不会玩,40分钟六神出山carry吧 17. Java多线程 如果你看过Linux C多进程多线程编程,Java的多线程显得low多了,但还是不可否认他在Java生态中的重要性,划重点。 1、synchronized同步 2、lock同步 3、死锁问题 4、volatile关键字 5、线程状态的变化 6、线程组的概念 7、线程间的通信 18. JVM JVM虚拟机这东西全是重点,去看书死啃 19. 设计模式 敲黑板,特别中啊哟,期末要考,下面列一下常用的设计模式 1、单例模式 2、适配器模式 3、工厂模式 4、观察者模式 5、装饰器模式 6、代理模式 7、建造者模式 8、桥接模式 9、责任链模式 20. 数据结构与算法 这东西如银月之晶,前期刷出来站不住脚,后期补一个却能让辅助打大哥,当之无愧的神装 1、线性表(链表,对列,栈) 2、树(二叉树,排序二叉树,红黑树,B树,B+树,平衡二叉树,赫夫曼树) 3、森林(树和森林的转换) 4、图论(如何找最短路径) 5、各种排序算法 结束 好好看看吧,会对你有帮助,欢迎补充。
响应式布局 pc布局 mobile布局 项目介绍 这是一个基于互联网架构的一个博客系统,采用SSM框架,Shiro认证授权框架,整合Redis等缓存中间件,Freemarker模板引擎完成的。响应式布局完美适配 PC,平板和手机布局。此项目已用springboot重写,请移步这里。 技术架构 Ioc容器 - Spring MVC框架 - Spring MVC 持久化框架 - Mybatis 缓存 - Redis 认证授权安全框架 - Shiro 模板渲染引擎 - Freemarker 模块化前端框架 - Layui markdown编辑器 - editor.md 日志系统 - slf4j + logback 如何使用 git clone项目 将db.properties中的jdbc.username和jdbc.password改为你的数据库账户和密码,mysql和redis都是按照默认的端口配置,如有需要也可更改配置文件,指定ip和port。 运行mvn package,将项目打包成war包,然后将打包后war包放到tomcat的webapps目录即可,无需手动建表,容器初始化时会自动建表。 注意用外置的servlet容器部署时,需要配置去除项目名访问,不然会报404错误。 运行startup.sh启动tomcat。 后台管理系统地址为http://domain:port/admin,初始用户名为363408268@qq.com,初始密码为19960821。 环境搭建 Linux 环境部署 下载并解压 JDK 1.8 tar zxvf jdk-8u172-linux-x64.tar.gz mv jdk1.8.0_172 /usr/local/jdk 下载并解压 Redis 4.0.9 tar zxvf redis-4.0.9.tar.gz mv redis-4.0.9 /usr/local/redis 下载并解压 Tomcat 9.0.8 tar zxvf apache-tomcat-9.0.8.tar.gz mv apache-tomcat-9.0.8 /usr/local/tomcat 安装MySQL或MariaDB 注意!如果是mariadb需要将user表中的plugin字段值’unix_socket’改为’mysql_native_password’,否则jdbc连接会出错 Debian系列Linux参考以下过程 #apt-get update //获取最新软件包 #apt-get install mariadb mariadb-server //安装mariadb客户端和服务器 #service mysql start //启动服务 #mysql_security_installation //执行安全安装脚本 Redhat系列Linux参考以下过程 #yum update #yum install mariadb mariadb-server #systemctl start mariadb #mysql_security_installation 设置环境变量(用vim打开/etc/profile这个文件,在后面添加以下内容) export JAVA_HOME=/usr/local/jdk export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH export CATALINA_HOME=/usr/local/tomcat export CATALINA_BASE=/usr/local/tomcat export PATH=$CATALINA_HOME/bin:$PATH export PATH=/usr/local/redis/bin:$PATH 启动redis和tomcat redis-server & startup.sh 将打包好的war包放入tomcat的app目录 启动容器 startup.sh Docker部署(推荐) 下载源码后在根目录下运行以下命令 mvn package mvn dockerfile:build 不出意外本地已经成功生成docker镜像了,你可以push到你的docker仓库中,随时pull到任何一台docker容器中部署了 运行容器 docker run -d -p 80:80 blog:latest 项目结构 java (源码根目录)   |——net.stackoverflow.blog     |——common/ (公共类)     |——dao/ (数据访问对象,一般存放mybatis的mapper接口或jpa的repository接口)     |——exception/ (异常类定义)     |——pojo/ (存放po,vo,dto等类,可进一步划分子包)     |——service/ (服务接口以及实现类)     |——shiro/ (shiro相关代码)       |——cache/ (shiro整合redis缓存相关代码)       |——filter/ (shiro自定义过滤器)       |——realm/ (shiro自定义realm)     |——task/ (后台任务)     |——util/ (工具类)     |——validator/ (校验工具)     |——web/ (web相关代码)       |——controller/ (业务层,提供restful接口)       |——freemarker/ (freemarker整合shiro注解配置类)       |——interceptor/ (拦截器)       |——listener/ (监听器) resources (资源文件夹)   |——mapper/ (存放mybatis的mapper.xml)   |——sql/ (存放sql脚本)   |——application.properties (项目配置文件)   |——logback.xml (logback日志配置)   |——mybatis-config.xml (mybatis配置文件)   |——redis.properties (redis配置文件)   |——spring-context.xml (spring配置文件)   |——spring-mvc.xml (springmvc配置文件)   |——spring-mybatis.xml (spring整合mybatis配置文件)   |——spring-redis.xml (spring整合redis配置文件)   |——spring-shiro.xml (spring整合shiro配置文件) webapp (web目录)   |——static/ (静态文件,包括js,css,图片,以及第三方前端库)   |——WEB-INF/     |——view/ (freemarker模板文件)     |——web.xml (web配置文件)   |——favicon.icon (浏览器title处图片)   |——robots.txt (搜索引擎爬取规则) 输出目录结构 /data 输出根目录   |——upload/ (文件上传目录)   |——backup/ (数据库周期性备份目录)   |——log/ (日志输出目录)