- 博客(28)
- 收藏
- 关注
原创 数据结构与算法
分治,乍一看觉得很高大上,但是它的思想无不在日常生活中体现,比如当你要完成一个很复杂的事情时,你一定会做任务拆解,把任务拆分成你可以做的程度,当这些任务都完成时,那个大的复杂的事情也就做完了。最重要的是后面两点,于是我们在求解递归问题的时候,需要先假设子问题已经解决,用解决好的子问题结果去组合出大问题的答案。而最难的就是将大问题拆分几个小问题的组合,这需要不断的练习,知道几个常见的拆分技巧。小规模问题的解法和大规模问题的解法一致,仅仅只是规模变了,换句话说,规模不影响解法。也就是我们常常说的寻找递推公式。
2024-07-18 20:30:51
154
原创 微服务架构-第三方调用
但是在软件开发中,有一个基本原则,永远不要相信别人的东西,也就是我们提倡的防御性编程,在对接第三方平台也不例外,第三方平台终究是别人的,你没有办法要求第三方平台保证高可用性,所以一般对接第三方平台的时候,我们都会抽象出一个层,比如对接第三方支付平台的时候,我们通常会在我们的系统中抽象出一个单独的模块来负责对这些第三方支付平台的对接功能,这其实是我们最熟悉的分层架构,这种架构设计将关注点分离,将变化隔离,即使后期需求发生改变,我们需要改动的也只是这个模块而已。这是一个对接模块最最基本的功能。
2024-07-13 10:16:46
317
原创 微服务可用性-超时控制
当然你也可以结合时间戳,比如在协议头中记录了调用服务B时的时间戳,然后当服务B接收到的时候,根据自己的时间减去协议头中记录的时间就可以得出传输耗费的时间,但是这个策略多此一举,与其这样,不如直接使用超时时间戳,还是这个例子,服务A调用服务B,当服务A接收到用户的请求时,根据这个业务的超时时间,记录超时时间戳,比如当前时间为9:30:40,这个业务的超时时间为1s,那么超时时间戳为9:30:41,将这个时间戳传递给服务B,服务B在执行业务的时候判断当前时间是否超过了这个时间戳就可以了。根据被调服务响应时间。
2024-07-12 09:55:50
583
原创 微服务可用性-降级
唯一不同的就是,降级会针对整个系统的服务进行等级划分,比如有些服务价值高那么等级就高,当很多很多请求来到这个价值高的服务时,它自身承受不住了,但是奈何它价值高,它有权力让那些价值低的服务让出资源,给它用。这就是我眼中的降级,那你眼中的呢?这是目前主流的降级策略,但是还有一种降级策略比较有意思,不仅服务分个三六九等,就连用户请求也可以分为三六九等,针对某个服务而言,当负载较大的时候,我们可以只处理VIP请求,拒绝普通请求,毕竟白嫖用户肯定比付费用户多。我需要说明的是,无论是降级还是熔断,他们都在尽力的保证。
2024-07-02 09:00:35
341
原创 并发工具包(上)
ReentrantLock 翻译过来叫做可重入锁?那什么叫可重入呢?try {//2try {// 1System.out.println("设置成功");仔细观察,write()方法,在重新赋值的时候,注释1处的代码,当前线程,已经获取了锁,然后在read()函数中,还要再次获取锁,如果是可重入锁,那么就不会阻塞到注释2处,如果是不可重入锁,就会阻塞到注释2处。简而言之,只要我有这个锁资源,其他利用这个锁保护临界区的地方,我都可以访问。大家都知道,
2024-05-10 14:41:22
812
原创 并发编程 理论篇
如果你只是做做简单的CRUD确实是这样的, 因为原本需要你处理的并发问题,交给了框架,交给了中间件,让你可以更加关注业务。先来聊聊线程的生命周期,从代码的声明需要一个线程,到操作系统真正创建完一个线程这段时间被称为初始状态,只要线程创建完毕,它就会进入到可运行状态,等待CPU资源,当线程获取到CPU资源后,就进入运行状态,如果CPU的时间片用完,就会回到可执行状态,如果在执行的过程中,需要IO操作,这个时候线程会进入到休眠状态,当条件满足时,线程又会从休眠状态回到可执行状态,等待CPU资源。
2024-04-28 10:22:37
549
原创 后端开发问题详解
跨域问题是HTTP为了解决用户的隐私问题而产生的,如果我们就是想要跨站点共享资源,可以试试官方的CORS规范,现在主流的框架都有对其的具体实现,不需要我们手动实现。然后解释了SpringBoot处理跨域请求时会遇到的一些问题即自定义拦截器和过滤器的时候。。
2024-03-31 20:53:00
276
原创 Maven&Gradle镜像配置
通常我们开发一个项目,都需要依赖别人的代码库,于是我们就有一个需求,我们需要统一管理这些依赖库,于是就出现了这两个依赖管理工具Maven以及Gradle.但是有许多常用的好用的代码库的远程地址在国外,国内访问会很慢,于是就有很多大公司搭建镜像服务,其实就是克隆一份到自己的服务器中,那么我们可以用大公司的镜像服务来提高访问下载速度。
2024-02-02 11:36:52
436
1
原创 一天一个小知识:KT扩展
拿上面代码举例,如果我要在我的pandaer()函数中调用接收者类型的私有成员,是不可能的,因为底层实现限制了这一点,传递的是一个实实在在的接收者对象,所以所谓的扩展又是语法层面的,底层的实现就是一个静态方法(顶层扩展)这让我不禁想到一句话 理想是丰满的现实是骨感的。中 在真正的String类的源码设计中只保留最核心的逻辑,一些功能性的逻辑用扩展函数来代替了。所以无论是扩展方法还是扩展属性底层的实现都是静态方法(顶层扩展)因为底层的实现并不是真正的去扩展某个类,所以我们定义的扩展函数和扩展属性都。
2022-09-16 19:24:37
565
原创 一天一个小知识-- kt中的object关键字
object的本质:创建类的同时创建对象应用场景:匿名内部类 单例通过内部类单例实现了类方法和类属性。伴生对象的实现 让我们调用方认为是类的方法 而 嵌套object则是内部类的类方法和属性问个问题:为什么嵌套类(静态内部类)单例能实现和类方法和类属性的特性???答案。
2022-09-15 18:09:44
813
原创 Material_Design
Android Material Design今天就来谈谈 android 给我们提供的 Material 库的好用又好看的组件ToolBarToolBar这个是来替代ActionBar的具体的做法很简单:将主题的ActionBar设置为没有然后在需要ToolBar的地方 放在他的布局文件里 在他的创建视图的时候 调用 **setSupportActionBar(binding.toolbar) **这个方法就可以了传入的就是在布局文件里定义的ToolBar看代码
2022-04-17 17:30:38
2265
原创 kotlin杂谈系列十二(Kotlin和Java的互操作)
Kotlin杂谈系列十二这次就主要来谈谈kotlin和java互操作的问题kotlin出来的使命就是为了解决java的模板问题和一些冗长的问题所以kotlin天生就很好的支持了java 所以我们在java代码中可以很好的引用java的类库和代码 但是在java中调用kotlin的代码就没那么容易了首先讲讲编译过程,如果一个项目里有kotlin代码和java代码那么编译时 kotlin编译器会先为java代码存根来支持他们之间的依赖 然后在使用java编译器这样就能运行了 因为kotlin代
2022-04-12 16:56:27
761
原创 Android 四大组件之旅
Android 四大组件之旅ActivityActivity 是每个App的排面 是用来展示界面的官方定义:Activity 是与用户交互的入口点。它表示拥有界面的单个屏幕。例如,电子邮件应用可能有一个显示新电子邮件列表的 Activity、一个用于撰写电子邮件的 Activity 以及一个用于阅读电子邮件的 Activity。尽管这些 Activity 通过协作在电子邮件应用中形成一种紧密结合的用户体验,但每个 Activity 都独立于其他 Activity 而存在。因此,其他应用可以启
2022-03-20 10:38:35
2559
原创 面向对象编程的笔记
面向对象编程的笔记在面向对象中有两个重要的概念类是一种抽象的概念 是具有某种共性 ---- 例如人类对象 是一种具体的概念 是一个实例 就好像科比一样科比 就是一个对象 职业篮球手 就是一个类在类中有属性和方法 统称成员成员方法成员方法必须由对象(实例)来调用成员方法想当于是一种对象的动作 比如 科比打篮球讨论一下方法的传参的机制参数分为 形参 和实参形参就可以看成一个变量实参是一个具体的数据形参是方法和外界交互的接口每个成员方法的级别是一样的 不能在方法中再
2021-11-08 20:48:19
89
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人