笔记
文章平均质量分 87
「已注销」
积极向上
展开
-
程序员必知:时间复杂度与空间复杂度的计算!
前言算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。算法是大厂、外企面试的必备项,也是每个高级程序员的必备技能。针对同一问题,可以有很多种算法来解决,但不同的算法在效率和占用存储空间上的区别可能会很大。那么,通过什么指标来衡量算法的优劣呢?其中,上面提到的效率可以用算法的时间复杂度来描述,而所占用的存储空间可以用算法的空间复杂度来描述。时间复杂度:用于评估执行程序所消耗的时间,可以估算出程序对处理器的使用程度。空间复杂度:用于评估执行程序所占用的内存空间,可以估算出程序对计算机内原创 2021-01-13 17:42:37 · 761 阅读 · 0 评论 -
不用看就能知道的:JAVA 中AQS原理!
前言:在面试中被问到并发知识的时候,大多都会被问到“请你说一下自己对于 AQS 原理的理解”。下面给大家一个示例供大家参考,面试不是背题,大家一定要加入自己的思想,即使加入不了自己的思想也要保证自己能够通俗的讲出来而不是背出来。下面大部分内容其实在 AQS 类注释上已经给出了,不过是英语看着比较吃力一点,感兴趣的话可以看看源码。1. AQS 原理概览AQS 核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那原创 2021-01-07 17:58:04 · 390 阅读 · 3 评论 -
JDBC的链接形式、操作执行以及脚本范文
JDBC-ODBC桥连接形式:利用微软提供的ODBC进行数据库链接,然后利用JDBC访问ODBC的函数库,实现数据操作流程:程序>JDBC>ODBC>数据库;这样操作性能差,但支持度最高,不需要配置任何第三方驱动程序JDBC连接形式:利用不同数据库的生产商提供的JDBC驱动程序进行数据库操作流程:程序>JDBC>数据库;性能很好;JDBC网络连接形式:流程:程序>JDBC连接协议>数据库,实际使用中是最多的;JDBC协议连接:使用特定数据库生产厂商提原创 2021-01-04 11:21:06 · 239 阅读 · 6 评论 -
看完这篇,保证不后悔:分布式系统的CAP理论、CAP如何三选二
引言CAP 理论,相信很多人都听过,它是指:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。为什么要理解 CAP 理论?我能说出很多理由来。如果是在职场上,也许最合适的理由是,当领导给出的任务不靠谱时,我们可以依据 CAP 去否决它。比如,有这么一个任务,给你定了三大目标:既要提升系统的可用性又要保证数据的实时可见还有提升系统的容错能力看到“既要、又要、还要”,是不是想到了原创 2021-01-03 22:15:52 · 421 阅读 · 1 评论 -
大厂面试题之—redis面试专题,值得收藏!
reids面试专题1、什么是 Redis?简述它的优缺点?2、Redis 与 memcached 相比有哪些优势?3、Redis 支持哪几种数据类型?4、Redis 主要消耗什么物理资源?5、Redis 有哪几种数据淘汰策略?6、Redis 官方为什么不提供 Windows 版本?7、一个字符串类型的值能存储最大容量是多少?8、为什么 Redis 需要把所有数据放到内存中?9、Redis 集群方案应该怎么做?都有哪些方案?10、Redis 集群方案什么情况下会导致整个集群不可用?11、MySQL 里有 20原创 2020-12-31 14:09:32 · 146 阅读 · 2 评论 -
震惊!使用spring cache让我的接口性能瞬间提升了
前言笔者之前做商城项目时,做过商城首页的商品分类功能。当时考虑分类是放在商城首页,以后流量大,而且不经常变动,为了提升首页访问速度,我考虑使用缓存。对于java开发而言,首先的缓存当然是redis。优化前系统流程图:我们从图中可以看到,分类功能分为生成分类数据 和 获取分类数据两个流程,生成分类数据流程是有个JOB每隔5分钟执行一次,从mysql中获取分类数据封装成首页需要展示的分类数据结构,然后保存到redis中。获取分类数据流程是商城首页调用分类接口,接口先从redis中获取数据,如果没有获取到再原创 2020-12-28 22:31:45 · 324 阅读 · 0 评论 -
这个可能你不知道!基于NodeJS的高性能分布式游戏日志系统
大纲:前言日志系统架构是怎样的游戏分析有什么内容为什么要自己架一个系统FEN架构 架构图 Fluentd ElasticSearch NodeJS pusher logger analyser 用户界面总结前言最近我司需要做一个统一的游戏日志系统,要求有一定的通用性,能应对公司所有的游戏业务。接下来分享一下这次日志系统的项目经验。日志系统架构是怎样的目前流行的日志系统为ELK,由Beats、Logstash、Elasticsearch、Kibana等组件共同实现,但万变不离其宗,一个原创 2020-12-23 21:38:57 · 352 阅读 · 0 评论 -
连夜让你疯狂!怎么从码农做到架构师?
最近在网上看到这么一篇文章,有好几个地方都发了不知道哪里是原文,但是总体来讲这篇看完对于我来说还是有很多收获的,特意分享出来,大家可以看看如果,欢迎评论区留言探讨工作了挺久,发现有个挺有意思的现象,从程序员、高级程序员,到现在挂着架构师、专家之类的头衔,伴随着技术和能力的提高,想不明白的事情反而越来越多了。这些疑问有些来自于跟小伙伴的交流,有些是我的自问自答,有些到现在也想不清楚,这篇文章就来写一写这些问题。如何更高效的学习?很多新人程序员一开始在学习上找不到方向,但我想在渡过了一段时间的新手期之后原创 2020-12-22 21:22:45 · 189 阅读 · 0 评论 -
一分钟带你起飞!怎么设计安全的对外接口?
前言最近有个项目需要对外提供一个接口,提供公网域名进行访问,而且接口和交易订单有关,所以安全性很重要;这里整理了一下常用的一些安全措施以及具体如何去实现。安全措施个人觉得安全措施大体来看主要在两个方面:一方面就是如何保证数据在传输过程中的安全性;另一个方面是数据已经到达服务器端,服务器端如何识别数据,如何不被攻击;下面具体看看都有哪些安全措施。1.数据加密我们知道数据在传输过程中是很容易被抓包的,如果直接传输比如通过http协议,那么用户传输的数据可以被任何人获取;所以必须对数据加密,原创 2020-12-21 22:01:36 · 164 阅读 · 5 评论 -
关于多线程 / 高并发的致富之路:这个对你有点帮助!
1. stop() 和 suspend() 方法为何不推荐使用?反对使用 stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend() 方法容易发生死锁。调用 suspend() 的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被 “挂起” 的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁原创 2020-12-18 15:43:52 · 112 阅读 · 4 评论 -
亲!你的专属Dubbo启动注册中心,请注意查收!
现在来说一下dubbo注册中心的大致结构,请看下图:Java学习笔记开源框架——dubbo启动之注册中心(Registry)服务注册对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务的数量、类型也不断膨胀;对于服务消费方,它最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。而且,对于服务提供方和服务消费方来说,他们还有可能兼具这两种角色,即既需要提供服务,有需要消费服务。通过将服务统一管理起来,可以有效地优化内部应用对服务发布/使用的流程和管理。服务注册中心可原创 2020-12-17 21:25:16 · 136 阅读 · 6 评论 -
怎样实现一个 RPC 框架?(动态代理与RPC)
前言随着最近关注 cim 项目的人越发增多,导致提的问题以及 Bug 也在增加,在修复问题的过程中难免代码洁癖又上来了。看着一两年前写的东西总是怀疑这真的是出自自己手里嘛?有些地方实在忍不住了便开始了漫漫重构之路。前后对比在开始之前先简单介绍一下 cim 这个项目,下面是它的架构图:简单来说就是一个 IM 即时通讯系统,主要有以下部分组成:IM-server 自然就是服务端了,用于和客户端保持长连接。IM-client 客户端,可以简单认为是类似于的 QQ 这样的客户端工具;当然功能肯定没原创 2020-12-16 22:15:18 · 158 阅读 · 1 评论 -
你学会了吗?深入学习Java|关于List下标越界源码分析
之前一直认为只有数组才会出现ArrayIndexOutOfBoundsException数组下标越界异常,而ArrayList就算为空,ArrayList.get(0)也是会返回null。今天忽然发现,ArrayList也会抛越界异常IndexOutOfBoundsException,细心的同学可能发现这两个异常还是有区别的。ArrayList下标越界异常特意测试了一下数组与ArrayList,并记录下来:1.数组在它的容量范围内,取值不会抛异常,返回null,只有不在容量分为内取值才会抛越界异常A原创 2020-12-14 22:24:43 · 201 阅读 · 0 评论 -
是死是活?怎么判断JVM对象
Spring Boot起步依赖(starter)大大简化了项目构建中的依赖配置,利用了传递依赖解析,把常用库聚合在一起,组成了几个为特定功能而定制的依赖,这些依赖项是使项目快速启动和运行所需的依赖项,如spring-boot-starter-web起步依赖,聚合了spring-boot-starter、spring-boot-starter-json、spring-boot-starter-tomcat、spring-web、spring-webmvc等依赖,使得我们的web项目无需引入多个web相关的依赖原创 2020-12-13 21:55:23 · 110 阅读 · 0 评论 -
怎么操作!Kafka的位移索引和时间戳索引是啥玩意儿?
在Kafka的数据路径下有很多.index和.timeindex后缀文件:.index文件,即Kafka中的位移索引文件.timeindex文件,即时间戳索引文件1 OffsetIndex - 位移索引1.1 定义用于根据位移值快速查找消息所在文件位置。每当Consumer需要从topic分区的某位置开始读消息时,Kafka就会用OffsetIndex直接定位物理文件位置,避免从头读取消息的I/O性能开销。不同索引类型保存不同的 K.V 对。OffsetIndex的K即消息的相对位移,.原创 2020-12-12 15:16:07 · 611 阅读 · 0 评论 -
一秒钟,教你Spring Cloud 开发的分布式系统,遇到爬虫、接口盗刷怎么解决!
kk-anti-reptile是,适用于基于spring-boot开发的分布式系统的反爬虫组件。一、系统要求基于spring-boot开发(spring-boot1.x, spring-boot2.x均可)需要使用redis二、工作流程kk-anti-reptile使用基于Servlet规范的的Filter对请求进行过滤,在其内部通过spring-boot的扩展点机制,实例化一个Filter,并注入到Spring容器FilterRegistrationBean中,通过Spring注入到Servle原创 2020-12-11 21:03:02 · 363 阅读 · 7 评论 -
Spring Boot知多少—Tomcat在Spring Boot中的启动方法是?
Spring Boot一个非常突出的优点就是不需要我们额外再部署Servlet容器,它内置了多种容器的支持。我们可以通过配置来指定我们需要的容器。本文以我们平时最常使用的容器Tomcat为列来介绍以下两个知识点:Spring Boot是怎么整合启动Tomcat容器的;在Spring Boot中,怎么进行Tomcat的深度配置。Spring Boot整合启动Tomcat的流程对于看源代码,每个人都有自己的方法。我自己在看源代码的时候喜欢结合IDEA的Debug功能一起看。比如说现在我们要研究Sp原创 2020-12-11 19:53:09 · 104 阅读 · 1 评论 -
拥有武功秘籍,才能过五关斩六将!50道Redis面试题,带你解答疑惑!
1、什么是 Redis?Redis 本质上是一个 Key-Value 类型的内存数据库,很像 memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘上进行保存。因为是纯 内存操作,Redis的性能非常出色,每秒可以处理超过 10 万次读写操作,是已知性能最快 的 Key-Value DB。 Redis的出色之处不仅仅是性能,Redis 最大的魅力是支持保存多种数据结 构,此外单个 value 的最大限制是 1GB,不像 memcached只能保原创 2020-12-10 20:08:59 · 222 阅读 · 1 评论 -
理解不够,还是不够专业?程序员与架构师之间的联系
一 、什么是架构师?曾经有这么个段子:甲:我已经应聘到一家中型软件公司了,今天上班的时候,全公司的人都来欢迎我。乙:羡慕ing,都什么人来了?甲:CEO、COO、CTO、All of 程序员,还有会计、司机都来了。乙:哇,他们太重视你了,人才啊,这么多人迎接你!甲:没有啊,就一个人!乙:靠,#%¥$%…很多的创业公司,一人身兼数职的情形还是很常见的。至少,我是经历过的,一个人包办了所有的开发过程,连测试我都做了,绝对的一条龙,但是经常踩钢丝、骑独轮车总会有失足的时候,结果有一次,从我手里发出原创 2020-12-10 17:08:43 · 220 阅读 · 0 评论 -
想要深入学习kafka,不掌握Scala语言是不行的!
书是人类进步的阶梯,多读书,多进步!部分内容感兴趣的话记得点击这里哦!原创 2020-12-09 20:17:07 · 181 阅读 · 5 评论 -
走过路过,不容错过!Java高阶面试题(附赠答案)
只有爱学习下能提升自己想要获取更多面试试题点击这里获取原创 2020-12-09 15:53:14 · 110 阅读 · 3 评论 -
教你一招!如何通过Java面试(Spring篇)
1.Spring 提供了对IOC 良好支持,IOC 是一种编程思想,是一种架构艺术,利用这种思想可以很好地实现模块之间的解耦。IOC 也称为DI(Depency Injection),什么叫依赖注入呢?答:有如下代码,在Spring如何完成依赖注入功能:Class Programmer{Computer computer = null;public void code(){//Computer computer = new IBMComputer();//Computer computer原创 2020-12-08 14:47:59 · 1023 阅读 · 9 评论 -
Hystrix学习笔记
前言本文主要介绍Hystrix的基本功能,原理。Hystrix协调分布式系统中各个服务高可用的框架,SpringCloud体系重要的一员。Hystrix主要解决了服务雪崩问题、服务监控问题等。Hystrix功能介绍资源隔离与限流作用主要在于预防依赖服务崩溃影响到自己服务资源被耗光,使用隔离的方式限制调用依赖服务所能使用的最大线程资源。如果一个服务崩溃,不控制好资源隔离的话,会引发服务雪崩,众多上游服务集体崩溃。另外在并发量很大的情况下,也可以降低对依赖服务请求的流量,避免依赖服务过度负载。原理原创 2020-12-06 21:21:26 · 130 阅读 · 0 评论 -
Redis | Redis 哈希相关命令
Redis 支持多种数据结构,比如 字符串、列表、集合、有序集合 和 哈希 等数据结构。本次我整理了关于 哈希 相关的命令,也就是关于 Hashes 相关的命令,如下图。上图中用红色圈中的部分,就是关于 哈希 相关的命令。如果想要在 Redis 中查看相关的命令可以使用 help 命令来进行查看,命令如下。127.0.0.1:6379> help @hash在按下回车后,可以看到 Hashes 相关命令的说明,如下图。图中就是关于 Hashes 相关的部分命令。常用 Hashes 相原创 2020-12-05 22:11:21 · 162 阅读 · 0 评论 -
来看看常用的三种架构模式吧!
在做架构设计的时候,一般会采用一些架构模式,便于设计和以后需求变更时修改代码。如果设计模式选择得不正确那么很容易造成架构的混乱,代码也会变成怪物。分层模式分层模式分层模式是最常见的模式。我们熟悉的MVC模式就是分层模式的一种。在进行架构设计的时候,如果一筹莫展,那么分层模式是很好的一种尝试。在分层模式中,业务水平切分,分解到不同的层次中,每个层次要求仅相邻的两个层次之间可以进行交互,不可以跨层次进行调用。一般架构会被分成3到5层,具体视架构规模而定,大规模的架构可能会超过5层。在分层模式中,可以很好原创 2020-12-04 16:19:38 · 174 阅读 · 0 评论 -
优先队列了解否?
PriorityQueue PriorityQueue是一个具有优先级的无界队列,其内部基于一个优先级堆实现的。优先级队列内部的元素之间的优先级是按照元素实现的Comparable的自然顺序排序的,或者是使用构造方法中传入的Comparator接口的实现类完成的。优先队列中不允许存放null元素,如果没有传入Comparator接口的实现类,那么内部的元素必须要实现Comparable接口,否则将抛出ClassCastException,因为元素在比较时转化为Comparable进行比较。 优先队列原创 2020-12-03 20:24:38 · 164 阅读 · 0 评论 -
从菜鸟走向牛逼-java开发程序员的职业规划
每个程序员、或者说每个工作者都应该有自己的职业规划,如果看到这里的朋友没有自己的职业规划,希望你可以思考一下自己的将来。Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。Java程序员你是否有了明确的职业发展规划?初级程序员:做一些静态的界面;程序员:做一些增删改查的小模块;中级程序员:做逻辑较复杂的模块;高级程序员:做核心原创 2020-12-02 21:19:25 · 224 阅读 · 0 评论 -
为了java不断学习小白必备知识-Redis运行机制与单线程
前言当研究一个新组件之前我一般都会问几个问题,然后带着问题去研究。当然,Redis is what,where to use,when to use,how to use这wwwh问题我默认你已经知道答案了。我要问的问题是:总听人说Redis是单线程的,是这么回事吗?为什么?Redis内部都用到了哪些数据结构?存储这些数据结构的底层空间是怎么划分的?Redis利用内存,它的垃圾回收机制是什么样的?Redis支持事务和持久化吗?如果支持那么是怎么实现的?Redis的主从,哨兵系统,集群如果有节原创 2020-12-02 18:01:15 · 141 阅读 · 1 评论 -
经典jvm面试题
JVM(Java 虚拟机)算是面试必问的问题的了,而但凡问 JVM 一定会问的第一个问题就是:讲一讲 JVM 的组成?那本文就注重讲一下 JVM 的组成。首先来说 JVM 的组成分为,整体组成部分和运行时数据区组成部分,一般开发者关注的和面试官问的都是后者,但本文会详细讲解以上两个组成部分。一、JVM 整体组成JVM 整体组成可分为以下四个部分:类加载器(ClassLoader)运行时数据区(Runtime Data Area)执行引擎(Execution Engine)本地库接口(Nati原创 2020-12-01 22:10:47 · 103 阅读 · 0 评论 -
高级java程序员是如何养成的?
1. 引言搞Java的弟兄们肯定都想要达到更高的境界,用更少的代码解决更多的问题,用更清晰的结构为可能的传承和维护做准备。想想当初自己摸着石头过河,也看过不少人介绍的学习路线,十多年走过来多少还是有些收获。现通过自身经历总结一篇文章,供弟兄们参考。2. 用好正在用的框架在已经加入的团队中,和大家协作使用团队已选好的框架。不管框架优劣与否,特点如何,选择了它必然有一定的道理。并且能够在业界经久流行的框架也一定有它的优秀之处。使用框架第一步是熟悉,可能通过复制和修改前人的代码来实现新的功能或修改已有功原创 2020-11-30 22:28:53 · 257 阅读 · 7 评论 -
怎么从Java初级程序员“进化”成Java架构师?
前言怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到的问题。希望这篇文章会是你看到过的最全面最权威的回答。一、编程基础不管是C还是C++,不管是Java还是PHP,想成为一名合格的程序员,基本的数据结构和算法基础还是要有的。下面几篇文章从思想到实现,为你梳理出常用的数据结构和经典算法。1-1 常用数据结构数组、链表、堆、栈、队列、Hash表、二叉树等1-2原创 2020-11-28 17:25:35 · 225 阅读 · 0 评论