- 博客(46)
- 资源 (1)
- 收藏
- 关注
原创 MQ消息队列
对于异步,举个例子,例如购物下单,如果为同步操作,我们需要下单、减免优惠券、发送短信等等功能,如果不进行处理,那么购买一个物品可能需要十几秒,对于电商系统来说肯定是一个致命的问题,所以,我们需要消息队列来解决这个问题。只需要将下单的id传入消息队列之中即可,如果后续功能需要id数据,直接在消息队列之中取即可,无需和下单功能发送请求,同时,其它功能是否成功也不影响另外的功能的运行,这样,所有的功能都解耦了。我们下单成功之后,可以让剩余的操作异步进行,在减免优惠的同时,给用户发送短信。
2023-09-08 20:29:57 235
原创 解释 Git 的基本概念和使用方式
远程仓库 (Remote Repository):远程仓库是指存储在远程服务器上的代码或文件仓库。推送更改:使用 Git push 命令将本地 Git 仓库的更改推送到远程 Git 仓库。拉取更改:使用 Git pull 命令将远程 Git 仓库的更改拉取到本地 Git 仓库。克隆仓库:使用 Git clone 命令从远程 Git 仓库克隆代码到本地。推送到远程仓库:将本地仓库中的更改推送到远程仓库中,与其他开发者共享。初始化本地仓库:在本地创建一个新仓库,或者从远程仓库中克隆一个仓库。
2023-08-28 15:23:47 860
原创 C#学习,结构,面向对象,类
因为结构化语言不适合大规模的软件开发,所以这时候就需要一种开发思想,就是面向对象的开发思想,它将所有预处理的问题抽象为对象,同时了解这些对象具体有哪些相应的属性以及展示这些对象的行。
2023-08-28 09:29:52 591
原创 C#学习,委托,事件,泛型,匿名方法
泛型允许编写一个可以在任何类型下一起工作的类和方法,可以通过数据类型的替代参数编写类或方法的规范。委托的对象可以使用“+”运算符进行合并,可以由一个合并的委托来调用组成它的两个委托。去调用,所以只能将由委托变量去调用它,换言之,匿名方法将自己唯一拥有的方法主体交给委托,让委托代理执行。使用委托的这个有用的特点,您可以创建一个委托被调用时要调用的方法的调用列表。换句话说,可以使用委托对象调用可由委托引用的方法。委托可以通过匿名方法调用,也可以通过命名方法调用,即,通过向委托对象传递方法参数。
2023-08-16 16:01:27 1350
原创 C#,特性,属性,索引器
NET框架提供了三种预定义特性:Obsolete.NET框架允许船舰自定义特性,由于存储声明性信息,并且可以在运行时被检索,该信息根据设计标准和应用程序的需要可以与任何目标元素相关。创建并且使用自定义特性需要四个步骤:声明自定义特性构建自定义特性在目标程序元素上应用自定义特性特过反射访问特性最后一个步骤包含编写一个简单的程序来读取元数据以便来查找各种符号。一个新的自定义特性应派生自类。// 一个自定义特性 BugFix 被赋给类及其成员我们声明了一个DeBugInfo的特性。
2023-08-15 15:40:45 727
原创 C#学习,反射
程序是用来处理数据的,但是程序本身也是由数据组成的,有关程序及其类型的数据,元数据(Metadata),保存在程序集之中,程序在运行中,可以查看其他的程序集和自身的Metadata,一个运行的程序查看本身的元数据或其他程序集的元数据的行为称为反射。对于程序的类型,CLR都会创建一个包含这个类型的Type对象,程序中每遇到一个类型都会关联到独立的Type的对象,不管创建的类有多少实例,只有一个Type类的对象会关联到这些所有的实例。
2023-08-14 16:58:55 1038
原创 存储过程的学习
这是实习期间学习的,我可能是在学校没好好听课,(或者就是学校比较垃,没交这部分,在公司经理让我下去自己学习,太难了,因为是公司代码很多部分都是很多表的操作,所以导致都是存储过程,我最开始一脸懵)以上是对存储过程简单的介绍,具体还有在程序中使用的部分,如何调用,需要什么参数,这都是需要继续的学习。中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出。首先,肯定是先找到位置,打开存储过程,下面是两个软件不同位置,一个是可编程性,一个是函数。
2023-08-11 17:32:24 1288
原创 为什么Java中只有值传递?
看似结果变了,但是在引用数据类型里面,student所代表的是new Student("张三")的地址,将change函数被调用的时候,实际上是将地址值赋给了形参,change函数对new Student("张三");结果没有改变,因为Java中字符串是一个常量,修改字符串不是修改了字符串的值,只是创建了一个新的字符串,然后将变量指向的地址换成了新的字符串地址,所以只是改变了形参。在这里,我们的实参没有改变,只是改变了形参的值,实参和形参都是相互独立的。1,了解值传递和引用传递的概念.
2023-07-24 13:30:07 110
原创 设计模式---观察者模式
属于行为模式的一种,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一对象主题对象,这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。当对象之间存在一对多的关系的时候就会使用观察者模式 ,当一个对象被修改的时候,会通知依赖他们的对象。比如,猫,狗,老鼠三个对象。猫是狗和老鼠的被观察者,老鼠和狗是观察者。现在猫叫,然后老鼠跑,狗叫。观察者模式很好的体现了开闭原则。3,观察者模式的实现。
2023-07-11 15:22:19 744
原创 Java的数据结构
通过下标快速定位,如果为这个位置什么都没有就返回null,如果有就调用equals(),如果链表上所有的k都为false,那就返回null,负责true,就返回出这个value。如果下标处为null,那就将数据插入,如果下标不为null,将调用equals()方法,如果又返回false,将value插入到链表的末尾,如果为true,就将数据覆盖。链表是一种递归类型的数据结构,它可以为空,或者指向一个节点的引用,该节点还有另外一个元素和一个指向另外一条链表的引用。含有大量的引用,占用的内存空间大;
2023-07-07 16:43:15 577
原创 Java的正则表达式---超详细!!!
正则表达式不限于某一种语言,它在不同的语言之中有区别。正则表达式搜索,编辑,处理文本。正则表达式定义了字符串的模式。一个字符串就是一个正则表达式。Hello World 正则表达式匹配 "Hello World" 字符串。this\s+is\s+text,其中‘\s+’,对应的是‘ ’(空格),最终结果:this is text。,其中,‘^’定义了以什么开始,\d+ 匹配一个或多个数字?设置括号内的选项是可选的\. 匹配 "."可以匹配的实例:"5", "1.5" 和 "2.21"。
2023-07-06 16:24:32 686
原创 Java面试题,集合部分
使用ArrayList()创建ArrayList对象时,不会定义底层数组的长度,当第一次调用add(E e) 方法时,初始化定义底层数组的长度为10,之后调用add(E e)时,如果需要扩容,则调用grow(int minCapacity) 进行扩容,长度为原来的1.5倍。HashSet的值是作为HashMap的key存储在HashMap中的,而HashMap中的key是不能重复的,所以HashSet的元素固然不会重复。ArrayList:动态数组,提供了动态的增加和减少元素,可以灵活的设置数组的大小。
2023-06-11 13:23:24 107
原创 Java面试题,Java的异常问题
最大的不同就是在于处理异常的方式,受检异常需要进行显式的处理,而运行时异常不需要,受检异常也可以再代码层面上预测,从而再编写代码是比卖你出现异常的情况,而运行时异常是可以避免的。IOException:当发生某种I/O异常时,抛出此异常。throws关键字用于声明可能抛出的某类异常,通常用于在方法签名中声明方法可能会抛出的异常。运行时异常时程序再执行过程中遇到的异常情况属于是程序错误,可以再开发或者测试时避免。throw关键字用于程序中显示的抛出一个异常对象,通常用于再方法内部抛出一个异常。
2023-06-09 19:49:34 182
原创 2023面试,特别详细的八股
泛型指的是,参数化类型,将所操作的数据类型指定为一个参数,在不创建新类的情况下,通过参数来指定所要操作的具体类型,在创建对象或者调用方法时才可以明确具体的类型。不可以重写static,方法重写是基于运行时的动态绑定的,而static方法编译时是静态绑定的,static方法类的任何事例都不相关联。使用抽象类,如果你想添加新的方法,可以直接提供默认的实现,不用改变现有的代码。重载指的是不同的函数属于相同的函数名,但是参数的个数或者类型不同,调用时根据不同的参数来区分不同的函数。
2023-06-05 18:05:18 105
原创 慧点科技面经
NumberFormatException:当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。IOException:当发生某种I/O异常时,抛出此异常。此类是失败或中断的I/O操作生成的异常的通用类。FileNotFoundException:当试图打开指定路径名表示的文件失败时,抛出此异常。NullPointerException:当应用程序试图访问空对象时,则抛出该异常。SQLException:提供关于数据库访问错误或其他错误信息的异常。
2023-05-31 22:11:46 139
原创 面试刷题java
利用一个队列存储每一层的元素,最开始的时候先将根节点放入队列中,然后进行循环,循环的条件就是队列不为空,先获取队列地长度,然后逐个将队列头部地元素弹出,并且将弹出地结点地儿子结点放入栈中,等到一层遍历结束,队列中地元素都是子节点地元素,也就是下一层地原素,这样就实现了树地层次遍历了。java.lang包是java语言的核心包,lang是language的缩写 java.lang包定义了一些基本的类型,包括Integer,String之类的,是java程序必备的包,有解释器自动引入,无需手动导入。
2023-05-24 20:36:09 289
原创 泰坦尼克沉船存活率(机器学习,Python)
总体来说,这些结论说明在泰坦尼克号上,逃生时有一定的优先考虑,年龄、性别、船票等级、有无亲属等因素都可能影响乘客的生还率,泰坦尼克号沉船幸存者多为老人、小孩和妇女,而牺牲者多为年轻的男士,这样的历史数据,让我感受到了人性之美与善。:目前使用的数据仅包含部分乘客的信息,未来可以寻找更多相关的数据,例如那些没有生还的乘客信息、关于乘客的职业等信息。由于名字之间的头衔有着明显的区别,名字之中包含着具体的称谓,可以将称谓提取出来作为变量,可能就是不同等级有着不同的称谓,比如,结婚的人是一种,普通的人又是一种。
2023-05-24 19:37:24 3190
原创 设计模式---单例模式
让一个全局变量使其被一个对象访问,但是它不能防止实例化多个对象,让类自身负责保存它的唯一实例,同时这个类保证没有其他实例可以被创建,并且提供了一个访问该实例的方法。问题:如果类加载对象时就被创建,一直在内存中,如果一直不使用,该对象存在,内存就浪费了。没有接口,不能继承,与单一职责冲突,一个类应该只关心内部逻辑,而不关心外面如何实例化。单例模式,保证一个类仅仅有一个实例,并且提供一个访问它的全局访问点。1,在内存只有一个实例,大大减少了内存的消耗,尤其是频繁的创建和销毁实例。2,避免对资源的多重占用。
2023-05-19 10:39:44 148
原创 Java中的设计模式
(任何基类可以出现的地方,子类一定可以出现),里氏替换原则是对开闭原则的补充,实现开闭原则的关键就是抽象化,而基类与子类的集成关系就是抽象化的具体体现,所以,里氏替换原则就是对实现抽象化的具体步骤的规范。策略模式,模板方法模式,观察者模式,责任链模式,访问者模式,中介模式,迭代器模式,命令模式,状态模式,备忘录模式,解释器模式。适配器模式,装饰者模式,代理模式,桥接模式,外观模式,组合模式,享元模式。在之后的文章,会详细的解释部分常用的设计模式。简单工厂模式,抽象工厂模式,单例模式,建造者模式,原型模式。
2023-05-18 21:08:21 57
原创 机器学习(有监督学习,掌握逻辑回归模型,掌握K近邻分类 原理,掌握决策树模型类型和原理)
ID3、C4.5和CART算法均只适合在小规模数据集上使用ID3、C4.5和CART算法都是单变量决策树当属性值取值比较多的时候,最好考虑C4.5算法,ID3得出的效果会比较差决策树分类一般情况只适合小数据量的情况(数据可以放内存)CART算法是三种算法中最常用的一种决策树构建算法三种算法的区别仅仅只是对于当前树的评价标准不同而已,ID3使用信息增益、C4.5使用信息增益率、CART使用基尼系数。CART算法构建的一定是二叉树,ID3和C4.5构建的不一定是二叉树。
2023-05-11 15:12:42 254
原创 机器学习(数据准备和特征工程)
通过以上过程,我们可以得到结论,在使用IQR原则进行异常值检测时,需要通过计算出数据的上下临界值,然后判断数据是否超出这个范围来决定是否为异常值,通过计算数据集的四分位数、IQR和临界值,可以得出哪些数据是异常值,即小于下临界值或大于上临界值的数据被视为异常值。首先,需要计算出数据集的四分位数Q1,Q2,Q3,其中Q1表示数据排序后中间位置左边的数的中位数,Q2表示数据的中位数,Q3表示数据排序后中间位置右边的数的中位数。4.需要的计算量为数据集的四分位数,四分位间距,下临界值和上临界值。
2023-05-08 16:44:50 454
原创 MYSQL(入门,全是重点)
在group语法之中,我们知道数据库是对数据先做where操作,然后分组统计,但是我们如果要分组完再筛选出数据,就要使用having语法(主键:一般关系数据库中,都会有一个属性设置为主键,借助主键,我们可以把两个表中具有相同主键ID的数据连接起来,使用到JOIN关键字.null还是无的意思,因为我们可能要考虑到某个属性为null 的情况,这种特殊性质会导致编写SQL的复杂性,尽量减少null的使用.其次,group by 可以对某个数据进行分组,可以组合,对分组进行统计.对数据进行计数,求平均值等操作.
2023-04-28 22:11:50 605 2
原创 算法(岛屿周长,岛屿数量,岛屿最大面积)
然后就可以遍历节点,然后判断是非为1,是1就将该地址的值+1(避免重复遍历),然后我们将该位置的上下左右判断一下,如果是0(也就是岛屿和湖面的交界),当然遇到边界也是相同的情况,+1。岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。首先还是循环遍历出岛屿位置,然后就开始寻找与它相邻的岛屿,将相邻的岛屿+1,直到没有岛屿,这样就可以看循环的次数得到岛屿数量。该题在岛屿问题里面,算是比较基础的,我们就可以根据该题,慢慢理解岛屿问题的求解。
2023-04-27 15:20:46 306
原创 算法(完全平方数)
首先就是动态规划的思路,就是将输入的n进行拆解,n=a*a+b,然后再将b进行拆分为b=c*c+d,所以就需要不断的取最大的a,然后取最大的c,n的最优解就是1+(a的最优解)。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。根据以上,得到动态规划方程,dp[i]=Math.min(dp[i],dp[i-j*j]+1)给你一个整数 n ,返回 和为 n 的完全平方数的最少数量。
2023-04-26 17:14:14 150
原创 算法(手写归并排序)
我们将数组一直分割,然后排序之后合并,如此,得到递推关系,具体排序方法,对左右两个数组的排序,我们只用定义两个指针,分别指向左侧部分的起始位置和右侧部分的起始位置,同时建立一个空数组和一个辅助指针,比较左指针和右指针所对应的元素的大小,较小的元素填充至空数组,同时其对应的指针和辅助指针均加1。merge函数是建立一个新的数组,存放比较后的数组,最后将其放回到nums数组之中。具体实现还是挺简单的。首先是将需要排序的数组分割开来,拆分为左右两部分,分解为两个子问题。2,得到递归的递推关系。
2023-04-25 17:57:08 120
原创 经典面试题8(IOC 和 AOP,设计模式,Spring Bean 的生命周期,延迟加载,多级缓存机制)
Servlet的生命周期就是Bean从创建到销毁的过程:实例化,属性赋值,初始化,销毁。1,实例化通过反射来推断构造函数进行实例化实例化工厂,静态工厂2,属性赋值解析自动装配,方式(byname bytype constractor none @Autowired)循环依赖3,初始化调用—Aware回调方法(BeanNameAware,BeanClassLoaderAwar,BeanFactoryAwre等)调用初始化生命周期回调(注解,intiializingBean接口,注解属性)
2023-04-24 16:42:49 705
原创 经典面试题7(索引的最左原则,InnoDB 和 MyIsam 引擎,优化数据库性能,慢查询,行锁,表锁)
所以MyIsam表占用空间大。mysql的索引是通过B+树来实现的,不管是普通索引还是联合索引,对于普通索引来说,就是在非节点上记录的是索引的值,叶子节点上记录的是主键索引的值,它的排序条件是根据主键的值。所以,最左前缀匹配就是:因为索引的底层是一个B+树,如果是联合索引,在构造B+树的时候,就会先按照最左的索引值排序,当左边的相同,再依次按照右边的索引来排序。对于联合索引来说,如果以(num,age)为索引,非叶子节点上就是num,age的值,叶子节点上就是num,age两个字段以及主键count的值。
2023-04-23 12:58:42 291
原创 经典面试题6(死锁,线程状态,进程调度算法,缓冲区溢出,缓冲区溢出,三次握手和四次挥手,HTTP 和 HTTPS 协议)
在两个或者多个并发的进程中,如果每个进程持有某种资源而又等待其他的进程释放他们的资源,在一直持续这种状况的情况下,不能向前推进的现象,称为死锁。就是进程之间相互阻塞,相互等待的状态。互斥条件:一个资源一次只能被一个进程调用请求与保持条件:一个进程因请求资源而阻塞时,对已经获得的资源不放。不剥夺条件:进程获得资源,在其他进程未使用完的情况下,不能强行剥夺。循环等待条件:若干进程之间形成一种循环,来等待资源的关系。1,死锁预防破除互斥条件(一般无法破除)
2023-04-22 17:50:19 303 1
原创 经典面试题5(SpringBoot)
SpringBoot主要用来简化使用Spring的的使用,它是Spring组件的一站式解决方案,使用yml文件代替了复杂的xml文件,同时提供了各种启动器,使开发者能快速上手。4,springboot引导的应用程序可以与spring生态系统集成,比如spring jdbc,spring orm,spring data,spring security。Spring提供了用ControllerAdvice处理异常的非常有用的方法,我们通过ControllerAdvice类,来处理控制器类抛出的异常。
2023-04-21 10:54:53 60
原创 经典面试题4(堆内存,索引,缓存击穿,缓存穿透,缓存雪崩,redis的持久化)
AOF(append only file),只允许追加不允许改写的文件,换了一个角度来实现持久化,就是将redis执行的所有指令记录下来,在下次redis重新启动的时候,只要把这些指令从前到后重复执行一遍,就可以实现数据恢复了。Redis的缓存击穿是指的是,当一个非常热门的key过期之后,同时有大量的并发请求过来,此时会导致缓存没有起作用,请求都会穿透到数据库层,请求都会穿透到数据库层,从而导致数据库压力骤增,严重影响系统性能。2,每次插入,删除数据的时候,都需要更新索引,降低读写速度。
2023-04-20 11:56:15 77
原创 经典面试题3(ThreadLocal ,同步锁,死锁,乐观锁,悲观锁,反射,Hashmap 和 hashtable ConcurrentHashMap)
1,ThreadLocal 的原理是线程本地变量,它的作用就是,对于同一个变量,在不同的线程之中,可以获取到不同的值。它的值保存在线程本地的,保证线程的安全性,他有一个静态内部类ThreadLocalMap,也就是key-value形式的存储值。ThreadLocal 本身并不存储值,它只是作为一个 key 保存到 ThreadLocalMap 中。它的 key 用的是弱引用,因为没有强引用链,弱引用在 GC 的时候可能会被回收。
2023-04-15 21:51:30 315
原创 Java SSM学习(三)
用于我们需要通过浏览器发送请求,然后访问服务器,服务器会根据携带的http参数来进行执行命令,完成响应,这个获取参数的方式就需要请求来完成,总共有8种,重点的两种方式:GET方式和POST方式.言归正传,SpringMVC就是Spring Web MVC,它是Spring框架提供的支持Web应用的表现层的框架,它支持多种视图层,不只是JSP,还可以是Tiles,Velocity等。r 控制器,它负责将用户的请求数据移交对应的数据模型进行处理,将处理结果提交对应的视图完成反馈。
2023-04-13 16:17:03 122
原创 算法(N皇后问题)
可以使用record[]数组存放合法的置放皇后条件,由于一行只让存放一个皇后,所以我们可以将record[[0,0],[1,1],[2,2]](在第一列第一个,第二列第二个,第三列第三个存放皇后),转换为record[0,1,2],让其数组的下标作为皇后的行数。由上图,大家也可以理解该题的解法,就是一层一层判断出皇后出现的位置是否符合逻辑,大家可能想到的第一个方法就是使用for循环进行处理,比如4皇后问题,可以使用四个for循环进行求解,但是我们处理N皇后问题不方便,于是我们可以使用回溯的方法进行处理。
2023-04-07 21:50:44 88
原创 经典面试题2(ArrayList 和 LinkedList )
我在了解两者之间的差别的时候,看到了这句话,“如果真的不知道该用 ArrayList 还是LinkedList,就选择 ArrayList 吧!ArrayList是使用了动态数组来存储元素的,LinkedList内部使用双向链表来存储元素,这是他们之间最本质的区别。特别是,当列表很大的时候,LinkedList由于需要存放上一个和下一个元素的地址,这样会导致内存需要比ArrayList更大的开销。所以,根据两者不同方法的时间复杂度,我们对他们就有了一个初步的认识,并且可以区分,在什么情况使用他们。
2023-03-29 17:56:57 179
原创 经典面试题1(Java 的集合类,HashMap 的实现原理)
主要分为:set list mapJava容器分为Collection 和 Map 两大类,其中Collection集合的子接口有Set、List、Queue三种子接口,Map也是一个接口,但是不是Collection的子接口。List:一个有序容器,元素可以重复,可以插入多个null元素,元素都有索引。常用的实现类有 ArrayList、LinkedList 和 Vector。Set:一个无序容器,不可以存储重复元素,只允许存入一个null元素,必须保证元素唯一性。
2023-03-28 22:40:02 118 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人