自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(263)
  • 收藏
  • 关注

原创 线性数据结构

为了避免当只有一个元素的时候,队头和队尾重合使处理变得麻烦,所以引入两个指针,front 指针指向对头元素,rear 指针指向队列最后一个元素的下一个位置,这样当 front 等于 rear 时,此队列不是还剩一个元素,而是空队列。除此之外,链表不具有数组随机读取的优点。2. 队列为空的时候就是 front==rear ,队列满的时候,我们保证数组还有一个空闲的位置,rear 就指向这个空闲位置,如下图所示,那么现在判断队列是否为满的条件就是:(rear+1) % QueueSize==front。

2024-07-18 17:43:44 857

原创 spring是如何解决循环依赖的,为什么不是两级

‌通过这种方式,‌Spring可以确保在需要时提供正确的对象实例,‌无论是原始对象还是其代理对象,‌从而解决了循环依赖的问题。:‌在某些情况下,‌二级缓存用于存储Bean的代理对象或原始实例,‌以避免重复创建。‌然而,‌在处理循环依赖时,‌二级缓存不足以解决问题,‌因为它不能确保在需要时总是提供正确的对象实例。‌当其他Bean依赖这个Bean时,‌可以直接从缓存中获取实例,‌避免重复创建。通过上面的图,仔细分析一下,其实把二级缓存拿掉,在 B 尝试获取 A 的时候直接返回 A 的实例,是不是也是可以的?

2024-07-18 17:11:10 1614

原创 乐观锁和悲观锁

操作员 B 完成了操作,也将版本号( version=1 )试图向数据库提交数据( balance=$80 ),但此时比对数据库记录版本时发现,操作员 B 提交的数据版本号为 1 ,数据库记录当前版本也为 2 ,不满足 “ 提交版本必须等于当前版本才能执行更新 “ 的乐观锁策略,因此,操作员 B 的提交被驳回。悲观锁总是假设最坏的情况,认为共享资源每次被访问的时候就会出现问题(比如共享数据被修改),所以每次在获取资源操作的时候都会上锁,这样其他线程想拿到这个资源就会阻塞直到锁被上一个持有者释放。

2024-07-17 17:56:05 1002 1

原创 Spring的启动过程

在实例化 Bean 的过程中,Spring 容器会解析 Bean 之间的依赖关系,并将依赖的 Bean 注入到需要它们的 Bean 中。如果应用程序中使用了 AOP(面向切面编程),Spring 将会应用切面逻辑,为 Bean 动态生成代理,并将切面逻辑织入到相应的 Bean 中。Spring 容器会根据配置文件中的定义,实例化所有的 Bean。一旦所有的 Bean 实例化、依赖注入和初始化工作完成,Spring 容器就会完成启动过程,应用程序就可以开始处理请求和响应了。4)实例化 Bean。

2024-07-16 04:15:00 302

原创 Spring 如何解决循环依赖问题

在创建Bean的过程中,Spring会使用三级缓存来管理对象的创建过程,保证在创建过程中依然能够提供已经初始化完成的对象引用,从而解决循环依赖的问题。Spring 解决循环依赖问题的核心在于提前暴露一个已经创建完成的对象引用,而不是提前暴露一个未初始化的代理对象。当请求Bean时,如果Bean正在创建中,则先返回一个临时的代理对象(早期代理对象),这样可以允许其他Bean引用该Bean,形成一个引用链。单例对象的创建过程中遇到循环依赖,Spring 采取提前暴露引用的方式解决。

2024-07-16 03:00:00 166

原创 使用 AspectJ实现AOP 切面

上面的代码中我们就是在@Before()中直接指定使用当前类定义的beforeAdd()方法对应的Pointcut的表达式,如果我们需要指定的Pointcut定义不是在当前类中的,我们需要加上类名称,如下面这个示例中引用的就是定义在MyService中的add()方法上的Pointcut的表达式。标准的Aspectj Aop的pointcut的表达式类型是很丰富的,但是Spring Aop只支持其中的9种,外加Spring Aop自己扩充的一种一共是10种类型的表达式,分别如下。

2024-07-15 16:48:39 349

原创 使用Spring代理工厂实现AOP 切面

这里有个值得注意的问题:从容器中获得proxy对象时应该是org.springframework.aop.framework.ProxyFactoryBean类型的对象(如下代码所示),但这里直接就转换成IMath类型了,这是因为:ProxyFactoryBean本质上是一个用来生产Proxy的FactoryBean。如果容器中的某个对象持有某个FactoryBean的引用它取得的不是FactoryBean本身而是 FactoryBean的getObject()方法所返回的对象。即,它是类中的一个方法。

2024-07-15 16:45:14 363

原创 静态代理、JDK与CGLIB动态代理

参数:Object为由CGLib动态生成的代理类实例,Method为上文中实体类所调用的被代理的方法引用,Object[]为参数值列表,MethodProxy为生成的代理类对方法的代理引用。4.2、使用cglib完成动态代理,大概的原理是:cglib继承被代理的类,重写方法,织入通知,动态生成字节码并运行,因为是继承所以final类是没有办法动态代理的。5.4、如果项目中有多个类,则需要编写多个代理类,工作量大,不好修改,不好维护,不能应对变化。被代理的类必须实现接口,未实现接口则没办法完成动态代理。

2024-07-13 03:00:00 811

原创 Spring AOP 实现原理

说明:当容器收集BeanPostProcessor类型的Bean对象时,会自动解析该BeanDefinition、实例化对象、属性设置并注入到IOC容器中,该部分逻辑可以参考Spring系列-2 Bean的生命周期,区别在于AnnotationAwareAspectJAutoProxyCreator的注入流程发生在Spring容器收集BeanPostProcessor类型的Bean对象时,而不是加载所有的非懒加载单例Bean。[2] exposeProxy表示是否暴露代理对象,默认值为false;

2024-07-12 03:45:00 567

原创 Spring AOP 使用方式

另外,@AfterThrowing还可添加异常类型的参数,而@AfterReturing可以添加一个Object类型的参数(表示运行结果),以下通过案例的形式进行介绍。其中:advisor将所有的逻辑都封装在了MethodInterceptor的invoke方法中,通过方法完成增强;@Before表示前置增强,@AfterReturing表示后置增强,@Around表示环绕增强,@AfterThrowing表示异常抛出增强,@After表示方法正常执行完或者异常抛出都会执行的增强逻辑;

2024-07-12 03:00:00 336

原创 Spring AOP 基础知识

AOP的技术整合(织入增强逻辑)可以发生在编译器、类加载期以及运行期:AspectJ在编译器(ajc)和类加载器(使用特定的类加载器)实现;抽取重复代码作为一个模块是用户的问题,然而技术整合(对目标织入增强逻辑,后文介绍)以实现功能还原是AOP的目标和工作重心,Spring AOP是该技术的一种实现。, 即表示不进行增强。框架定义切点是为了从目标类的连接点(执行点)中过滤出符合条件的部分,为此在切点类的内部提供类两个过滤器:ClassFilter和MethodMatcher,分别对类型和方法进行过滤。

2024-07-11 11:50:26 600

原创 Java中的独占锁(写锁)和共享锁(读锁)

对 ReentrantReadWriteLock 其读锁是共享锁,其写锁是独占锁。读锁的共享锁可保证并发读是非常高效的,读写,写读,写写的过程是互斥的。独占锁:指该锁一次只能被一个线程所持有。对 ReentrantLock 和 Synchronized 而言都是独占锁。写入时正常,不会中断;读取时,可以共享锁。共享锁:指该锁可被多个线程所持有。2 示例(模拟缓存)

2024-07-11 03:15:00 226

原创 Java中的公平锁和非公平锁

在Synchronized中,当一个线程释放锁时,JVM会从等待队列中随机选择一个线程来获取锁,而不是按照申请锁的顺序来获取锁,因此Synchronized是一种非公平锁。在并发环境中,每一个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个就占有锁,否者就会加入到等待队列中,以后会按照 FIFO 的规则获取锁。Synchronized是Java中内置的锁机制,它的锁模式是非公平锁,这是因为Synchronized的实现方式是基于对象监视器(monitor)的。

2024-07-10 15:27:00 805

原创 Java中的可重入锁、不可重入锁和自旋锁

可重入锁(也叫做递归锁): 指的是同一线程外层函数获得锁之后,内层递归函数仍然能获取该锁的代码,在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁,也就是说,线程可以进入任何一个它已经拥有的锁所同步着的代码块。可重入锁最大的作用就是避免死锁。可重入锁:指的是同一个线程外层函数获得锁之后,内层仍然能获取到该锁,在同一个线程在外层方法获取锁的时候,在进入内层方法或会自动获取该锁。不可重入锁,即若当前线程执行某个方法已经获取了该锁,那么在方法中尝试再次获取锁时,就会获取不到被阻塞。

2024-07-10 15:17:04 561

原创 Java使用Redis分布式锁实现负载均衡

Java使用Redis分布式锁实现负载均衡的一种常见方式是利用Redisson来进行协调和管理。当某个服务器出现故障或者网络异常时,其对应的成员会被删除,此时需要重新选取另外一个可用的服务器来处理相同请求。客户端在请求服务前先获取全局互斥访问权(即分布式锁),然后从注册中心随机选择一个可用的服务器并发起请求。服务器处理完请求之后返回结果给客户端,并释放全局互斥访问权以便其他客户端能够继续使用它所对应的服务器。每个服务在启动时向该有序集合添加一个成员,并将自己的IP地址和端口号等信息保存到该成员上面去。

2024-07-04 04:00:00 131

原创 Java使用分布式锁来防止缓存穿透与雪崩

实现数据库分布式锁的一种常见方式是使用数据库中的行级锁。3)查询缓存数据:在获得了分布式锁之后,即可查询缓存中是否存在指定数据。如果存在,则直接返回结果;2)获取分布式锁:在需要进行操作时,首先尝试获取分布式锁。如果成功获取到,则可以执行相应操作;4)写入新数据到缓存:在完成所有操作之后,必须及时释放占用的资源(包括数据库连接、文件句柄等)以及释放所持有的分布式锁,并将新查询出来或生成出来的数据写入到缓存中去。1)选择合适的分布式锁实现:常见的分布式锁实现包括ZooKeeper、Redis和基于数据库等。

2024-07-03 14:53:38 229

原创 使用数据库中的行级锁实现数据库分布式锁

在MySQL中,可以通过SELECT ... FOR UPDATE语句来获取行级排他锁(也称为写锁),从而保证只有一个事务能够修改该行数据。实现数据库分布式锁的一种常见方式是使用数据库中的行级锁。

2024-07-03 14:52:28 232

原创 Java使用分布式锁来做数据库事务控制

2)获取分布式锁:在需要进行操作时,首先尝试获取分布式锁。如果成功获取到,则可以执行相应操作;4)提交或回滚事务:在完成所有操作之后,必须及时提交或回滚当前线程所关联的事务,并释放占用的资源(包括数据库连接、文件句柄等)以及释放所持有的分布式锁。3)执行业务逻辑:在获得了分布式锁之后,即可执行相应业务逻辑。例如,在数据库事务场景中可以开启一个新的事务,并将其与当前线程绑定。1)选择合适的分布式锁实现:常见的分布式锁实现包括ZooKeeper、Redis和基于数据库等。根据具体情况选择最佳方案。

2024-07-03 14:21:05 120

原创 Java使用分布式锁来控制并发流量

2)获取分布式锁:在需要进行操作时,首先尝试获取分布式锁。如果成功获取到,则可以执行相应操作;否则说明已经有其他客户端正在处理该请求,此时可以直接返回或者等待一段时间后再次尝试。1)选择合适的分布式锁实现:常见的分布式锁实现包括ZooKeeper、Redis和基于数据库等。4)释放分布式锁:在完成所有操作之后,必须及时释放占用的资源(包括数据库连接、文件句柄等)以及释放所持有的分布式锁。3)执行业务逻辑:在获得了分布式锁之后,即可执行相应业务逻辑。例如,在Web应用中可以对请求进行限流或者排队处理。

2024-07-03 14:16:05 418

原创 Java使用分布式锁来做分布式任务调度

获取分布式锁:在需要进行操作时,首先尝试获取分布式锁。否则说明已经有其他客户端正在处理该请求,此时可以直接返回或者等待一段时间后再次尝试。执行业务逻辑:在获得了分布式锁之后,即可执行相应业务逻辑。例如,在任务调度场景中可以从队列中取出一个待处理任务,并将其标记为已处理状态。选择合适的分布式锁实现:常见的分布式锁实现包括ZooKeeper、Redis和基于数据库等。根据具体情况选择最佳方案。释放分布式锁:在完成所有操作之后,必须及时释放占用的资源(包括数据库连接、文件句柄等)以及释放所持有的分布式锁。

2024-07-03 12:47:39 439

原创 Java使用分布式锁来防止重复提交

获取分布式锁:在需要进行操作时,首先尝试获取分布式锁。当需要获取锁时,在“/locks”下创建一个临时顺序节点,并记录该节点的名称。4)数据库事务控制:在数据库事务处理过程中,为了防止数据不一致或者死锁等问题,通常需要采用分布式锁机制来保证事务正确执行。选择合适的分布式锁实现:常见的分布式锁实现包括ZooKeeper、Redis和基于数据库等。释放分布式锁:在完成所有操作之后,必须及时释放占用的资源(包括数据库连接、文件句柄等)以及释放所持有的分布式锁。否则,监听前面一个子节点的删除事件,并等待通知。

2024-07-02 11:26:55 527

原创 Java使用分布式实现数据库读写分离

以上代码中定义了两个不同URL地址的MySQL数据库,并且创建了两个不同的BasicDataSouce 数据源对象表示master和slave。配置主从复制:在MySQL中,可以通过配置主从复制来实现数据同步。将一个节点作为主节点(Master),其他节点作为从节点(Slave)。当主节点上的数据发生变化时,自动将变更内容同步到所有从节点上。实现读写分离:在应用程序中,对于查询操作可以优先选择从库进行处理,而对于更新操作则必须使用主库。重启MySQL服务,并登录到MySQL控制台。

2024-07-02 03:30:00 358

原创 如何实现高可用的分布式系统

例如使用配置管理工具(如Ansible)来批量部署应用程序、使用监控告警系统(如Zabbix)来及时发现异常情况并通知管理员处理等。当某个节点出现故障时,其他节点可以自动接管其工作,保证服务的连续性和稳定性。负载均衡:通过负载均衡技术,将请求分发到不同的节点上,避免单一节点过载或故障导致整个系统崩溃。常见的负载均衡算法包括轮询、加权轮询、最小连接数等。在轮询算法基础上增加了权重因素,根据不同服务器的处理能力分配不同比例的请求。将请求依次分配给不同的服务器,每个服务器按照顺序接收到相应数量的请求。

2024-07-01 09:50:58 303

原创 堆是一个完全二叉树

例如 3 , 1 , 2 {3,1,2}3,1,2 可以看作为大根堆,而 3 , 2 , 1 {3,2,1}3,2,1 亦可以看作为大根堆。小根堆的性质与大根堆类似,只不过在二叉树的结构中,根结点<子结点。例如 1 , 2 , 3 {1,2,3}1,2,3 为小根堆,1 , 3 , 2 {1,3,2}1,3,2 同样也是小根堆。若 2 ⋅ i + 2 < n 2·i+2<n2⋅i+2<n ,其右子节点的序号为 2 ⋅ i + 2 2·i+22⋅i+2 ,否则没有右子节点。

2024-07-01 09:49:04 144

原创 分布式机制

Java分布式机制是指在Java平台上实现的一种分布式计算模型,它可以将一个应用程序拆分成多个部分,在不同的计算机节点上运行,并通过网络进行通信和协调。当客户端需要访问服务端提供的功能时,它会向注册表中查找相应的远程对象,并获取其引用。RMI(Remote Method Invocation)是Java平台提供的一种分布式机制,它允许在不同的Java虚拟机之间进行远程方法调用。通过使用RMI,可以将一个应用程序拆分成多个部分,在不同的计算机节点上运行,并通过网络进行通信和协调。

2024-07-01 09:29:13 483

原创 Ribbon的9种负载均衡策略

它根据每一个服务实例的运行情况先计算出该服务实例的一个权重,然后根据权重进行服务实例的挑选,这样能够调用到更优的服务实例。PredicateBaseRule 类是 ClientConfigEnabledRoundRobbinRule 类的一个子类,它通过内部定义的一个过滤器过滤出一部分服务实例清单,然后用线性轮形的方式从过滤出来的服务实例清单中选取提个服务实例。incrementAndGetModulo() 方法获取一个下标 (是先加1,然后和服务清单总数取模获取到的,不会越界),是一个不断增长的数。

2024-06-30 03:00:00 436

原创 Spring基础知识 - IOC、DI、AOP

4、容器:Spring 框架提供了一个容器,用于管理应用程序的对象和依赖关系,并提供了一些可重用的核心组件,如 BeanFactory、ApplicationContext 等,这些对象可以是 Spring Bean、JDBC 连接、JMS 连接、Servlet 等。从而导致类与类之间的耦合度过高。AOP(Aspect Oriented Programming,面向切面编程)是 Spring 框架提供的一种重要机制,它可以将应用程序中的横切关注点(如日志、事务、安全等)从业务逻辑中分离出来,并集中管理。

2024-06-29 03:30:00 1465

原创 Java基础知识-线程池

自己根据创建线程池的需求来 new 对象(使用) 注意:线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。为了避免这些问题,在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程。newSingleThreadExecutor(): 该方法返回一个只有一个线程的线程池。线程池都是通过线程池工厂创建,再调用线程池中的方法获取线程,再通过线程去执行任务方法。

2024-06-29 03:00:00 256

原创 Spring 基础知识

总的来说,过滤器是在 Servlet 容器层面上对请求进行处理的,而拦截器是在 Spring MVC 框架层面上对请求进行处理的,过滤器更加底层,可以对请求进行一些底层的处理,而拦截器更加高级,可以对请求进行一些业务逻辑层面的处理。这种方式可以将对象的创建和管理解耦,并且可以灵活地配置和管理对象。@Autowired是Spring提供的注解,而@Resource是JSR-250规范中定义的注解,因此@Autowired是Spring特有的注解,而@Resource是JavaEE的注解,它们的使用范围不同。

2024-06-29 03:00:00 420

原创 Eureka-Serve的探活机制,是如何判断一个服务不可用的?

Eureka Server不再从注册列表中移除因为长时间没有收到心跳而应该剔除的过期服务,如果在保护期内如果服务刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败,对于这个问题需要服务消费者端要有一些容错机制,如重试,断路器等!实际,心跳检测机制有一定的不确定行,比如服务提供者可能是正常的,但是由于网络通信的问题,导致在90s内没有收到心跳请求,那将会导致健康的服务被误杀。服务端维护了每个实例的最后一次心跳时间,客户端发送心跳包过来后,会更新这个心跳时间。

2024-06-28 18:25:23 778

原创 Spring 事务失效的 8 种场景

submitOrder()方法和updateProductStockCountById()方法都在OrderService类中,submitOrder()方法上没有标注事务注解,updateProductStockCountById()方法上标注了事务注解,submitOrder()方法调用了updateProductStockCountById()方法,此时,updateProductStockCountById()方法的事务在Spring中会失效。例如,如下代码所示。

2024-06-28 17:31:43 424

原创 AOP的实现原理

它可以实现不用写代理类的实现就可以创建代理类对象;通过代理类对象执行目标接口中的方法,会把方法的调用分派给调用处理器(InvocationHandler)的实现类,执行实现类中的invoke()方法,我们需要把在该invoke()方法中实现调用目标类的目标方法;2.代理角色(连接真实角色的桥梁):实现抽象角色,是真实角色的代理,通过真实角色的角色业务逻辑方法,来实现抽象方法,附加自己的操作。3.真实角色(需要被代理的对象):实现抽象角色,定义真实的角色所要实现的业务逻辑,提供代理角色调用。

2024-06-28 17:16:12 659

原创 Java基础知识-volitile和数据可见性

应用场景:在只涉及可见性,针对变量的操作只是简单的读写(保证操作的原子性)的情况下可以使用volatile来解决高并发问题,如果这时针对变量的操作是非原子的操作,这时如果只是简单的i++式的操作,可以使用原子类atomic类来保证操作的原子性(采用CAS实现),如果是复杂的业务操作,那么舍弃volatile,采用锁来解决并发问题(synchronized或者Lock)。volatile关键字解决的是内存可见性的问题,会使得所有对volatile变量的读写都会直接刷到主存,即保证了变量的可见性。

2024-06-28 04:00:00 257

原创 Java基础知识-线程同步和锁

b.当有多个线程读写文件时,读操作和写操作会发生冲突现象,写操作和写操作会发生冲突现象,但是读操作和读操作不会发生冲突现象如果多个线程都只是进行读操作,所以当一个线程在进行读操作时,其他线程只能等待无法进行读操作。synchronzied锁的是对象,锁是保存在对象头里面的,根据对象头数据来标识是否有线程获得锁/争抢锁;jdk1.6以前:重量级锁(无法取得锁即挂起,性能差) jdk1.6之后:优化了性能:给它的锁加入了四种状态,无锁状态 -> 偏向锁 -> 轻量级锁 -> 重量级锁,自动进行锁的升级。

2024-06-28 03:00:00 447

原创 Java基础知识-线程

应用场景:在只涉及可见性,针对变量的操作只是简单的读写(保证操作的原子性)的情况下可以使用volatile来解决高并发问题,如果这时针对变量的操作是非原子的操作,这时如果只是简单的i++式的操作,可以使用原子类atomic类来保证操作的原子性(采用CAS实现),如果是复杂的业务操作,那么舍弃volatile,采用锁来解决并发问题(synchronized或者Lock)。当你调用 run()方法的时候,只会是在原来的线程中调用,没有新的线程启动,start()方法才会启动新线程。死亡的线程不可再次复生。

2024-06-27 11:38:59 458

原创 Java基础知识-集合类

当我们创建 hashmap 时 会先创建一个数组,当我们用 put 方法存数据时,先根据 key 的 hashcode 值计算出 hash 值,然后用这个哈希值确定在数组中的位置,再把 value 值放进去,如果这个位置本来没放 东西,就会直接放进去,如果之前就有,就会生成一个链表,把新放入的值放在头部,当用 get 方法取值时,会先根据 key 的 hashcode 值计算出 hash 值,确定位置,再根据 equals 方法从该位置上的链表中取出该 value 值。di 是产生冲突的时候的增量序列。

2024-06-27 10:24:52 993

原创 8.C语言的循环

而且 goto 语句不建议滥用,能不用就不用,因为 goto 语句可以打乱程序原本的执行顺序,这大大降低了程序的可读性,提高了改错成本。或者你就理解为覆盖,但是新的 i 开辟的是新的内存,它不会真的覆盖旧的 i )。让 for 语句声明自己的循环控制变量通常是一个好办法:这样方便且程序的可读性更强,但是如果在 for 循环退出后还要使用该变量,则只能使用以前的 for 语句格式。除非循环体内有控制循环的语句(break,return,goto)或者调用了导致程序终止的函数,非则上面的循环永远不会结束。

2024-06-26 18:34:07 954

原创 7.C语言的选择语句

注意: 表达式 i < j < k 在 C 语言中是合法的,但是可能不是你所期望的含义。C 语言的关系运算符(relational operator)和数学上的 >,

2024-06-26 18:10:32 897

原创 6.C语言表达式

根据 C89 的标准,如果两个操作数中有一个是负数,那么除法结果既可以向上取整也可以向下取整(例如,-9 / 7 的结果既可以是 -1 也可以是 -2);i % j 的符号与具体实现有关(例如,-9 % 7 可以是 -2 也可以是 5)。在 C99 中,除法的结果总是向零取整(因此,-9 / 7 的结果是 -1);我特意测试了以下,9 % -7 的值是 2,-9 % -7 的值还是 2)。不同的编译器给出的结果可能是不同的。但是,当子表达式改变了某个操作数的值时,产生的值就可能不一致了。

2024-06-25 15:54:02 818

原创 5. C语言数据类型

八进制与十六进制只是书写数的方式,他们不会对数的实际存储方式产生影响(整数都是以二进制形式存储的)。因此,为了改进这个程序,我们可以将 int 型的 a,b,sum 都变为 long long 型(考虑到 32 位机器的 long 与 int 大小是相同的。对于 8 位 的微型计算机(如:最初的苹果机),1 字长 只有 8 位,从那以后,个人计算机的字长增至 16 位,32位,直至目前的 64位。例如,字符 'A' 的值是 65,'a' 的值是 97,'0' 的值是48,' ' 的值是 32。

2024-06-25 15:02:16 931

MySQL索引失效的11种情况.docx

MySQL索引失效的11种情况.docx

2024-07-22

员工工资管理系统-C语言课程设计.rar

员工工资管理系统-C语言课程设计.rar

2024-07-22

P2P信贷平台违约预测数据集-可用于信贷风控和违约预测.rar

P2P信贷平台违约预测数据集-可用于信贷风控和违约预测.rar

2024-07-22

Elasticsearch性能优化汇总.docx

Elasticsearch性能优化汇总.docx

2024-07-22

基于PyTorch的中文聊天机器人源码+数据集.rar

基于PyTorch的中文聊天机器人源码+数据集.rar

2024-07-22

LeetCode100道算法汇总包含算法解析.rar

LeetCode100道算法汇总包含算法解析.rar

2024-07-22

基于多任务卷积网络(MTCNN)和Center-Loss的多人实时人脸检测和人脸识别系统.rar

基于多任务卷积网络(MTCNN)和Center-Loss的多人实时人脸检测和人脸识别系统.rar

2024-07-22

Hadoop 3.3.2 离线安装.docx

Hadoop 3.3.2 离线安装.docx

2024-07-22

SpringClould服务注册与发现eureka+nacos+zk总结.rar

SpringClould服务注册与发现eureka+nacos+zk总结.rar

2024-07-22

Mysql5.7.42一键安装脚本.docx

Mysql5.7.42一键安装脚本.docx

2024-07-22

ChatGPT大模型学习笔记.rar

GPT的本质是把transformer的解码器拿出来,然后在没有标号的大量文本数据训练一个语言模型,来获得一个预训练模型,然后再用它在子任务上作微调。\ - 在transformer出现后,GPT 把transformer的解码器拿出来成为了GPT这个模型。 - 之后BERT把transformer的编码器拿出来做成了BERT这个模型,BERT的基础模型对标的是GPT,在可学习参数规模基本一样的情况下,效果比GPT更好。BERT的large模型甚至比它的基础模型更好。 - 在之后又出现了GPT2和GPT3,技术路线基本不变(具体指依旧使用transformer的解码器),可学习参数和样本规模越变越大,效果也越来越好。 - GPT2的特点是适合做zero-shot,指的是模型在没有进行显式训练的情况下,能够对之前从未见过的类别或任务进行推理和泛化。传统上,模型只能在训练数据中出现过的类别上进行准确预测,而zero-shot学习推动了模型在未见示例的情况下进行预测的能力。 - GPT3的特点是是在后续子任务的训练上权重是不会改变的。主要原因是因为GPT3的可学习参数规模达到了千亿级别,在这

2024-07-22

Java+Servlet学生信息管理系统全部源码+SQL+课程设计文档.rar

本系统利用Java Web技术实现了学生信息管理系统,具有简单的学生信息管理功能。 实现了以下功能模块: 院系信息管理模块,学生信息管理模块,课程信息管理模块,成绩管理模块 并能根据登入用户的权限自动展示相关操作。 技术栈 JSP + Servlet HTML5 + CSS3 + JavaScript + Bootstrap + Jquery

2024-07-22

Java基础学习笔记-包含全部代码和文档

Java基础学习笔记-包含全部代码和文档

2024-07-17

编译安装nginx-1.24.0.docx

编译安装nginx-1.24.0.docx

2024-07-17

Java Spring AOP 面向切面编程的4种实现

动态代理是一种在运行时创建代理对象的技术,通常用于实现AOP(面向切面编程)中的横切关注点,比如日志、性能监控等。以下是几种常见的动态代理实现: JDK动态代理: Java通过java.lang.reflect.Proxy类提供了一种简单的动态代理机制。首先需要获取到目标对象的Class对象,然后创建InvocationHandler接口的实例,这个实例包含对目标方法的实际处理逻辑。最后,通过Proxy.newProxyInstance()方法结合这两个组件生成代理对象。 CGLIB (Class-Graph Library): 这是一个强大的字节码库,可以修改已加载的类并添加新的方法或属性。CGLIB基于继承的方式创建代理,它生成的是目标类的子类,并在子类中拦截方法的调用。 Spring AOP (面向切面编程框架): Spring框架内建了支持动态代理的功能,使用@AspectJ注解可以轻松地创建AOP代理。Spring AOP既支持JDK动态代理也支持CGLIB,会根据目标类是否实现了接口选择合适的底层技术。 Guice / Dagger: 如果你在使用Google的依赖

2024-07-16

基于AoI器件的SPI PCB板工业缺陷检测数据集

表面贴装技术(SMT)是一种自动化电子电路生产的技术,其中元件被安装或放置在印刷电路板的表面上。锡膏印刷(SPP)是SMT中最精细的阶段。它在电子电路板的焊盘上打印焊膏。因此,SPP之后是焊膏检查(SPI)阶段,以检测缺陷。SPI扫描印刷电路板是否有漏浆/少浆、焊盘之间的桥接、未对准等。必须检测出有异常的线路板,不得处理状态良好的线路板。因此SPI要求高精度和高召回率。收集了230多个图板,并将其增强为1200多个图像。

2024-07-10

CNN深度学习检测胸部疾病的项目数据集

这是一个关于使用机器学习和深度学习检测胸部癌症的项目(CNN)。 我们使用人工智能模型对患者是否患有癌症进行分类和诊断。 我们向他们提供有关癌症类型和治疗方法的信息。 我们试图收集所需的所有数据,使模型能够轻松地对图像进行分类。 所以我不得不从许多资源中获取数据来启动这个项目。 我研究了很多,从许多资源中收集了所有数据,并为CNN清理了这些数据。

2024-07-10

北京大学人机交互开放实验室发布的PCB缺陷数据集.txt

北京大学人机交互开放实验室发布了PCB缺陷数据集。 6种类型的缺陷是由Adobe Systems发布的图形编辑器photoshop制作的。数据集中定义的缺陷有:缺孔、老鼠咬、断路、短路、毛刺和假铜 这是一个公共的合成PCB数据集,包含1386张带有6种故障(漏孔、老鼠咬、开路、短路、杂散铜)的图像,用于检测、分类和配准任务。

2024-07-10

混合型晶圆缺陷探测数据集

晶圆图的缺陷模式识别(DPR),尤其是混合型缺陷,对于确定生产缺陷的根本原因至关重要。我们在一家晶圆制造厂收集了大量的晶圆图数据。这些晶片映射是通过测试探针测试晶片上每个管芯的电性能而获得的。然而,实际收集的晶片图的各种图案的数量分布之间存在很大差异。 为了保持各种数据模式之间的平衡,我们使用生成对抗性网络生成一些晶圆图,以保持模式之间样本数量的平衡。最后,形成了约38000个混合型晶圆图缺陷数据集,用于识别混合型晶圆表缺陷,并协助研究晶圆制造过程中缺陷的原因。为了方便相关领域的研究人员、学生和爱好者更好地了解晶圆制造过程中缺陷的原因,这个混合型晶圆图缺陷数据集供您研究。

2024-07-10

单个和混合缺陷模式的晶圆映射数据集

硅晶圆制造中单个和混合缺陷模式有效分类的深度神经网络。 一个干净、平衡的晶片图数据集,包含427539个晶片图 输入是尺寸为56 x 56的RGB晶片图像的张量 输出是一个编码的热点,作为一个1 x 36形状的张量

2024-07-10

智慧工地–安全帽人头检测数据集.txt

通过检测人员和安全帽的存在来提高工作安全性。 该数据集包含以下3个类的5000张带有PASCAL VOC格式边界框注释的图像:

2024-07-10

用于质量检查的铸件产品图像数据

该数据集是铸件制造产品的数据集。 铸造是一种制造过程,通常将液体材料倒入模具中,模具中有一个所需形状的空腔,然后使其固化。 收集此数据的原因是铸件缺陷!! 铸造缺陷是金属铸造过程中不希望出现的不规则现象。 铸件中存在许多类型的缺陷,如气孔、针孔、毛刺、收缩缺陷、模具材料缺陷、浇注金属缺陷、冶金缺陷等。 在铸造工业中,缺陷是不需要的。为了去除这种有缺陷的产品,所有行业都有自己的质量检验部门。但主要问题是这种检查过程是手动进行的。这是一个非常耗时的过程,由于人为的准确性,这不是100%准确的。这可能是因为整个订单被拒绝。因此,这给公司带来了巨大的损失。 我们决定使检查过程自动化,为此,我们需要为这个问题建立深度学习分类模型。

2024-07-10

工业铸造产品缺陷预测图像数据集

该数据集是铸件制造产品的数据集。 铸造是一种制造过程,通常将液体材料倒入模具中,模具中有一个所需形状的空腔,然后使其固化。 收集此数据的原因是铸件缺陷!! 铸造缺陷是金属铸造过程中不希望出现的不规则现象。 铸件中存在许多类型的缺陷,如气孔、针孔、毛刺、收缩缺陷、模具材料缺陷、浇注金属缺陷、冶金缺陷等。 在铸造工业中,缺陷是不需要的。为了去除这种有缺陷的产品,所有行业都有自己的质量检验部门。但主要问题是这种检查过程是手动进行的。这是一个非常耗时的过程,由于人为的准确性,这不是100%准确的。这可能是因为整个订单被拒绝。因此,这给公司带来了巨大的损失。 我们决定使检查过程自动化,为此,我们需要为这个问题建立深度学习分类模型。

2024-07-10

一种基于图像对猫和狗进行智能分类的数据集

此数据集包含两类图像“猫”和“狗”。这可以最好地用于计算机视觉中的二分类问题集。

2024-07-10

选课系统-C语言课程设计4

选课系统-C语言课程设计4

2024-06-27

力扣-LeetCode全套2000题目解答C++和Java版.rar

力扣-LeetCode全套2000题目解答C++和Java版.rar

2024-06-26

学生信息管理系统-JavaWeb课程设计-完整代码+初始化SQL+文档

本系统利用Java Web技术实现了学生信息管理系统,具有简单的学生信息管理功能。 实现了以下功能模块: 院系信息管理模块,学生信息管理模块,课程信息管理模块,成绩管理模块 并能根据登入用户的权限自动展示相关操作。

2024-06-26

大数据课程设计-MapReduce实现基于物品相似度的协同过滤推荐-全部代码和数据.rar

ItermCF的基本思想 基于物品相似度的协同过滤推荐的思想大致可分为两部分: 1.计算物与物之前的相似度 2.根据用户的行为历史,给出和历史列表中的物品相似度最高的推荐 对于物品 A,根据所有用户的历史偏好,喜欢物品 A 的用户都 喜欢物品 C,得出物品 A 和物品 C 比较相似,而用户 C 喜欢物品 A,那么可以推断出 用户 C 可能也喜欢物品 C。

2024-06-20

大数据课程设计-Hadoop-MapReduce实现sql的统计、groupby和join-全部源码

大数据课程设计-Hadoop-MapReduce实现sql的统计、groupby和join-全部源码

2024-06-20

基于MapReduce的网站访问数据指标统计-Hadoop-大数据课程设计-全部源码和数据.rar

程序中分别对五个kpi指标进行统计操作: 1.browser:用户使用的浏览器统计 2.ips:页面用户独立ip数统计 3.pv:网站pv量统计 4.source:用户来源网址统计 5.time:时间段用户访问量统计

2024-06-20

选课系统-C语言课程设计3

选课系统-C语言课程设计3

2024-06-20

学生选课系统-C语言课程设计

学生选课系统-C语言课程设计

2024-06-20

马里奥游戏-C语言课程设计

马里奥游戏-C语言课程设计

2024-06-20

工资管理系统-C语言课程设计.rar

工资管理系统-C语言课程设计.rar

2024-06-19

图书管理系统-C++课程设计2

图书管理系统-C++课程设计2

2024-06-19

超市库存管理系统-C语言课程设计2

超市库存管理系统-C语言课程设计2

2024-06-19

选课系统-C语言课程设计2

选课系统-C语言课程设计2

2024-06-19

选课系统-C语言课程设计

选课系统-C语言课程设计

2024-06-19

图书管理系统-C++课程设计

图书管理系统-C++课程设计

2024-06-19

超市库存管理系统-C语言课程设计

超市库存管理系统-C语言课程设计

2024-06-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除