- 博客(904)
- 资源 (39)
- 收藏
- 关注
转载 一位资深程序员大牛给予Java学习者的学习路线建议
Java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍。这一部分的内容,同样适用于一些希望转行到Java的同学。 如果你是在校学生,务必要在学好基础(比如计算机系统、算法、编译原理等等)的前提下,再考虑去进行下
2017-02-17 00:27:00 1101 2
原创 某公司高级工程师面试题总结
面试官早上好!我是XXX,毕业于XX大学计算机科学与技术专业,20XX年参加工作,到现在已有7年的在职软件开发经验,计算机基础扎实,熟悉软件开发流程及软件架构开发的各种框架技术。学习能力强,能快速上手要投入研发使用的新技术,能熟练使用调试工具解决多数软件开发过程中遇到的问题,及线上生产问题的处理和系统的性能优化,具备从0到1实现系统的能力。最近一份工作是在XXXX公司,担任高级开发工程师一职,主要负责XXXX系统的整体架构设计,XX核心模块的开发。。。JDK1.7中底层是由数组+链表实现;
2024-08-21 11:58:41 781
原创 某科技高级工程师面试总结
你好,面试官,我叫XXX,20xx年7月毕业于XX大学XX专业,20xx年xx月参加工作,目前有6年工作经验。上家公司就职于XX公司,担任XX岗位,负责XX项目,在项目中负责xx,xx,xx等核心模块的开发工作,模块主要用到XX技术,项目中取得的XX业绩,平时生活爱好等。二面也是技术面试,可把我整懵了,领导面试的有些问题跟一面有些重叠就不赘述了。二面主要是围绕简历上的项目,负责的工作任务及用到的技术展开的,所以如果项目中对哪些模块不太了解的,或某项技术用的不是很熟悉的,千万别写进去,不然真会给自己埋雷。
2023-12-08 14:41:37 941
原创 XDocReport文书生成总结
最近弄一个业务需要搞很多的word文档导出,供前端下载。之前的实现方式一般是先把word转成XML格式,然后赋值变量,这种方式虽然可行,但是遇到那种长篇且变量又多的文档,就很让人头大,密密麻麻的一堆代码,看着十分繁乱,不好修改模板。于是在技术选型上找到了XDocReport,该技术可以直接使用word文档作为模板,使用Velocity或Freemarker语法来设置要替换的变量,从而实现复杂的文档导出。
2023-08-18 16:20:19 987 4
原创 手写ThreadPoolExecutor线程池
*** 自定义阻塞队列*//** 1.任务队列 *//** 2.锁 *//** 3.生产者条件 *//** 4.消费者条件 *//** 5.队列容量 *//*** 构造方法,指定队列的最大容量*//*** 判断阻塞队列是否已满* @return*//*** 获取队列的容量* @return*/try{}finally {/*** 阻塞获取队列中的任务,获取不到元素会一直阻塞* @return*/try {
2023-06-13 10:51:35 257
原创 Cglib动态代理实现及原理
通过字节码技术创建这个类的子类,实现动态代理/*** 被代理类*/System.out.println("被代理的方法执行了");}}该类实现了创建子类的方法与代理的方法。//设置父类方法通过入参即父类的字节码,扩展父类的class来创建代理对象。intercept()方法拦截所有目标类方法的调用,obj表示目标类的实例,method为目标类方法的反射对象,args为方法的动态入参,methodProxy为代理类实例。通过代理类调用父类中的方法。
2023-01-04 16:19:05 863 1
原创 JDK动态代理实现与原理分析
1.代理类是自己手工实现的,自己创建一个java类,表示代理类2.同时也要实现你所要代理的目标3.静态代理的优缺点优点:1)实现简单2)容易理解缺点:当你的项目中,目标类的代理类很多的时候,有一下的缺点1)当目标类增加了,代理类可能也需要成倍的增加2)当你的接口中功能在增加了,或者修改了,会影响众多的实现类,厂家类,代理都需要修改,影响比较多1) 动态代理是指代理类对象在程序运行时由JVM根据反射机制动态生成的。动态代理不需要定义代理类的,java源文件。
2022-12-23 16:40:44 1399
原创 Elasticsearch 带中文分词的全文检索(分页+高亮返回)
Full text queries 全文搜索主要有以下几种类型:DSL 查询语句:1.2 多字段查询(multi_match query)可以用来对多个字段的版本进行匹配查询DSL查询语句:1.3 常用术语查询(common_terms query)可以对一些比较专业的偏门词语进行的更加专业的查询DSL查询语句:1.4 查询语句查询(query_string query) 与lucene查询语句的语法结合的更加紧密的一种查询,允许你在一个查
2022-11-21 11:37:07 2344
原创 Elasticsearch 基于地理位置的搜索查询
ES为用户提供了基于地理位置的搜索功能。它主要支持两种类型的地理查询:一种是地理点(geo_point),即经纬度查询,另一种是地理形状查询(geo_shape),即支持点,线,圆形和多边形等查询。从实用性来说,地理点(即geo_point)数据类型的使用更多一些,对于geo_point字段类型的查询方式有三种,分别为geo_distance查询(圆形区域查询),geo_bounding_box查询(矩形区域查询)和geo_polygon查询(多边形区域查询)。
2022-09-21 11:01:33 2750
原创 记一次线上故障--HashMap在多线程条件下运行造成CPU 100%
问题就出现在了while (e != null),从上面的代码看来,每一个线程进来都先执行dataMap = new HashMap();这个时候dataMap是空的,所以在执行下面的操作的时候进入了某一个不可以随意更改状态的代码中,再加上高并发,一直被new HashMap(),while一直被执行,变成了死循环。cpu就瞬间飙升到100%,一直持续到请求数降低的时候。重构问题代码,多线程并发扩容时就会出现环形引用的问题,从.........
2022-06-23 15:40:59 845
原创 Hbase geohash实现地理轨迹的空间搜索实现思路设计
需求背景:现有用户的出行轨迹都存储在分布式的hbase库中,管理员需要从地图上框选一个矩形或多边形区域,找出该区域和指定时间内活动的用户及其出行轨迹,进行分析。经过调研,了解到关于地理索引有一套比较通用的GeohHash算法,于是使用geohash实现该空间搜索的逻辑。GeoHash是将二维的经纬度转换成字符串,每一个字符串代表了某一矩形区域。也就是说,这个矩形区域内所有的点(经纬度坐标)都共享相同的GeoHash字符串,比如说我在七天酒店,我朋友在附近的世纪百货,我们的经纬度点会得到相同的GeoHash.
2022-04-26 10:57:40 1146
原创 线上 java.lang.OutOfMemoryError: unable to create new native thread问题解决思路
问题来源:kafka多个topic的消费数据使用到了线程池的监听消费,以异步处理,提高效率。但是生产上代码运行一段时间后会报java.lang.OutOfMemoryError: unable to create new native thread 程序宕掉,是一个生产致命错误。线程池配置如下: private static ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("thread-pool.
2022-03-21 16:31:00 7025
原创 SpringBoot + ShardingSphere实现读写分离,分库分表
分布式项目在通过一定的服务拆分,项目运行一段时间以后,随着用户和使用资源的不断增大,数据库的性能也会面临瓶颈。单表数据量过大,超高并发的读写引发的锁问题,导致系统运行加载越来越慢,不时出现系统假死的现象,数据库的优化已将近极限,几乎没有空间,这时就需要考虑读写分离,分库分表(这里主要是水平的分库分表)的策略,来减少对同一数据库的访问的压力。一.操作的工程目录二.读写分离application.ymlspring: shardingsphere: data.
2021-11-26 16:20:44 3880
原创 SpringBoot 的多数据源配置与动态切换
在使用SpringBoot开发项目时,随着业务量的扩大,我们通常会进行数据库拆分或引入其他数据库,因此需要配置多个数据源,并能实现其动态切换。一.工程目录截图二.相关代码2.1多数据源application.yml配置文件# 数据源配置spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Dr...
2021-11-24 17:40:49 1596 1
原创 搭建Prometheus+Grafana统一监控平台
在分布式项目的运维当中,经常会遇到服务器负载过高的问题,由于没有监控,一直没发现,直到业务方反馈系统操作速度慢,才发现问题,这样显得十分被动,于是打算搭建一套用于监控系统服务器的统一监控平台。一.实现的监控目标二.搭建所需的安装包及配置文件三.Prometheus服务端安装以下操作皆在监控主机(172.10.0.1)上执行3.1关闭防火墙# systemctl stop firewalld# systemctl disable firewalld3.2安装 ...
2021-11-19 14:26:28 1329
原创 玩转docker+nginx : 局域网制作宝塔面板docker镜像,并导出使用
一.宝塔面板镜像的制作(本地VM虚拟机操作)1.重启docker服务systemctl daemon-reload;systemctl restart docker;2.拉取一个centos镜像作为基础镜像docker pull centos3.创建docker容器docker images;docker run -dit -it -p 8888:8888 --name=baota-centos 5d0da3dc9764(docker images命令查出的cento
2021-11-05 11:40:56 4210
原创 GitLab + Jenkins实现一键分布式项目自动化部署
、、分布式项目的打包部署增加了运维人员的工作量,而且工作是机械重复,极无技术含量的,说白就是打更。我们要把复杂的事情简单化,简单的事情标准化,标准的事情流程化,所以打包部署成了我们流程化里头的流水线。该项目是一个有5台+以上的服务器分流部署的分布式项目,针对该项目的自动化部署所作的持续集成拓扑图如下所示(截图有限,只画了3台,意思到位即可,IP为虚拟IP):一.jenkins需要装的插件Git,Pipeline,Publish Over SSH等搜索安装即可二.配...
2021-10-19 11:46:59 1579
原创 Linux自定义shell脚本一键启停微服务jar包
Java项目在Linux系统中的部署通常是以tomcat等容器化的方式部署,或者jar包的形式直接运行。在自动化部署畅行的今天,仍然会有不少的公司采用手动部署的方式部署 jar 包。而微服务打包形成的诸多jar,和上线前后频繁的诸多升级部署操作,让负责项目的开发运维人员叫苦不迭,因此需要一套便捷的部署脚本,实现便捷的一键启停等操作。1.常用的部署命令:ps -ef |grep 服务名kill -9 PIDnohup java -jar 服务名 &tail -f nohup.out.
2021-10-18 14:37:59 1175 2
原创 MySQL分库分表总结
一.何为分库分表分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成 ,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。分库分表包括分库和分表两个部分,在生产中通常包括:垂直分库、水平分库、垂直分表、水平分表四种方式。(大库拆成小库,大表拆成小表)二.根据病状,对症下药2.1 问题一: 磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度解决办法: 分库和垂直分表
2021-09-29 14:33:25 400
原创 索引优化驱动SQL优化总结
一.表字段建索引的优缺点优势:1.提高数据检索的效率,降低数据库的IO成本。2. 通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗。劣势:1.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息。2.实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占用空间的。
2021-09-22 10:07:16 176
原创 Explain性能分析总结
一.概念1.1 使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句,从而知道 MySQL 是如何处理你的 SQL 语句的。分析你的查询语句或是表结构的性能瓶颈。1.2 用法: Explain+SQL 语句,例如:EXPLAIN SELECT t2.dept_id FROM sys_role_dept t1, sys_dept t2 WHERE role_id IN ( SELECT role_id FROM sys_user_role WHERE user_id = 1 )
2021-09-18 11:21:14 169
原创 如何使用多线程优化多查询复杂业务接口,并保证线程安全
介绍:如果一个接口中需要进行多步,而这些业务操作又是各自独立的,传统的依据代码顺序同步执行又比较耗时,传统的优化的空间又比较少,这时就可以考虑使用多线程的方式优化接口,让同步变异步,接口业务操作并行处理,极大提升接口的性能。在线程安全方面,我们可以使用CountDownLatch同步工具类来进行控制。 CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,它表示所有的线程已经完成了任务,然后在闭锁上等待
2021-09-07 10:58:43 1055 1
原创 大屏的接口开发二: 基于SpringBoot的netty数据推送
该文章是继个人大屏接口方法系列:大屏的接口开发一: 基于SpringBoot的webSocket数据推送 之后的第二篇文章,也是实现大屏项目的服务端主动推送数据到前端的一个服务工具类,其相关的业务流程也是跟第一版有很大的相似之处1. SpringBoot整合Netty(pom.xml引入相关的jar包)<dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artif
2021-08-31 15:36:35 705
原创 大屏的接口开发一: 基于SpringBoot的webSocket数据推送
**在实际的项目开发中,需要用到大屏的展示,大屏的项目对于数据的实时性要求比较高,因此不能用http的接口,需要长连接的数据推送,大屏的免手动刷新,实现数据的同步变动展示。这里主要使用SpringBoot集成webSocket实现数据的全局发送,指定用户发送,值得注意的是这里使用了Spring自带的握手拦截器获取前端传来的userId,与webSocket的会话进行绑定,用于长连接的身份区分。如下是设计思路和代码实现。**1. SpringBoot整合WebSocket(pom.xml引入相关的jar.
2021-08-31 14:26:17 1979 2
原创 浩鲸科技高级工程师面试总结
你好,面试官,我是XXX,于xxxx参加工作,上家公司就职于xxxx,做过xxxx项目,会xxx技术,最擅长xxx,平时生活爱好。。。首先介绍了SpringCloud微服务框架的各大组件,及其作用。SpringCloud的熔断机制主要是Hystrix框架来实现的,主要是在使用Feign客户端调用其他服务接口时,如果该服务调用超时,异常或不可用,Hystrix就会fallback切断与服务的连接。二面进行了大约30分钟,自我感觉还很良好,毕竟都是介绍自己做的东西,表达很顺畅流利。
2020-06-23 16:37:17 438
原创 Linux服务器搭建VUE + Nginx部署环境
一.VUE相关环境搭建1.去Node.js官网选择合适版本的Node.js,下载安装wget https://nodejs.org/dist/v12.18.0/node-v12.18.0-linux-x64.tar.xz解压缩至指定文件位置xz -d node-v14.3.0-linux-x64.tar.xztar -xvf node-v14.3.0-linux-x64.tar重命名文件夹mv node-v14.3.0-linux-x64 nodeJS-V14.3.0
2020-06-03 14:42:06 1423
原创 接口联调踩坑记
一个集团内部系统间为了避免数据孤岛的情况出现,总是少不了数据的同步,因此系统间的接口就必不可少。但是开发出的接口在对接的时候总是会出现各种各样奇葩的问题。这里记录几种日常接口对接所踩的坑(注意:这里的接口联调是后端传后端,并非所谓的前后端对接)1.所调接口网络不通有些公司使用的是集团内部网络,经常会出现服务器之间网络不通的情况,Linux服务器排查思路测试对接的目标接口网络#telnet命令telnet 域名/IP 端口如: telnet xxx.xxx.com 443#...
2020-05-30 21:01:15 1288
原创 一些开发常用的js语句总结
在一些原生的jsp开发中,总会使用到一些js的语法。作为Java工程师,如果是在这种前后端不分离的开发模式下做开发,熟练原生的js语法是必备的工作能力。这里总结下,在jsp开发中最常用的一些js语句。1.$(function() {})函数使用示例:$(function(){ getList(); //获取页面列表}); 该函数是$(document).ready(function()的简写$(document).ready(function () { ...
2020-05-27 15:34:59 427
原创 企业微信支付的接口开发总结
涉及微信方面的开发,总是避免不了做微信支付。网上的总结繁杂而没有重点,看了摸不清思路,官方文档简单解决不了实际业务问题。于是根据业务需要写了一个微信支付接口,并做分享。...
2020-05-19 17:24:48 1095
原创 给tomcat项目访问工程以外的静态文件资源
有这样一个需求:一个传统的项目,文件存储文件都是存储在Oracle数据库中或电脑指定硬盘,随着时间和用户翻雪球似的量变,Oracle文件表因为太大,查询性能十分差;而存储在硬盘的文件内存也即将满了,电脑硬盘扩容是个大问题,如果要迁移文件吧,之前的文件就不能按照之前的路径去访问查看了。改造工程迫在眉睫,托尼老师打算这样来:1.为了方便扩容和数据迁移,存储介质改成共享磁盘,就挂在在项目的服务器,把...
2020-04-30 14:05:17 586
原创 记一次生产Dubbo线程池耗尽的问题排查处理
运维的某一系统,技术架构采用Dubbo + SSM(Spring + SpringMVC + Mybatis)开发,项目拆分成N个大模块,分布式部署在N台服务器上,注册中心采用zookeeper。该系统在交付使用一段时间后,随着用户量和请求数的不断增加,出现了系统性能的瓶颈。因此需要系统治疗师给它压脉诊断,找出病端,提升性能。系统在交付之初是初始化配置的,并没有做针对性的优化。这不...
2020-04-10 15:42:27 2565 1
原创 记一次Nginx的配置优化运维
运维的某一系统,用户达200w+,峰值浏览量500w+/每小时,系统技术架构是以Nginx为负载均衡分流的五台32G内存的Centos 7服务器。在一次节日大促活动中,该用户端(微信)告警如下:Appid: wx42d69bbdca973c57昵称: XX商城时间: 2019-05-11 08:55:02内容: 微信服务器向公众号推送消息或事件后,开发者5秒内没有返回...
2020-03-11 20:27:07 600
原创 SpringAop + @annotation注解做切入点实现APP接口的权限拦截验证
前段时间分享了文章使用Java泛型,反射,注解等技术开发高复用mini版MyBatis持久层框架,使用到了自定义注解,自定义注解是个好东西,把自定义注解放在类上边,通过java的反射机制我们可以获得该类下边所有的字段,方法,函数等。同样的方式,如果自定义一个注解,使用它放在指定的类方法(一般是程序的service层)上边,然后通过SpringAop建一个切入点,在切面的编程中做相应的...
2020-03-06 14:32:37 1277
原创 关于继承RuntimeException类来自定义异常在接口开发中的使用总结
在接口开发的过程中,为了程序的健壮性,经常要考虑到代码执行的异常,并给前端一个友好的展示,这里就用到的自定义异常,继承RuntimeException类。那么这个RuntimeException和普通的Exception有什么区别呢。Exception: 非运行时异常,在项目运行之前必须处理掉。一般由程序员try catch 掉。 RuntimeException,运行时异常,在...
2019-12-19 15:53:27 3495 2
原创 SpringBoot + Redis实现事件的发布订阅功能
消息队列,消息的发布订阅模式貌似是只有kafka,MQ类中间件才能实现的事情,但是别出新裁的是redis也同样具有这些功能。但是这些消息并没有持久化机制,属于即发即弃模式,也就是说它们不能像MQ中的消息那样保证持久化消息订阅者不会错过任何消息,无论这些消息订阅者是否随时在线。由于本来就是即发即弃的消息模式,所以Redis也不需要专门制定消息的备份和恢复机制。Redis也没有为发布者和...
2019-12-16 20:35:48 1411
原创 Dubbox监控中心的搭建及SpringBoot + Zookeeper + Dubbo整合的微服务治理demo
一.准备工作 1.1 Dubbo源码的下载与编译 下载源码 1.2 Zookeeper 环境搭建,可参考本人博客: Window系统下搭建Zookeeper和Kafka环境 1.2 解压编译,在该目录下执行cmd命令mvn clean package -Dmaven.test.skip=true 1.3 进入E:\dubbox-m...
2019-12-10 17:06:05 333 1
原创 SpringCloud + JWT + Spring-Security实现Restful API在网关层的权限管理和Token管理
在移动开发中,接口的访问经常需要在请求的header中校验token,看看接口是否有访问权限,从而保证移动端功能的安全性。而token是需要在用户登录成功时获取的,成功获取后,每次访问都需要在url的request.header中携带,才能成功请求接口。这层在SpringCloud的网关层进行JWT的token校验,相当于一层身份的认证过滤。而登录认证这里则采用Spring-Securit...
2019-12-06 15:50:17 1596
原创 Kafka搭建系统实时监控平台,到达时间阈值或者数量限制后并实现Redis日批量入库
代码:1.生产者import org.apache.kafka.clients.producer.Callback;import org.apache.kafka.clients.producer.KafkaProducer;import org.apache.kafka.clients.producer.ProducerRecord;import org.apache.kafka...
2019-11-22 14:51:18 766
原创 Windows系统搭建Storm 分布式实时计算开发环境
1.准备工作1.1 下载Storm apache-storm-2.0.0下载1.2 下载安装 zookeeper 步骤详看本人博客 Window系统下搭建Zookeeper和Kafka环境1.3 下载python2. 安装Storm环境2.1 下载解压Storm,默认配置即可,如有需要可修改D:\storm-2.0.0\conf 目录的storm.yaml文件2.2 启动...
2019-10-31 15:06:29 1154 1
原创 SpringBoot + Kafka模拟系统心跳监测告警功能
做一个简单的kafka消息发送订阅功能,使用心跳机制进行监测,监测系统的线上健康状态,通过消息队列给kafka服务端发送健康状态标识值,在系统内实时监听消费,并做相应的业务提醒操作。因为只是介绍kafka的实现原理,心跳监测这里就不详细介绍了,感兴趣的同学可以去学习Netty相关的知识。这里使用SpringBoot Task定时任务 + 时间戳取模 模拟了心跳监测出不同的系统状态给ka...
2019-10-09 15:58:14 1973
SpringBoot2.0整合Elasticsearch6.0使用ElasticsearchRepository接口实践
2019-01-23
SpringCloud微服务项目
2019-01-21
kafka-manager安装包
2018-10-11
Java做客户端对Elasticsearch服务的增删改查及批量修改操作
2018-04-08
使用lucene构建一个简单的搜索引擎
2017-11-25
MyBatis 基于Mapper的增删改查示例(Spring IOC注入)
2017-10-29
Hibernate之原生Native SQL查询
2017-10-21
Hibernate之HQL查询
2017-10-21
在Spring+Hibernate集成环境中使用EhCache缓存
2017-10-18
Spring+Hibernate 一对一映射级联增删改查小例子
2017-10-17
Spring+Hibernate 多对多关联映射---教师与学生表的级联增删改查
2017-10-16
Spring+Hibernate事务管理
2017-10-14
SpringBoot + Redis实现事件的发布订阅功能
2019-12-17
Eclipse搭建Hadoop3.1.0开发环境需要的插件
2019-05-16
Window系统部署配置Hadoop,Spark需要的文件
2019-05-14
SpringBoot+MyBatis+SpringSession+Redis实现session共享及单点登录
2019-03-02
手写SpringIoc的XML实现方式
2019-01-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人