能力说明:
精通JVM运行机制,包括类生命、内存模型、垃圾回收及JVM常见参数;能够熟练使用Runnable接口创建线程和使用ExecutorService并发执行任务、识别潜在的死锁线程问题;能够使用Synchronized关键字和atomic包控制线程的执行顺序,使用并行Fork/Join框架;能过开发使用原始版本函数式接口的代码。
暂时未有相关云产品技术能力~
管住嘴,迈开腿。一个努力接受现在的自己的程序员。
多线程固然可以提升系统的吞吐量,也可以最大化利用系统资源,提升相应速度。但同时也提高了编程的复杂性,也提升了程序调试的门槛。今天就来汇总一些常见的并发编程中的问题。
Future 模式是多线程开发中非常常见的一种设计模式,它的核心思想是异步调用。当我们需要调用一个函数方法时,如果这个函数执行得很慢,那么我们就要进行等待。但有时候,我们可能并不急着要结果。因此,我们可以让被调者立即返回,让它在后台慢慢处理这个请求。对于调用者来说,则可以先处理一些其他任务,在真正需要数据的场合再去尝试获得需要的数据。
JUC包中包含了三个非常实用的工具类:CountDownLatch(倒计数器),CyclicBarrier(循环栅栏),Semaphore(信号量)。
学习JUC,就不得不提生产者消费者。生产者消费者模型是一种经典的多线程模型,用于解决生产者和消费者之间的数据交换问题。在生产者消费者模型中,生产者生产数据放入共享的缓冲区中,消费者从缓冲区中取出数据进行消费。在这个过程中,生产者和消费者之间需要保持同步,以避免数据出现错误或重复。今天我们就来说说生产者消费者模型,以及JUC中如何解决该模型的同步问题。
java.util.concurrent.locks为锁定和等待条件提供一个框架的接口和类,说白了就是锁所在的包。
前段时间,有朋友跟我说,能否写一些关于JUC的教程文章。本来呢,JUC也有在我的专栏计划之内,只是一直都还没空轮到他,那么既然有这样的一个契机,那就把JUC计划提前吧。那么今天就重点来初步认识一下什么是JUC,以及一些基本的JUC相关基础知识。
如今AI智能如火如荼,如果不会点ChatGPT总感觉有点落后了。最近刚好重新复习了一遍Docker,这里尝试通过ChatGPT来生成一篇关于Docker文章。来看效果。
程序员经常听到“并发锁”这个名词,而且实际项目中也确实避免不了要加锁。那么什么是锁?锁的是什么?今天文章从8个有意思的案例,彻底弄清这两个问题。
无聊小知识.03 wait(),notify()虚假唤醒
HTML编写圣诞树代码
事务是访问并可能更新数据库中各种数据项的一个程序执行单元,这个操作单元要么全部执行成功,要么全部执行失败。同时也是恢复和并发控制的基本单位。
我们在进行NIO编程时,通常会使用缓冲区进行消息的通信(ByteBuffer),而缓冲区的大小是固定的。那么除非你进行自动扩容(Netty就是这么处理的),否则的话,当你的消息存进该缓冲区就会存在消息边界的问题,典型的边界问题就是黏包和半包现象。
面试官:“看过Spring源码吧,简单说说Spring如何解决循环依赖问题?” 大神仙:“Spring利用到了三级缓存来解决循环依赖问题”。 面试官:“三级缓存是怎么处理的?为什么一定得是三级缓存?三级缓存别是对应存储的是什么?” 大神仙:“......”
面试官:“看过Spring源码吧,简单说说Spring中Bean的生命周期”
面试官:“看过Spring源码吧,简单说说Spring中BeanFactory和FactoryBean的区别是什么?”
前面介绍了JVM相关的内存和线程相关的技术。对于JVM也算有了一个比较系统、完整的理论基础。理论总是作为指导实践的工具,但是从理论到实践,总会遇到一些虚拟机相关问题,故障。所以还需要学习一些常用的JVM排障工具,和一些常见的调优手段。
该篇内容主要介绍JVM如何实现多线程,多线程间由于共享和竞争数据而导致的一系列问题以及解决方案。
从事Java开发工作的都知道,Java程序提交到JVM运行时,需要编译成Class文件,才能被JVM加载运行。那么这些Class文件进入到虚拟机后会发生什么?以及Class是如何被加载的?这些都是本文要讲解的部分。
项目有两种角色需要不同的登录权限,将redis做为用户登录信息缓存数据库。码一个方法,希望能够根据传入不用用户实体类型来获取相应的数据。用户实体为:SessionEntity<User1>、SessionEntity<User2>。json使用FastJson。
springmvc+redis实现简单消息队列
java线上项目排查,Arthas简单上手
springboot集成swagger2出现404解决方案汇总
Vue-cli打包线上Nginx访问,css样式无效解决
应用层也是需要做限流操作的。这里简单结合Aop+redis+lua来实现。注:如果是需要接入层先流的话,建议还是要使用nginx自带的连接数限流模块和请求限流模块。
《JVM学习.01 内存模型》篇讲述了JVM的内存布局,其中每个区域是作用,以及创建实例对象的时候内存区域的工作流程。上文还讲到了关于对象存货后,会被回收清理的过程。今天这里就着重讲一下对象实例是如何被清理回收的,以及清理回收的几种算法。
以Centos7为例。由于系统是新购买的,所以这里(未使用docker)进行了ssh端口修改,防火墙配置,磁盘挂载,创建用户,JDK,Mysql,Redis,Nginx等安装。
Springboot项目中使用Lombok,实体采用@Data注解。运行过程中报Caused by: java.lang.StackOverflowError。
Centos基础环境搭建--安装docker
Centos基础环境--docker安装mysql8.0
Centos基础环境--docker安装Redis
docker安装Mysql8.0的坑之lower_case_table_names
Centos应用“Cannot allocate memory”的解决方案
跨站脚本攻击(Cross Site Scripting),因为跟样式css混淆,所以习惯缩写为xss。通过一些方法注入恶意指令代码到网页,使其加载并执行攻击者恶意的网页程序。
简单理解CAS
简单理解浅克隆和深克隆
vue实现按钮功能级权限控制
Mybatis拦截器做数据范围权限DataScope
MANIFEST.MF 文件存储的实际上是 Bundle 的元数据,可以定义 Bundle 的各种特征,同时能更好的对 Bundle 进行标识同时帮助用户对Bundle进行理解。
ByteBuffer中的flip()、clear()、compact()
windows系统启动java程序限制cpu核心数
对于JAVA程序来说,因为JVM虚拟机的加持,不再需要为每个对象去写配对的delete/free代码。交由虚拟机去管理内存,因而相对来讲不容易出现内存移除和内存泄漏的问题。不过也正是JAVA程序员把内存控制权交给了JVM,一旦出现了内存泄露和溢出的问题,修正起来会比较艰难,如果你不了解虚拟机的化。因而从事JAVA的程序员,多多少少需要了解JVM的内存模型,帮助我们更好应对JAVA内存问题。
重构改善既有代码的设计完结篇,汇总了全部的重构手法。看看哪些手法对你的项目能有所帮助…
软件测试是软件质量保证的关键步骤。越早发现软件中存在的问题,修复问题的成本就越低,软件质量也就越高,软件发布后的维护费用越低。为了能更好的保障软件质量,制定统一的系统自测指南,形成统一的流程达到此目标。
经常使用的idea配置项,搞好这些配置,编码轻松又惬意
Springboot项目配置properties或yaml文件时候,会有很多spring相关的配置提示。这个是如何实现的?如果我们自己的配置属性,能否也自动提示?
许久没更新IDEA插件开发系列了。最近刚好在汇总日常开发中常见的代码“异味”,共享文档复制黏贴略显麻烦,所以想着是否可以搞一个IDEA插件来帮忙收集常见代码,毕竟IDEA作为后端程序员必备的开发工具,显然会方便很多。
闲着没事,动手实现一个简单idea插件。
之前的重构系列中,介绍了书中提到的重构基础,以及识别代码的坏味道。今天继续第三更,讲述那些重构手法(上)。看看哪些手法对你的项目能有所帮助......
之前在《重构·改善既有代码的设计.01》中初步了解了重构的基本前提,基础原则等入门知识。今天我们继续第二更......
近期在看Martin Fowler著作的《重构.改善既有代码的设计》这本书,这是一本经典著作。书本封面誉为软件开发的不朽经典。书中从一个简单的案例揭示了重构的过程以及最佳实践。同时给出了重构原则,何时重构,以及重构的手法。用来改善既有代码的设计,提升软件的可维护性。
个人数据一般都会采用云端备份。 项目数据除了采用云端备份外,一般还会单机热备份,以及异地冷备份。 目前我们ECS服务器都会保留最近一周的服务镜像,数据2天一次本机备份,1周一次异地服务器备份。
GPT-4是GPT系列模型的最新版本,预计将比GPT-3更强大和更智能。GPT-4将使用更先进的算法和更大的数据集进行训练,预计会取得比GPT-3更好的成果。
如果GPT-4能够取得GPT-3的进展,那么它可能会在自然语言生成和理解方面有更出色的表现,甚至能够实现更复杂的任务,如在广泛范围内实现更高水平的语音识别、机器翻译、对话系统和智能搜索等。
但是,也需要注意到随着模型规模的增大,训练和部署GPT-4将会面临更多的技术和伦理挑战。例如,由于GPT-4将需要更多的计算资源和数据,其训练成本和能耗将更高。此外,由于GPT-4的语言生成能力可能会变得更加逼真,因此需要考虑如何应对可能带来的潜在伦理问题,例如信息误导和虚假新闻的扩散等。
总之,GPT-4可能会成为自然语言处理领域的一个里程碑,但也需要在技术和伦理方面进行更全面和深入的讨论和探索。
首先各有优缺点。基于以下考虑: 1. 预算:自建服务器需要投入大量的资金和时间来购买和设置硬件、软件和网络。而托管服务器可能需要支付一个月度或年度费用,但不需要专门购买设备或维护设备,这意味着成本可能更低。
安全性:自建服务器需要您确定和执行所有安全措施,包括安装防病毒软件、防火墙等,这些需要专业的 IT 人员才能有效管理。而托管服务器通常由专业的 IT 团队管理,它们提供额外的安全保障。
可扩展性:自建服务器需要预测并调整硬件和带宽需求。而托管服务器通常提供灵活的扩容选项,因此它们通常更容易适应变化的需求。
人员支持:自建服务器需要耗费更多的时间、人力和技术,而托管服务器由专业的 IT 团队管理,可以提供更多支持,这意味着您的员工可以有更多精力投入到其他工作。
因此,根据业务需求和可行性,选择自建服务器还是托管服务器取决于特定情况。
接触专业人士:与其他开发者和贡献者合作,可以很好地学习合作和沟通技能,并扩展自己的人际关系。
增强经验:参与开源软件项目可以提高经验和知识储备,包括代码开发,测试和错误修正。
有以下几种方法可以保证 OSS 业务的可用性:
使用智能流控制:OSS 提供智能限流功能,可以根据流量状况动态调整限流策略,保障流量控制。
利用 CDN 缓存:OSS 可以与 CDN 配合使用,通过全球分布的 CDN 节点,加速数据的传输和访问,降低服务器负载。
多副本存储:OSS 会将数据自动复制到多个物理节点中,当某些节点出现故障时,可以自动切换到其他节点,确保数据的高可用性和可靠性。
自动扩容:当流量激增时,OSS 可以自动进行扩容,提升服务器的处理能力,保障业务的运行和响应速度。
及时监控:OSS 提供实时监控和报警功能,能够及时掌握业务状况,预警风险,做好应对措施,确保业务的稳定运行。
来自chatGpt的回答: OSS(阿里云对象存储服务)的数据是以对象(Object)为单位组织的。每个对象都有一个唯一的名称(Object Name)和键(Object Key),并且可以存储一定大小的数据(Object Data),最大支持单个对象的大小为48.8TB。同时,每个对象还可以包含一些元数据,例如文件大小、修改时间、ETag和内容类型等。这些元数据可以用来描述对象的特征和信息。
在OSS中,对象按照Bucket进行组织,一个Bucket可以存储多个对象,同时可以对对象进行上传、下载、复制、删除等操作。Bucket也可以设置存储类型,如标准存储、低频访问存储、归档存储等,以满足不同的存储需求。
总之,OSS的数据以对象为单位进行组织,通过Bucket进行管理和存储,并可以附加元数据进行描述和管理。
基础技能:如基本的实现原理是什么,如果扩展,项目中如何使用? 变通能力:例举特殊场景,应用所学技术如何设计,遇到问题如何处理等。 过往项目中,遇到并自己解决掉的最难的技术问题是什么?这里基本就可以知道以往项目所使用技能水平的深浅。 最后问一些学习计划,以及学习心得。考察的是自主学习能力和潜力。
重在参与