- 博客(148)
- 问答 (2)
- 收藏
- 关注
原创 IT职场——如何快速上手老项目?
虽然我列出了以上事项,但真实情况并不顺利,他推说这个项目经手很多人,他接手时也无任何可读文档,让我自己去看代码,我硬拉着他给我讲了一些关键的逻辑。这样出现一个问题,摸出一条业务线,然后总结,同样一个业务线的问题,一眼就能看出来了。关键词法,报错内容,业务数据,去服务器捞数据,或者是代码里面找出现的地方。然后他就被开了(其实正因为他能力有问题,公司已经决定开除,所以安排我来接手),项目的开发部分完全由我负责了。然后,交接工作就算完成了,我到手的资料仅仅有:代码、环境、部分业务流程的口述。
2023-09-26 11:12:50
217
原创 业务拆分——微服务拆分独立出来的步骤
对于系统拆分,是一个很常见的事情,心态要保持积极,不要觉得烦或者怕出错。在做这种工作时,需要把涉及到的内容清晰列出来,这样有利于界定风险,评估工作时间。然后列好顺序,按次序完成工作,阶段性完成,则可以保证质量了。
2023-09-26 10:27:37
634
原创 快速发布服务到生产环境(手动操作)
虽然现在大部分项目都是用Jenkins搭建环境,自动化部署。但仍然存在一些小客户,只会单独上线一些关键服务,此时就需要手动去服务器里面部署了。
2023-09-25 12:44:09
164
原创 Interceptor的使用场景:拦截请求中的租户信息,注入到租户上下文中
在SaaS环境中,租户是最重要的隔离业务数据的属性了。但有个特殊场景,某些特殊权限的账号需要修改指定租户的内容,也即前端会携带租户信息过来,并且内部涉及很多业务逻辑处理(旧有自研工单工程),无法一个个接口去做改造,识别租户id,并代进去。那么就需要考虑spring给我们提供的功能了,拦截器就很适合。
2023-09-20 10:02:31
174
原创 springboot自定义Json序列化返回,实现自动转换字典值
当你使用Spring Boot的Spring Data或者Spring MVC等组件来处理JSON序列化时,Spring框架会在需要将Java对象转换为JSON字符串时调用JsonSerializer。
2023-09-19 18:24:55
977
原创 BeanUtil.fillBeanWithMap(d.getFormData(), form, true)中日期(时间戳跟Date)的处理
排查过程:key值跟bean对象的属性名完全一样,排除这个可能;那么只能是转换出了问题。观察了数据格式,发现日期字段接收的是时间戳,long类型,而bean对象定义的类型为Date。场景介绍:需要把mongo中键值对的数据map转成Java的bean对象,用到了hutool的这个方法。BeanUtil.fillBeanWithMap,而在处理的过程中,部分字段出现丢失,变成了null。该方法会自动把long类型的时间,顺利转给date类型的时间。解决:把bean对象的类型改为Long,这样就能顺利接收。
2023-01-11 16:00:22
960
原创 有心人天不负,互联网寒冬下斩获40W年薪offer,面经分享(附复习脑图)
今年年初,到了金三银四的关键时期,却频频爆出大厂裁员,互联网寒冬令人瑟瑟发抖,而本人已在三月份裸辞,跳槽压力巨大,本文就来聊聊亲身经历。包括如何复习,投简历,面试,谈薪。
2022-04-02 06:57:46
1310
4
原创 Java进阶之路对标阿里P6(9)——Springcloud
SpringCloud一、微服务架构1.1 互联网单体->垂直->SOA->微服务1.2 概念服务注册与发现服务提供者把服务相关的IP、端口、协议等注册到注册中心;消费者从注册中心拿到较实时的服务列表,根据一定的策略从中选定一个服务访问。负载均衡将请求分配到多个服务器上,有不同的分配策略熔断断路保护链路追踪网关1.3 Springcloud概念是一系列框架的有序集合,利用springboot简化了分布式基础设施的开发。解决的问题(注册发现、网
2021-09-11 07:46:23
318
3
原创 Java进阶之路对标阿里P6(10)——Dubbo
一、DubboDubbo处理流程[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-En5MnH5N-1631317508480)(C:\Users\Howey\AppData\Roaming\Typora\typora-user-images\image-20210711151633530.png)]流程:Provider在容器启动时,向注册中心注册自己提供的服务。Consumer在启动时,向注册中心订阅自己所需的服务。注册中心返回服务提供者的地址列表给消费者,如有变
2021-09-11 07:45:28
195
原创 Java进阶之路对标阿里P6(8)——分布式理论及框架设计Netty
分布式理论及框架设计1 socket与IO模型1.1 socket概述是传输层协议TCP/IP的通信基石。五种主要信息:协议、本地IP地址、本地端口、远程IP地址、远程端口1.2 socket流程[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zaAvunxM-1631317458636)(C:\Users\Howey\AppData\Roaming\Typora\typora-user-images\image-20210617072816755.png)]根据I
2021-09-11 07:44:52
251
原创 Java进阶之路对标阿里P6(7)——Zookeeper
Zookeeper一、分布式问题分布式的协同服务。通过网络进行数据共享通过共享存储二、zookeeper概念解决分布式协同的一种方案。zookeeper是⼀个典型的分布式数据⼀致性的解决⽅案,分布式应⽤程序可以基于它实现诸如数据订阅/发布、负载均衡、命名服务、集群管理、分布式锁和分布式队列等功能集群角色leader、follower、observer会话客户端与服务端的一个TCP长连接节点一种是分布式中的机器节点,一种是数据模型中的数据单元:以/分隔的路径,此处指的就是Zno
2021-09-11 07:43:59
176
原创 Java进阶之路对标阿里P6(6)——Cluster和web服务解决
Cluster和web服务解决一、一致性哈希算法hash算法——存储及查找。对比传统的:顺序查找(遍历所有)、二分查找、直接寻址法:在数组中存放数据,且跟数组下标一致。直接把数据作为下标,去查找。优点:查找快缺点:浪费空间;重复数据无法解决。hash算法:除留余数法开放寻址法在前者的基础上,如果hash冲突,就放到旁边。但有可能空间不足。拉链法冲突的地方纵向放置一个链表。hashmap即是如此。hash算法设计的好,查询效率就会接近O(1),即数据均匀分布,且不浪费空间。
2021-09-11 07:42:54
200
原创 Java进阶之路对标阿里P6(5)——Tomcat和Nginx
Tomcat和Nginx1 Tomcat系统架构与原理2 Tomcat总体架构catalina其实处于Tomcat这一层。从另⼀个⻆度来说, Tomcat 本质上就是⼀款 Servlet 容器, 因为 Catalina 才是 Tomcat 的核⼼ , 其他模块都是为Catalina 提供⽀撑的(这一句话我认为描述不准确,应该说catalina包含的是整个Tomcat,因为catalina加载server.xml的时候,里面包含了连接器,naming等)。 ⽐如 : 通过 Coyote 模块提供链接通
2021-09-11 07:41:33
201
原创 Java进阶之路对标阿里P6(4)——SpringBoot学习笔记(3W字)
SpringBoot学习笔记1 应用回顾1.1 约定大于配置其实就是大家约定俗成的东西,就不要复杂化。达到简化使用的效果。例如,驼峰命名;数据库表对象跟java实体对象名称一致,即可映射上。这样就只有在偏离约定的时候,做一些特定的配置。1.2 SpringBoot 概念1.2.1 springboot介绍springboot简化了配置项,可以容易的创建出基于Spring的、生产级别的应用程序,直接运行即可。不需要在环境配置上大费周章,版本依赖问题等。1.2.2 springboot特性st
2021-09-11 07:36:46
317
1
原创 Java进阶之路对标阿里P6(3)——SpringMvc深度学习(8千字)
SpringMvc笔记1、SpringMVC的工作流程1.1 开发过程web.xml配置dispatcherServlet开发处理请求的controller(Handler)配置文件中controller扫描,SpringMVC三大件web.xml中配置资源路径1.2 请求流程第⼀步:⽤户发送请求⾄前端控制器DispatcherServlet第⼆步: DispatcherServlet收到请求调⽤HandlerMapping处理器映射器第三步:处理器映射器根据请求Url找到具体的Ha
2021-09-11 07:32:49
190
原创 Java进阶之路对标阿里P6(2)——Spring深入学习(1w字)
Spring笔记任务一 手写Spring1.1 Spring的优势方便解耦、简化开发。管理对象间依赖关系、封装了单例、文件解析等AOP编程支持 oop不容易实现的,面向切面编程轻松实现声明式事务支持 便捷的事务管理程序测试集成各种框架降低了j2ee api调用难度源码学习1.2 Spring核心架构web、deta access、Aop、core container、test描述:web层处理浏览器前端的请求及界面渲染,springmvc,与其他应用的交互,远程调用能力;da
2021-09-11 07:30:25
181
原创 Java进阶之路对标阿里P6(1)——手写Mybatis(4千字)
Mybatis手写第一模块任务一:设计手写持久层框架1、使用端:SqlMapConfig.xml存放数据源信息,及mapper.xml路径Mapper.xml存放sql信息2、框架端:读取配置信息、加载配置文件解析配置文件解析dom4j创建SqlSessionFactory,方法openSession()SqlSession接口,crud方法实际编码的问题无法加载到resource文件,target中没有编译,需要在pom中修改项目的打包方式,不能设为pom,的
2021-09-11 07:28:15
138
原创 初探Mysql底层——主从同步
Mysql底层原理——主从同步、半同步复制、并行复制一、背景介绍数据库DML操作,会产生对应的sql语句,那么只要让从库也同样执行一遍,是不是就可以达到跟主库状态一致的效果了呢?——即实现主从复制。那么主从复制就是要解决这个过程。二、主从原理首先来一张主从复制的原理图:原理解读:1、当主库发生Data changes时,需要有个地方来记录DML的语句,那就是Binary log了,对应的就是下文中配置文件的log_bin=mysql-bin指定binlog的文件名,sync-binlog=1
2021-08-26 08:39:05
262
原创 如何从头开始搭建一台云服务器(CentOS 7)
Linux常用命令、以及常用环境配置、软件安装1、解压tar -xvf #如果是gz后缀,加上z,即tar -zxvf2、安装(Nginx)yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel#Nginx./configuremakemake install#生成Nginx目录/usr/local/nginxcd /usr/local/nginx/sbin./nginx3、开放端口firewall-
2021-08-24 09:43:36
824
原创 Mysql集群同步实战(两台云服务器),实现主从同步、半同步复制
环境:数据库 mysql 5.7.28云服务器两台:阿里云服务器1台 centos7.4ucloud服务器1台 centos7.8防火墙原则:在Linux中关闭防火墙,云服务器管理中提供了端口管理(安全规则),开放端口在安全组中添加规则即可。#下载mysql安装包wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.28-1.el7.x86_64.rpm-bundle.tarrpm -qa|grep mariadb#检测默认的#移除r
2021-08-24 09:26:00
735
原创 Java进阶之路对标阿里P6(11)——MYSQL系统化学习(1w字)
MYSQL架构演变:单机单库主从架构分库分表云数据库一、架构原理1.1 Mysql体系架构分为四层:网络连接层、服务层、存储引擎层和系统文件层查询优化器:选取-投影-联接 策略日志文件错误日志通用查询日志二进制日志(binlog)——记录对数据的修改操作慢查询日志——记录所有超时的执行sql,主要是select,也会有insert等,默认是10S数据文件db.optfrmmyd(myisam)myi(myisam)ibd and iddata(innodb)
2021-08-23 20:26:21
916
3
原创 生产环境的OOM场景
【问题描述】SEVERE: Unexpected death of background thread ContainerBackgroundProcessor[StandardEngine[Catalina]]java.lang.OutOfMemoryError: Java heap spaceException in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryEr
2021-01-04 16:07:00
444
原创 旅游日记——2000元北京6天5夜游
目录小贴士:Day01 天坛->景山公园->工体Day02 颐和园->三里屯Day03 圆明园->北京大学、清华大学->王府井步行街->前门大街Day04 八达岭长城->明十三陵Day05 故宫->南锣鼓巷->三里屯->烟袋斜街、后海酒吧街、什刹海Day06 天安门广场->升旗仪式->回程开销合计:小贴士:1、关于乘坐飞机:提前在线值机(不需要打印纸质机票,出示电子登机牌的二维码即可),可以选自己
2020-09-11 23:26:02
1052
原创 java基础理论学习笔记(3)——ArrayList等集合类并发安全问题
ArrayList不是线程安全类,在多线程同时写的情况下,会抛出java.util.ConcurrentModificationException异常。如下代码,开启30个线程同时对ArrayList进行写操作,会报并发异常错。private static void listNotSafe() { List<String> list=new ArrayList<>(); for (int i = 1; i <= 30; i++) { new
2020-06-27 15:09:02
299
原创 java基础理论学习笔记(2)——CAS
CAS是指Compare And Swap,比较并交换,是一种很重要的同步思想。如果主内存的值跟期望值一样,那么就进行修改,否则一直重试,直到一致为止。CAS涉及内容如以下结构:CAS底层:他的核心类是UNSAFE类,这个类是rt.jar中的com.misc.unsafe,里面通过native实现对底层系统的访问,所以是通过内存偏移量对操作系统直接读取值,获得主内存当前的值,用以比较。而且他拿到值,比较,如果一致就交换,这个过程是原子性的,因为他是操作系统的原指令。不会中间被其他线程插入。
2020-06-27 14:37:56
366
1
原创 java基础理论学习笔记(1)——volatile
首先借用阳哥的脑图:1、轻量级:是相对jvm的三个特性,volatile只实现了可见性、有序性来说的。2、可见性:如下图:线程工作时,会从堆中(主内存)里拷贝变量age=25到各自栈中(工作内存),当任一线程如t1修改值为37,回写到主内存时,需要保障其他所有线程都获知主内存的变量age已更新为37,这就是可见性,即对主内存的修改,得相互知道内存模型JMM:分为堆、方法区、栈、寄存器代码测试可见性,可利用main线程以及new一个子线程来印证,若未用volatile关
2020-06-27 14:18:36
259
原创 java基础理论学习笔记——双亲委派(父委派)
首先借助网上的两张图:第一张图我们先了解下他的架构,然后第二张图,我们通过路径,就能更实际的体会到他们在实际工作中的作用了。1、可以看到系统自带的三个加载器,前面两层的都是jdk安装完成后自带的路径。也就是一些最基本的类其实jdk就已经写好了,就是那些基本的类库,不需要用户自己去改,也防止被改。2、再来看第三层的$CLASSPATH,这不是我们web项目开发中最常见的了吗?项目搭建的时候,需要配置环境,我们项目中依赖的jar包就得先在classpath下build出来。3、最深层的
2020-06-22 11:23:51
252
原创 Linux运行级别、修改root密码、常用的文件操作命令
一、运行级别修改root命令,需要在安装Linux的主机上操作,远程工具之类的是不行的。这样也确保了环境的安全。需要在开机时指定运行级别:启动时按enter键,然后马上按任意键,进入界面,按‘e’,进入下一个界面,光标到第二行,按‘e',在最后面加空格’1‘(代表单用户运行级别),然后按’b'运行,进入单用户模式,此时为root用户,passwd命令修改即可此种方式也可以指定主机到任意运行级别。二、常用文件操作命令目录指令:mkdir:mkdir /home/dog多级目
2020-06-22 09:31:04
322
原创 远程工具登录Linux及客户端乱码问题
远程连接Linux,首先确保虚拟机Linux联网:然后查找IP:ifconfig最后再客户端填写IP,账号密码即可:Shell 工具连接Linux服务器乱码问题:编码不一致:查看服务器:locale修改为utf-8:一:直接执行命令,export LANG=zh_CN.UTF-8,但只对当前会话有效,短期的,客户端重启后就失效了二:在/etc/profile中加入,并执行source /etc/profile生效,永久生效...
2020-06-22 09:22:17
525
原创 VMware+CentOS搭建Linux
一、安装VMware,直接一直下一步安装即可,其中安装路径可以选择自己想要的,并在最后一步进行激活即可;二、安装CentOS,检查BIOS虚拟化支持新建虚拟机创建虚拟空白光盘安装Linux系统对应的CentOS版虚拟机命名和定位磁盘位置处理器配置,看自己是否是双核、多核虚拟机处理器数量可以根据自己的机器配置来定,查看电脑的属性即可设置内存为2GB内存的大小要根据自己机器的内存来定,建议2G网络设置NAT(说明及其示意图...
2020-06-19 12:02:47
280
原创 GitHub开源项目如何在本地搭建、运行?——Eladmin实战
一、下载源码,该项目分为后端前端:后端:https://github.com/elunez/eladmin同理,前端:https://github.com/elunez/eladmin-web,也可在国内码云gitee下载:https://gitee.com/elunez/eladmin/repository/archive/master.zip二、搭建后台环境搭建redis:下载Windows64版本,Redis-x64-3.2.100双击redis-server.exe三、前台环境
2020-06-10 12:41:37
3317
2
原创 springcloud Alibaba学习之路(4)——RabbitMQ与springboot整合
一、erlang安装,直接按照提示下一步,这里选的是最新的erl-23.0二、rabbitmq安装,下载rabbitmq-server-3.7.9,直接下一步安装在sbin目录下,安装配置界面:启动:访问http://localhost:15672/,界面正常展示,用guest正常登陆,安装完成上一张原理图:三、建立项目,配置pom,加入smqp依赖包<dependency> <groupId>org.springfr
2020-06-09 16:57:25
1067
原创 SpringCloud——nacos安装使用
一、从官网下载nacos安装包,解压后,进入bin目录,点击startup.cmd启动。启动成功,如下图所示:访问nacos服务地址:http://localhost:8848/nacos二、服务注册nacos1、配置pom,添加nacos依赖<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-
2020-06-04 16:52:10
1102
原创 springcloud Alibaba学习之路(4)——配置文件踩过的坑
springcloud中yml配置中,需要注意以下三类问题:一、空格每个关键词后需要加个空格,再写value,否则报错二、对齐yml里面对齐有层级的关系,如:把下一层级的顶格放上去,则会默认为与上层级的level同级,无法找到该配置值。三、正确书写关键词com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connectRequest
2020-05-29 12:51:47
346
原创 springcloud Alibaba学习之路(4)——consul入门
一、安装consul,到官网下载windows版本,双击exe文件安装查看版本:consul --version开发模式启动consul:consul agent -devconsul默认端口为8500,启动后前台首页访问:http://localhost:8500二、创建微服务配置yml:server: port: 8004spring: application: name: consul-provicer-payment cloud: c
2020-05-26 18:03:11
399
原创 springcloud Alibaba学习之路(4)——Eureka集群搭建
eureka集群一、eureka server服务集群建立多个eureka服务,修改yml文件server: port: 7001eureka: instance: hostname: eureka7001.com client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://eureka7002.com:7002/
2020-05-26 13:27:48
288
空空如也
安卓main.xml这句代码什么问题?
2015-09-29
安卓的string.xml添加属性为什么是这样的界面
2015-09-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人