避免死锁的方法有哪些
mysql表死锁的解决方法

mysql表死锁的解决方法MySQL的死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,这些事务都将无法向前推进。
以下是解决MySQL死锁的一些常用方法:1. 重新尝试操作:对于很多简单的死锁情况,最简单的解决办法就是中断其中一个事务并重新开始。
如果应用程序设计得当,可以使用重试逻辑来自动解决这类死锁。
2. 使用低隔离级别:死锁通常在可序列化的隔离级别中出现,降低隔离级别可以减少死锁的机会。
但这同时也增加了其他的问题,如幻读和不可重复读。
3. 设置锁超时时间:通过设置`innodb_lock_wait_timeout`(InnoDB存储引擎)或`lock_wait_timeout`(MyISAM存储引擎)来定义事务等待锁的最长时间。
如果超过这个时间,事务就会自动失败并返回一个死锁错误。
4. 优化查询:确保SQL查询是优化过的,避免长时间持有锁或造成锁争用的情况。
例如,尽量避免在事务中执行大量的更新操作。
5. 避免在事务中使用用户输入:如果用户输入可能导致死锁,应尽量避免在事务中使用用户输入。
6. 使用适当的索引:确保查询使用到了正确的索引,这样可以减少锁定的行数,从而减少死锁的机会。
7. 分析并解决死锁:使用`SHOW ENGINE INNODB STATUS`命令来分析当前的InnoDB状态,找出导致死锁的原因。
根据分析结果,可能需要重新设计查询、更改事务的顺序或更改数据库的结构来解决死锁问题。
8. 考虑应用程序逻辑:有时候,应用程序的逻辑可能会导致死锁。
例如,如果两个事务都需要更新表中的同一行,那么它们就会死锁。
在这种情况下,可能需要重新设计应用程序的逻辑来避免这种情况。
9. 监控和告警:使用工具如Percona Monitoring and Management (PMM)、Zabbix等来监控数据库的健康状况,并在检测到死锁时发送告警。
10. 升级MySQL版本:随着MySQL版本的迭代,一些死锁问题可能已经被修复。
linux内核死锁的解决方法

linux内核死锁的解决方法Linux内核是一个高度复杂的操作系统,包含了许多并发执行的进程和线程。
随着系统的复杂性增加,内核死锁的风险也会增加。
内核死锁是指系统中的多个进程或线程被无限期地阻塞,因为它们都在争用有限的资源。
在本文中,我将讨论Linux内核死锁的解决方法。
1.简单而可行的解决方法是使用预防措施来防止死锁的发生。
这包括规定所有的线程和进程在访问共享资源之前必须按特定顺序获取锁。
这种方法可以避免循环等待,并且是一种实现死锁解决的可行方法。
2.一种常用的死锁解决方法是引入资源分级的概念。
在这种方法中,每个资源都被分配一个唯一的数字或排序键。
当一个线程或进程需要多个资源时,它必须按照升序获取这些资源,并按照降序释放它们。
这种技术称为资源分级或资源流畅。
3.另一种解决死锁的方法是引入超时机制。
当一个线程或进程请求一个资源时,如果在一定时间内没有获取到资源,它可以取消请求并放弃当前的锁定,然后重新尝试请求。
这种超时机制可以避免线程或进程陷入无限期的等待状态。
4.死锁检测和恢复是另一种可行的解决方法。
在这种方法中,系统定期检查是否存在死锁,并根据检测到的死锁信息采取适当的措施。
例如,系统可以选择终止其中一个或多个进程来消除死锁。
5.引入死锁避免机制也是解决死锁问题的一种方法。
在这种方法中,系统在运行时分析当前系统状态,并尝试避免潜在的死锁情况。
例如,如果系统检测到将请求锁定的进程或线程引起死锁的可能性较高,则可以拒绝该请求,从而避免死锁的发生。
6.公平性是另一个需要考虑的因素。
在很多情况下,死锁发生的原因是因为存在某种资源分配的不公平性。
因此,在解决死锁问题时,需要确保资源能够按照公平的方式分配给不同的进程或线程,从而减少死锁的风险。
总之,Linux内核死锁是一个很复杂的问题,需要综合使用多种方法才能有效地解决。
通过采取预防措施、引入资源分级和超时机制、进行死锁检测和恢复、使用死锁避免机制以及确保公平性,可以大大降低死锁的风险并提高系统的稳定性和可靠性。
死锁实验报告

死锁实验报告死锁实验报告引言:在计算机科学领域,死锁是一种常见的问题,它指的是多个进程或线程因争夺资源而陷入无限等待的状态。
为了深入了解死锁的原因和解决方法,我们进行了一项死锁实验。
本报告将详细介绍实验的目的、方法、结果和讨论。
实验目的:本次实验的目的是通过模拟多个进程之间的资源竞争,观察死锁的发生情况,并分析其原因。
通过实验,我们希望能够更好地理解死锁的概念和特性,并探索解决死锁问题的方法。
实验方法:为了模拟死锁的发生,我们设计了一个简单的场景。
假设有两个进程A和B,它们分别需要两个资源X和Y来完成任务。
进程A首先请求资源X,然后请求资源Y;而进程B则相反,首先请求资源Y,然后请求资源X。
这样,当两个进程同时运行时,它们会互相等待对方释放资源,从而导致死锁的发生。
实验结果:在实验过程中,我们使用了一个模拟器来模拟进程的执行和资源的分配情况。
经过多次运行实验,我们观察到死锁的发生。
当进程A和进程B同时运行时,它们会互相等待对方释放资源,最终导致两个进程都无法继续执行下去,形成死锁状态。
讨论:通过对实验结果的观察和分析,我们可以得出以下结论和讨论。
1. 死锁的原因:死锁的发生是因为两个进程互相等待对方释放资源,形成了一个循环等待的情况。
这种情况下,无论是进程A还是进程B都无法继续执行下去,导致了死锁的发生。
2. 死锁的必要条件:根据实验结果和理论知识,我们知道死锁发生的必要条件包括互斥、占有和等待。
在实验中,资源X和资源Y的互斥性导致了互斥条件的满足;进程A和进程B分别占有资源X和资源Y,满足了占有条件;而它们互相等待对方释放资源,满足了等待条件。
因此,死锁的必要条件在实验中得到了满足。
3. 解决死锁的方法:针对死锁问题,我们可以采取多种方法来解决。
例如,我们可以引入资源的预分配和剥夺机制,以避免进程无限等待资源。
另外,我们还可以采用资源的有序分配策略,通过对资源的合理排序来避免死锁的发生。
此外,还可以使用死锁检测和死锁恢复算法来及时发现和解决死锁问题。
二级封锁协议能否避免死锁

竭诚为您提供优质文档/双击可除二级封锁协议能否避免死锁篇一:数据库中的封锁协议并发产生的数据不一致有:丢失修改,读脏数据,不可重复读两种锁:s锁(共享锁,读锁),x锁(排它锁,写锁)加s锁后,本事务就只能读取数据而不能修改。
其他事务可以加s锁来读取数据,但不能加x锁修改数据。
即:只要数据上有s锁,任何事务都只能再对其加s锁读取,而不能加x锁修改。
加x锁后,本事务可以读取和修改数据。
其他事务不能加任何锁,从而也不能读取和修改数据。
封锁协议有:三级封锁协议以及两段锁协议一级封锁协议:写数据前加x锁,事务结束释放x锁。
解决丢失修改问题。
二级封锁协议:一级之上,读数据前加s锁,读完释放s锁。
一级之上解决读脏数据问题。
三级封锁协议:二级之上,事务结束才释放s锁。
二级之上解决不可重复读问题。
两段锁协议(2pl):读数据前加s锁,写数据前加x锁,事务结束时才释放。
当要修改数据时,事务应对已加的s锁升级为x锁。
事务释放一个封锁后,不再申请其它任何封锁。
即一个事务如果对不同数据加锁,解锁都是放到后面一块儿进行的。
注意,以前一直弄错,这儿是一个事务,如果是并发事务,a事务的解锁可以放到b事务之前。
两段锁协议解决的是事务并发时的正确调度,并不能解决死锁。
注意:如果两个事务都对同一数据有读和写,那么可以不加s锁,直接上x锁。
篇二:并发控制课后答案第八章并发控制习题解答和解析1.1.在数据库中为什么要并发控制答:数据库是共享资源,通常有许多个事务同时在运行。
当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。
若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。
所以数据库管理系统必须提供并发控制机制。
2.2.并发操作可能会产生哪几类数据不一致用什么方法能避免各种不一致的情况答:并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读"脏"数据。
(1)丢失修改(lostupdate)两个事务t1和t2读入同一数据并修改,t2提交的结果破坏了(覆盖了)t1提交的结果,导致t1的修改被丢失。
Go语言并发安全最佳实践面试题

Go语言并发安全最佳实践面试题面试题一:什么是并发安全?并发安全是指在多线程或并发环境下,程序仍然能够正确、可靠地执行并达到预期的结果,而不会产生数据竞争、死锁、活锁等并发问题。
在Go语言中,通过一些最佳实践可以保证程序的并发安全性。
面试题二:Go语言中的并发安全问题有哪些?在Go语言中,常见的并发安全问题包括:1. 数据竞争:多个goroutine同时读写同一个共享资源,导致不可预期的结果。
2. 死锁:多个goroutine因相互依赖的资源而无限等待的情况。
3. 活锁:多个goroutine在相同的资源上互相竞争,导致无法做出进一步的进展。
4. 资源泄漏:goroutine未正确释放所持有的资源,导致资源耗尽。
面试题三:如何避免数据竞争?Go语言提供了一些机制来避免数据竞争:1. 互斥锁:通过互斥锁(Mutex)来确保同一时间只有一个goroutine可以访问共享资源。
2. 读写锁:通过读写锁(RWMutex)来允许多个goroutine同时读取共享资源,但只有一个goroutine可以进行写操作。
3. 原子操作:使用原子操作(atomic)来对共享资源进行读写,保证操作的原子性,避免竞争条件。
面试题四:如何避免死锁?避免死锁的方法有:1. 避免循环依赖:当多个goroutine之间存在资源依赖关系时,确保资源的获取顺序是一致的,避免循环依赖。
2. 使用超时机制:在申请资源的操作上设置超时时间,如果在规定时间内无法获得所需资源,可以及时释放已占用的资源。
3. 使用资源剥夺策略:当无法获取所需资源时,可以主动释放已占有的资源,避免死锁的发生。
面试题五:如何避免活锁?避免活锁的方法有:1. 引入随机因素:在资源请求时,引入随机因素来打破竞争的均势,避免多个goroutine一直处于竞争状态。
2. 限制最大重试次数:当多个goroutine在竞争同一资源时,可以限制最大的重试次数,如果达到限制次数后仍然无法获取资源,可以采取其他策略。
数据库中死锁的检测与解决方法

数据库中死锁的检测与解决方法死锁是数据库中常见的并发控制问题,指的是两个或多个事务在互相等待对方释放资源或锁的状态,导致所有事务无法继续执行的情况。
数据库中的死锁会导致资源浪费、系统性能下降甚至系统崩溃。
因此,死锁的检测与解决方法是数据库管理中非常重要的一环。
1. 死锁的检测方法死锁的检测旨在及时发现死锁并采取措施进行解决。
以下是几种常见的死锁检测方法。
1.1 死锁检测图算法死锁检测图算法是通过构建资源分配图以及等待图来检测死锁。
资源分配图以资源为节点,以事务与资源之间的分配关系为边;等待图以事务为节点,以事务之间等待请求关系为边。
如果存在一个循环等待的环,那么就可以判断系统中存在死锁。
可以采用深度优先搜索或广度优先搜索的算法遍历图,查找是否存在环。
1.2 超时监控方法超时监控方法是通过设定一个时间阈值,在事务等待资源的过程中进行计时。
如果某个事务等待资源的时间超过阈值,系统将判断该事务可能存在死锁,并采取相应的措施解锁资源。
1.3 等待图算法等待图算法是通过分析等待图来检测死锁。
等待图的构建是以事务为节点,以资源之间的竞争关系为边。
如果图中存在一个有向环,那么就可以判断系统中存在死锁。
2. 死锁的解决方法一旦死锁被检测到,必须采取措施加以解决。
以下是几种常见的死锁解决方法。
2.1 死锁剥夺死锁剥夺是通过终止一个或多个死锁事务来解决死锁。
首先需要选择一个死锁事务,然后终止该死锁事务并释放其所占用的资源。
这种方法会造成一些事务的回滚,需要谨慎操作。
2.2 死锁预防死锁预防是通过对资源的分配与释放进行约束,从而避免死锁的发生。
例如,可以采用事务串行化,即每次只允许一个事务执行;或者采用事务超时,即设定一个时间阈值,如果事务等待时间超过阈值,则自动结束事务。
2.3 死锁检测与恢复死锁检测与恢复是在发生死锁后,通过死锁检测算法找到死锁并进行恢复。
方法可以是终止一个或多个死锁事务,也可以是通过资源抢占来解除死锁。
Oracle常见死锁发生的原因以及解决方法
Oracle常见死锁发生的原因以及解决方法死锁是指在并发程序中,两个或多个进程因为争夺系统资源而陷入无限等待的状态,从而无法继续执行下去。
在Oracle数据库中,死锁是一个非常常见的问题,它会导致系统性能下降,甚至造成系统崩溃。
本文将详细介绍Oracle常见死锁发生的原因以及解决方法。
一、死锁发生的原因1.竞争资源:当多个进程同时请求相同的资源时,可能会导致死锁的发生。
例如,如果两个进程同时请求一个表的写锁,那么它们就会陷入死锁状态。
2.锁的顺序:当多个进程按照不同的顺序请求锁时,可能会导致死锁的发生。
例如,如果进程A先请求资源X,再请求资源Y,而进程B先请求资源Y,再请求资源X,那么它们就会陷入死锁状态。
3.锁的持有时间:当一个进程持有一个锁,并且在等待其他资源时继续保持该锁,可能会导致死锁的发生。
例如,如果进程A持有资源X的锁,并且在等待资源Y时继续保持该锁,而进程B持有资源Y的锁,并且在等待资源X时继续保持该锁,那么它们就会陷入死锁状态。
二、死锁的解决方法1. 死锁检测和解除:Oracle数据库提供了死锁检测和解除的机制。
当一个进程请求一个资源时,数据库会检查是否存在死锁。
如果存在死锁,数据库会选择一个进程进行回滚,解除死锁状态,并且通知其他进程重新尝试获取资源。
2.超时设置:为了避免死锁的发生,可以设置超时时间。
当一个进程请求一个资源时,如果在指定的超时时间内无法获取资源,那么就放弃该请求,并且释放已经持有的资源。
这样可以防止死锁的发生,但是会增加系统的开销。
3.锁的顺序:为了避免死锁的发生,可以规定所有进程按照相同的顺序请求锁。
例如,可以规定所有进程按照资源的名称进行排序,然后按照顺序请求锁。
这样可以避免死锁的发生,但是可能会影响系统的性能。
4.锁的粒度:为了避免死锁的发生,可以尽量减小锁的粒度。
例如,可以将一个大的锁分解成多个小的锁,这样可以减少锁的冲突,降低死锁的概率。
但是需要注意的是,锁的粒度过小可能会导致系统的性能下降。
java死锁的解决方法
Java 死锁的解决方法及示例本文介绍了 Java 死锁的原因及几种常用的解决方法,并通过示例代码进行了说明。
Java 死锁的解决方法及示例死锁是指两个或多个进程(线程)因竞争资源而陷入的无法进行的状态。
在 Java 编程中,死锁通常是由于多个线程以不同的顺序请求共享资源所导致的。
为了解决死锁问题,Java 提供了多种方法,下面我们来一一介绍。
一、死锁的原因在 Java 中,死锁产生的主要原因是多个线程以不同的顺序请求共享资源。
例如,当线程 A 持有资源 1 并请求资源 2 时,线程 B 持有资源 2 并请求资源 1,此时两者都会等待对方释放资源,从而导致死锁。
二、解决死锁的方法1. 互斥锁互斥锁是 Java 中最基本的死锁解决方法。
通过给共享资源加锁,确保同一时刻只有一个线程可以访问资源。
当一个线程获取了锁后,其他线程只能在锁释放后才能访问资源。
这种方法可以有效避免死锁的发生。
2. 显式锁显式锁是 Java 中使用的一种锁,它比互斥锁更为灵活。
显式锁可以通过 try-finally 语句来确保锁的正确释放。
在 try-finally 语句块中,可以对共享资源进行操作,当操作完成时,无论是正常结束还是异常结束,都会自动释放锁。
这样可以避免因忘记释放锁而导致的死锁问题。
3. 信号量信号量是 Java 中用于处理多线程同步问题的一种机制。
通过设置一个计数器,表示某个共享资源的可用数量。
当一个线程获取到信号量时,计数器减 1;当线程释放信号量时,计数器加 1。
如果计数器为 0,则表示没有可用资源,线程需要等待其他线程释放资源。
这种方法可以有效避免死锁的发生。
4. 条件变量条件变量是 Java 中用于处理多线程同步问题的另一种机制。
通过设置一个布尔值,表示某个条件是否满足。
当一个线程判断条件不满足时,会释放所持有的资源并阻塞等待;当条件满足时,该线程会被唤醒并继续执行。
这种方法可以有效避免死锁的发生。
三、示例代码下面通过一个示例代码来说明 Java 死锁的解决方法。
计算机操作系统(汤小丹第三版)第3章 处理机调度与死锁
m
Ci P N i 1 i
25
m
第三章 处理机调度与死锁
3.3.2 实时调度算法的分类
1、非抢占式调度算法
图 3-8 非抢占式实时进程调度
26
第三章 处理机调度与死锁
2、抢占式调度算法
图 3-8 抢占式实时进程调度
27
第三章 处理机调度与死锁
3.4.3 常用的几种实时调度算法
1、 最早截止时间优先即EDF(Earliest Deadline First)算法
11
第三章 处理机调度与死锁
3.2.2 选择调度方式和调度算法的若成 这段时间间隔。
1 i (2)平均周转时间: T Ti n i 1
W0 T
(3)带权周转时间:作业周转时间T与系统为它提供 的服务时间TS之比:
作业 调度 后 备 队 列
时间片完
进程调度 进程完成
就 绪 队 列
CPU
事件1出现
等待事件1
事件2出现 … 事件n出现 … …
等待事件2 … 等待事件n
图 3-2 具有高、低两级调度的调度队列模型
9
第三章 处理机调度与死锁
3、 同时具有三级调度的调度队列模型
作业调度 后备队列 批量作业 交互型作业 中级调度 时间片完 就绪队列 进程完成
进程名 到达 时间 A 0 B C D E 1 2 3 4 服务 时间 4 3 5 2 4 带权平均 周转时间
22
完成 时间
周转 时间
带权周 转时间
平均周转时间
第三章 处理机调度与死锁
2、多级反馈队列调度算法 就绪队列1 S1 S2 S3 至CPU 至CPU
就绪队列2 就绪队列3
agv冲突与死锁方法
agv冲突与死锁方法
AGV(自动导引车)冲突和死锁是物流自动化系统中常见的问题,下面提供了一些解决AGV冲突和死锁的方法:
解决AGV冲突的方法:
1. 路径规划:通过合理的路径规划,可以减少AGV之间的冲突。
对AGV
行驶路径进行优化,避免出现重复和交叉的情况。
2. 任务调度:合理调度AGV的任务顺序,确保一个时间点只有一个AGV
在执行任务。
可以使用优先级调度、动态任务分配等方法。
3. 防碰撞装置:在AGV上安装防碰撞装置,当检测到周围有其他障碍物时,自动调整行驶路线或者停车。
4. 通讯协调:通过通讯技术实现AGV之间的信息共享和协同工作。
通过无
线通讯设备,让AGV能够实时了解周围情况,主动避开冲突区域。
5. 智能控制:采用智能控制算法,如模糊控制、神经网络等,对AGV进行
控制,使其能够自主决策和调整行驶路线,避免冲突。
解决AGV死锁的方法:
1. 增加控制点:在系统中增加一些控制点,使AGV在遇到障碍物时能够有更多的选择,避免死锁的发生。
控制点可以是其他工作站、中继站或者特定的检测装置。
2. 动态路径规划:当AGV遇到死锁情况时,可以重新规划行驶路径,使其能够绕过死锁区域,继续完成任务。
3. 优先级调度:根据任务的优先级对AGV进行调度,确保高优先级的任务能够优先完成,避免死锁的发生。
4. 设定最大尝试次数:当AGV陷入死锁状态时,可以设定最大尝试次数,在规定次数内未成功解锁则自动回退到起始位置或者选择其他路径。
5. 人工干预:当AGV出现死锁情况时,可以由人工进行干预,通过远程控制或者现场操作来解锁AGV。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
.
.
1.避免死锁的方法有哪些?答案:有一种最简单的就是:全部程序禁用,然后重启自己需要
的程序。用行级锁,不去征用大表的主键,用小事务。
2.在Sybase数据库中注册用户与数据库用户有什么区别?
答案:Sybase中没有注册用户数这个说法,如果是LICENSE中的,技术上可以忽略,用户
数EE版可以设很大,几万,SMB版可以设256个。
3.在MS SQL_Server 数据库中通过什么约束保证数据库的实体完整性
答案:可以通过建立唯一的索引、PRIMARY KEY约束、UNIQUE约束或IDENTITY约束
来实现实体完整性
4.内存有哪几种存储组织结构.请分别加以说明
5.JAVA中的Wait() 和notify()方法使用时应注意些什么?
答案:Wait()和notify():如果条件不满足,则等待。当条件满足时,等待该条件的线程将被
唤醒。一般用在synchronized机制中例如:线程Asynchronized(obj) {while(!condition)
{obj.wait();}obj.doSomething();} 当线程A获得了obj锁后,发现条件condition不满足,无
法继续下一处理,于是线程A就wait()。在另一线程B中,如果B更改了某些条件,使得
线程A的condition条件满足了,就可以唤醒线程A:线程Bsynchronized(obj) {condition =
true;obj.notify();}需要注意的概念是: ◆调用obj的wait(), notify()方法前,必须获
得obj锁,也就是必须写在synchronized(obj) {……} 代码段内。 ◆调用obj.wait()
后,线程A就释放了obj的锁,否则线程B无法获得obj锁,也就无法在synchronized(obj)
{……} 代码段内唤醒A. ◆当obj.wait()方法返回后,线程A需要再次获得obj锁,才
能继续执行。 ◆如果A1,A2,A3都在obj.wait(),则B调用obj.notify()只能唤醒A1,
A2,A3中的一个(具体哪一个由JVM决定)。 ◆obj.notifyAll()则能全部唤醒A1,A2,
A3,但是要继续执行obj.wait()的下一条语句,必须获得obj锁,因此,A1,A2,A3只
有一个有机会获得锁继续执行,例如A1,其余的需要等待A1释放obj锁之后才能继续执行。
◆当B调用obj.notify/notifyAll的时候,B正持有obj锁,因此,A1,A2,A3虽被唤醒,
但是仍无法获得obj锁。直到B退出synchronized块,释放obj锁后,A1,A2,A3中的一
个才有机会获得锁继续执行。
6.用户输入一个整数.系统判断,并输出是负数还是非负数,请设计测试用例.
7.操作系统中的同步和互诉解决了什么问题
答案:同步:各个进程不知对方名字,但通过某些对象(如I/O缓冲区)的共同存取来协同
完成一项任务。 互斥:互斥跟临界资源有关,因为计算机的某些资源有限,所以必须通
过互斥操作防止进程之间竞争临界资源而发生死锁,互斥操作用PV原语实现。
8.UNIX 中init
1.不许用中间变量,把String ABCDE 倒转
public class StringDemo { public static void main(String[]args) { String
str="ABCD"; for (int i = str.length()-1; i >=0; i--) {
str+=String.valueOf(str.charAt(i)); } str=str.substring("ABCD".length(),
str.length()); System.out.println(str); } }
2.10000个数求第2大的数,不许用排序算法
3.排序算法的测试用例
1, 合并有序链表
2, 删除字符串中相邻重复元素
3, 给出了二叉树结构,要求写出广度优先遍历
4, 给定整型数组,写代码找出数组中第二大元素
5, 有关菲波那契数列问题
.
.
1.怎么判断鼠标有没有选中一条线段(如很靠近,鼠标点和线段之间的距离小于5毫米)
2.求一个矩形的中心点和一个点的连线与矩形边的交点坐标(矩形左上角坐标给出,长、宽
给出,中心点坐标可以算出来 ,另外一个点的坐标给出)
3.写一个servlet,要求实现在一个页面中能输入名字,然后页面中返回的结果是“hello,姓
名”。
4.写一个servlet,要求能上传文件,并能将上传的文件保存到指定位置。
业务协同于一体的完整信息化支撑平台。