技术要广了解,而精一门即可
初学
- 学会常见数据库的sql语句操作
- 学会创建SpringBoot工程项目
- 学会Jdbc方式对数据的增删改查
- 学会Mybatis 对数据的增删改查
所有操作最终都是对数据库的操作,实现过程只是各种五花八门的包装。
进阶
- 学会灵活运用Java的四大特征继承、抽象、多态、封装
- 学会常见关系型数据库(mysql,oracle,sqlserver等等),了解达梦、ES、Iotdb
- 学会File文件的读取,写入、压缩、解压、导入、下载等相关操作
- 学会Excel、Word、Pdf文件的读写:Apache POI,FreeMarker,Spire,Aspose
- 学会文件实现在线编辑预览技术,比如:OnlyOffice,OpenOffice
- 学会模板引擎技术,比如:JSP,Thymeleaf,FreeMarker,Velocity,Enjoy
- 学会Java拦截器和过滤器,全局异常处理,log4j/logback日志框架
- 学会Spring的常用注解,参数校验,依赖注入,切面编程等Spring相关技术
- 学会Spring Security、Shiro、Sa-Token、JWT等权限认证框架
- 学会Maven的依赖管理和常用几种打包方式,学会集成第三方插件
- 学会JPA和Mybatis两个持久层框架,学会Mybaits-plus插件,提升开发效率
- 学会类似mybatis-plus-generator代码生成器,生成数据库文档工具screw(螺丝钉)
- 学会使用接口文档工具Swagger、Apifox、YApi、JApiDocs等工具
- 学会使用开发工具包(比如Hutool,apache,springframework),提高编写代码效率
- 学会微信、支付宝以及其它第三方支付接入技术,以及微信公众号、小程序等相关开发
- 学会市面上的流行框架,能任意改动框架结构,能根据实际需要搭建框架
- 学会在架构设计和业务代码中运用设计模式开发,充分发挥编程思想
- 学会SpringCloud微服务框架、Nacos配置中心、Gateway网关、Feign服务调用
- 学会多线程、高并发、消息队列、Redis缓存、Websocket即时通讯等技术
- 学会常用一种工作流引擎技术:activiti、flowable、jbpm、osworkflow
- 学会Quartz定时任务,学会任意一种分布式任务调度开源框架XXL-JOB、Elastic-Job
- 学会使用ShardingSphere、Mycat、DBLE 等分库分表的中间件
- 了解 Datax、Otter、Canal 等大数据同步工具,了解 ELK,Filebeat + Graylog 等日志收集方案
- 学会Tomcat等Web服务器,学会Nginx反向代理和负载均衡策略。
- 学会Linux常用命令,学会Docker容器技术,学会基础环境安装和项目部署
- 熟悉阿里云、腾讯云、华为云等服务器,配置域名,生成证书,云存储等等
浅谈
以上只是列举些大概,已足够应付实际开发。
学习常用技术就要靠硬记,学习额外技术大多是有个印象就行,在场景实现需要的时候知道有这个技术,再深入学习和运用,这样效果会更好。
技术要广了解,而精一门即可。
技术永远只是处理问题的工具,合理运用相关技术处理问题才是能力。
一个成熟的项目绝不是靠使用技术种类的繁多而显得多牛逼,大道至简;能用最小的代价完成一件事才是最佳的解决方案,任何附加技术的投入都可能会增加额外的服务资源、维护成本、漏洞风险、未知问题等等。
实际的项目开发中,技术使用合理即可;对一个产品来说,更应该注重的是用户体检,也就是指优秀的产品设计;在技术层次就是需要一个优秀的架构设计,支持业务的横纵向扩展,保证系统的稳定性。
尽量多了解不同行业的运作模式,就好比:财务系统、医疗系统、销售系统、外卖系统、电商系统等等都各有不同,每接触一个行业系统开发都先要对该行业进行深入了解,这样才能清楚客户的需求,也就是说做多了项目很自然就会了解到很多行业的运作方式,这也是作为一名老程序员的宝贵经验和独特优势,还有发现问题和解决问题的能力。
先学会造轮子,如果不会造轮子怎么确保你有改轮子的能力!
为解决问题而寻找一种技术,为解决问题而学习!
部署项目
-
java -jar 或 tomcat
-
脚本部署
windows(*.bat) 和 linux(*.sh)
-
Docker部署
依托与linux 内核功能的虚拟化技术,在windows系统需要先安装虚拟机。
特点:方便管理,可复制,启动快,以服务方式运行。 -
集群部署(同一个业务,部署在多个服务器上)
首先准备一台响应服务器,然后由多台服务器集群完成同一个任务,使用负载均衡机制分派请求。
-
分布式部署(把一个业务拆分成多个子业务,部署在不同的服务器上)
单一分布式应用的缺点:分布式中的每一个节点完成不同的业务,如果这个节点垮了,这个业务就不能访问了。
正确的设计方案是: 先分布式再集群 -
微服务部署(将工程结构拆分为一个个小的业务模块,通过接口彼此调用,降低代码的耦合度,并且能独立部署运行)
微服务往往也是采用的分布式部署,分布式是为了提高性能,微服务是为了解耦。
合理的设计方案是:
1、先采用微服务架构设计,将工程拆分成多个模块(通过接口彼此调用,降低代码的耦合度)
2、后采用分布式工作方式将拆分开的各个模块分别部署到多台服务器上(通过缩短单个任务的执行时间来提升效率)
3、再采用集群物理方式将各个模块部署到多台服务器上(通过提高单位时间内执行的任务数量来提升效率)
网站被攻击了怎么办?
网站常见的被攻击的类型
一、服务器攻击
服务器攻击主要有DDOS攻击和CC攻击,一般情况下,服务器厂商提供的服务器只是裸机,需要我们自己在使用过程中进行一些软件防护的设置和安装。
针对这两种的攻击情况,我们可以采取以下两种方式来处理,也可以作为服务器配置里的默认处理方式:
-
DDOS攻击一般以攻击IP为主,建议在域名解析的时候,不要做A记录,直接做Cname别名记录;
-
针对CC攻击,主要是对服务器进行了频率的PING操作,我们可以在服务器里直接设备禁PING操作。
-
如果DDOS攻击无法进行防御的时候,可以借助一下外壳,即当网站服务器被攻击时,直接将攻击目标转移走,这里需要注意,不要转移到别人的网站,直接转到一个僵尸链接就好了。
二、网站程序和数据库被攻击
这种情况主要是网站程序里出现了漏洞,从而让别人有了可趁之机,针对这一类的攻击情况我们除了进行一些强密设置以外,还需要从源头处理。
-
尽量选择安全性高一点的网站程序,建议以量不要使用开源的CMS程序,或ASP程序,这些程序漏洞会比较多,很容易被攻击。
-
Mysql注入攻击,这种情况主要是网站采用了一些动态的URL参数,很容易让人发现网站的数据库结构和字段,建议采用全html静态化处理。不要使用动态的URL参数。
-
后台登录权限安全设置弱,通常情况下,大部分的网站都是在网址后台加一个单词直接进网站后台,这种很容易被猜或被扫描出来。建议使用强密码和修改默认后台登录路径。
商之道建站系统做法:采用分布式云存储技术,实现网页前端,数据库和后台管理进行数据分离,网站后台登录采用单点授权登录,登录方式采用微信扫码和手机验证码登录。这样在安全性这一块还是有保障的。也符合了国家等保2.0的标准。
三、交互功能被截口
这种情况主要存在于网站里有一些交互的功能,比如网站留言功能,网站评论功能以及文件上传功能等,相当于给网站开通了一个后门,不法分子可以能过写入一句话木马或合成一个图片马(把一张正常的图片,和一个含有木马程序的PHP文件进行文件合成为一个新的有木马的图片)通过网站文件上传的功能,将木马植入到网站程序里,这样就可以通过寄生虫来进行网站程序修改,注入大量的网站黑链或修改HTML模板。
碰到这种类型的情况,我们建议如果网站非必要尽量不要开通这些交互功能,必须要开通的,则应该需要做好相应的防护措施,比如在留言功能增加一些验证机制。或留言的字段写入数据库时进行一定的数据隔离审查,通过上传的文件最好是和网站后台的管理目录进行物理分离。