iOS实现剪贴板操作

在iOS中,可以使用剪贴板实现应用程序之中以及应用程序之间实现数据的共享。比如你可以从iPhone QQ复制一个url,然后粘贴到safari浏览器中查看这个链接的内容。

一、在iOS中下面三个控件,自身就有复制-粘贴的功能:

1、UITextView
2、UITextField
3、UIWebView

二、UIKit framework提供了几个类和协议方便我们在自己的应用程序中实现剪贴板的功能。

1、UIPasteboard:我们可以向其中写入数据,也可以读取数据

2、UIMenuController:显示一个快捷菜单,用来复制、剪贴、粘贴选择的项。

3、UIResponder中的 canPerformAction:withSender:用于控制哪些命令显示在快捷菜单中。

4、当快捷菜单上的命令点击的时候,UIResponderStandardEditActions将会被调用。

三、下面这些项能被放置到剪贴板中

1、UIPasteboardTypeListString —  字符串数组, 包含kUTTypeUTF8PlainText
2、UIPasteboardTypeListURL —   URL数组,包含kUTTypeURL
3、UIPasteboardTypeListImage —   图形数组, 包含kUTTypePNG 和kUTTypeJPEG
4、UIPasteboardTypeListColor —   颜色数组

四、剪贴板的类型分为两种:

系统级:使用UIPasteboardNameGeneral和UIPasteboardNameFind创建,系统级的剪贴板,当应用程序关闭,或者卸载时,数据都不会丢失。

应用程序级:通过设置,可以让数据在应用程序关闭之后仍然保存在剪贴板中,但是应用程序卸载之后数据就会失去。我们可用通过pasteboardWithName:create:来创建。

了解这些之后,下面通过一系列的例子来说明如何在应用程序中使用剪贴板

 

 

例子:

1、复制剪贴文本。

    下面通过一个例子,可以在tableview上显示一个快捷菜单,上面只有复制按钮,复制tableview上的数据之后,然后粘贴到title上。

定义一个单元格类CopyTableViewCell,在这个类的上显示快捷菜单,实现复制功能。

  1. @interface CopyTableViewCell : UITableViewCell {       
  2.     id delegate;   
  3. }   
  4. @property (nonatomic, retain) id delegate;   
  5. @end  
@interface CopyTableViewCell : UITableViewCell {     
	id delegate; 
} 
@property (nonatomic, retain) id delegate; 
@end

//实现CopyTableViewCell :

  1. #import "CopyTableViewCell.h"    
  2. @implementation CopyTableViewCell    
  3. @synthesize delegate;    
  4. - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {       
  5.     if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {     }      
  6.     return self;   
  7. }   
  8.   
  9. - (void)setSelected:(BOOL)selected animated:(BOOL)animated {      
  10.     [super setSelected:selected animated:animated]; }   
  11.   
  12. - (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {       
  13.     [[self delegate] performSelector:@selector(showMenu:) withObject:self afterDelay:0.9f];            
  14.     [super setHighlighted:highlighted animated:animated];    
  15. }   
  16. - (BOOL)canBecomeFirstResponder  {      
  17.     return YES;   
  18. }   
  19.   
  20. - (BOOL)canPerformAction:(SEL)action withSender:(id)sender{       
  21.     if (action == @selector(cut:)){           
  22.         return NO;       
  23.     }else if(action == @selector(copy:)){           
  24.             return YES;       
  25.     } else if(action == @selector(paste:)){           
  26.             return NO;       
  27.     } else if(action == @selector(select:)){           
  28.             return NO;       
  29.     }      else if(action == @selector(selectAll:)){           
  30.             return NO;       
  31.     }     else      {           
  32.     return [super canPerformAction:action withSender:sender];      
  33.     }   
  34. }   
  35. - (void)copy:(id)sender {       
  36.     UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];       
  37.     [pasteboard setString:[[self textLabel]text]]; }   
  38. - (void)dealloc {       
  39.     [super dealloc];   
  40. }   
  41. @end  
  42.    
  43. //定义CopyPasteTextController,实现粘贴功能。   
  44. @interface CopyPasteTextController : UIViewController<UITableViewDelegate> {       
  45.     //用来标识是否显示快捷菜单        
  46.     BOOL menuVisible;       
  47.     UITableView *tableView;   
  48. }    
  49. @property (nonatomic, getter=isMenuVisible) BOOL menuVisible;    
  50. @property (nonatomic, retain) IBOutlet UITableView *tableView;   
  51. @end   
#import "CopyTableViewCell.h" 
@implementation CopyTableViewCell  
@synthesize delegate;  
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {     
	if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {     }    
 	return self; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {    
 	[super setSelected:selected animated:animated]; } 

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {     
	[[self delegate] performSelector:@selector(showMenu:) withObject:self afterDelay:0.9f];          
	[super setHighlighted:highlighted animated:animated];  
} 
- (BOOL)canBecomeFirstResponder  {    
 	return YES; 
} 

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{     
	if (action == @selector(cut:)){         
		return NO;     
	}else if(action == @selector(copy:)){         
			return YES;     
	} else if(action == @selector(paste:)){         
			return NO;     
	} else if(action == @selector(select:)){         
			return NO;     
	}      else if(action == @selector(selectAll:)){         
			return NO;     
	}     else      {         
	return [super canPerformAction:action withSender:sender];    
 	} 
} 
- (void)copy:(id)sender {     
	UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];     
	[pasteboard setString:[[self textLabel]text]]; } 
- (void)dealloc {     
	[super dealloc]; 
} 
@end
 
//定义CopyPasteTextController,实现粘贴功能。
@interface CopyPasteTextController : UIViewController<UITableViewDelegate> {     
	//用来标识是否显示快捷菜单     
	BOOL menuVisible;     
	UITableView *tableView; 
}  
@property (nonatomic, getter=isMenuVisible) BOOL menuVisible;  
@property (nonatomic, retain) IBOutlet UITableView *tableView; 
@end 

实现CopyPasteTextController :

  1. #import "CopyPasteTextController.h"    
  2. #import "CopyTableViewCell.h"     
  3. @implementation CopyPasteTextController   
  4. @synthesize menuVisible,tableView;   
  5. - (void)viewDidLoad {       
  6. [super viewDidLoad];       
  7. [self setTitle:@"文字复制粘贴"];       
  8. //点击这个按钮将剪贴板的内容粘贴到title上        
  9. UIBarButtonItem *addButton = [[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh                                                   target:self                                         
  10.                             action:@selector(readFromPasteboard:)]autorelease];       
  11.     [[self navigationItem] setRightBarButtonItem:addButton];   
  12. }     
  13.   
  14. // Customize the number of sections in the table view.    
  15. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {       
  16.     return 1;   
  17. }    
  18.   
  19. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {       
  20.     return 9;   
  21. }    
  22. // Customize the appearance of table view cells.    
  23. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {       
  24.     static NSString *CellIdentifier =@"Cell";       
  25.     CopyTableViewCell *cell = (CopyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];       
  26.     if (cell == nil) {           
  27.         cell = [[[CopyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];           
  28.     [cell setDelegate:self];       
  29.     }            
  30.     // Configure the cell.        
  31.     NSString *text = [NSString stringWithFormat:@"Row %d", [indexPath row]];       
  32.     [[cell textLabel] setText:text];       
  33.     return cell;   
  34. }    
  35.   
  36. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {       
  37.     if([self isMenuVisible])     {           
  38.     return;       
  39. }       
  40.     [[[self tableView] cellForRowAtIndexPath:indexPath] setSelected:YES  animated:YES];   
  41. }   
  42.   
  43. //显示菜单    
  44. - (void)showMenu:(id)cell {       
  45.     if ([cell isHighlighted]) {           
  46.     [cell becomeFirstResponder];                    
  47.     UIMenuController * menu = [UIMenuController sharedMenuController];           
  48.     [menu setTargetRect: [cell frame] inView: [self view]];           
  49.     [menu setMenuVisible: YES animated: YES];       
  50. }   
  51. }   
  52.   
  53. - (void)readFromPasteboard:(id)sender {       
  54.     [self setTitle:[NSString stringWithFormat:@"Pasteboard = %@",                          
  55.     [[UIPasteboard generalPasteboard] string]]];   
  56. }    
  57. - (void)didReceiveMemoryWarning {       
  58. // Releases the view if it doesn't have a superview.        
  59.     [super didReceiveMemoryWarning];            
  60. // Relinquish ownership any cached data, images, etc that aren't in use.    
  61. }    
  62.   
  63. - (void)viewDidUnload {       
  64.     [super viewDidUnload];       
  65.     [self.tableView release];            
  66. // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.        
  67. // For example: self.myOutlet = nil;    
  68. }  
#import "CopyPasteTextController.h" 
#import "CopyTableViewCell.h"  
@implementation CopyPasteTextController 
@synthesize menuVisible,tableView; 
- (void)viewDidLoad {     
[super viewDidLoad];     
[self setTitle:@"文字复制粘贴"];     
//点击这个按钮将剪贴板的内容粘贴到title上     
UIBarButtonItem *addButton = [[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh                                      			 target:self                                       
							action:@selector(readFromPasteboard:)]autorelease];     
	[[self navigationItem] setRightBarButtonItem:addButton]; 
}   

// Customize the number of sections in the table view. 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {     
	return 1; 
}  

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {     
	return 9; 
}  
// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {     
	static NSString *CellIdentifier =@"Cell";     
	CopyTableViewCell *cell = (CopyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];     
	if (cell == nil) {         
		cell = [[[CopyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];         
	[cell setDelegate:self];     
	}          
	// Configure the cell.     
	NSString *text = [NSString stringWithFormat:@"Row %d", [indexPath row]];     
	[[cell textLabel] setText:text];     
	return cell; 
}  

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {     
	if([self isMenuVisible])     {         
	return;     
}     
	[[[self tableView] cellForRowAtIndexPath:indexPath] setSelected:YES  animated:YES]; 
} 

//显示菜单 
- (void)showMenu:(id)cell {     
	if ([cell isHighlighted]) {         
	[cell becomeFirstResponder];                  
	UIMenuController * menu = [UIMenuController sharedMenuController];         
	[menu setTargetRect: [cell frame] inView: [self view]];         
	[menu setMenuVisible: YES animated: YES];     
} 
} 

- (void)readFromPasteboard:(id)sender {     
	[self setTitle:[NSString stringWithFormat:@"Pasteboard = %@",                        
	[[UIPasteboard generalPasteboard] string]]]; 
}  
- (void)didReceiveMemoryWarning {     
// Releases the view if it doesn't have a superview.     
	[super didReceiveMemoryWarning];          
// Relinquish ownership any cached data, images, etc that aren't in use. 
}  

- (void)viewDidUnload {     
	[super viewDidUnload];     
	[self.tableView release];          
// Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.     
// For example: self.myOutlet = nil; 
}
 

效果:

复制一行数据:

点击右上角的按钮粘贴,将数据显示在title上:

2、图片复制粘贴

   下面通过一个例子,将图片复制和剪贴到另外一个UIImageView中间。

1、在界面上放置两个uiimageview,一个是图片的数据源,一个是将图片粘贴到的地方。CopyPasteImageViewController 代码如下:

  1. @interface CopyPasteImageViewController : UIViewController {       
  2.     UIImageView *imageView;       
  3.     UIImageView *pasteView;       
  4.     UIImageView *selectedView;   
  5. }   
  6. @property (nonatomic, retain) IBOutlet UIImageView *imageView;   
  7. @property (nonatomic, retain) IBOutlet UIImageView *pasteView;   
  8. @property (nonatomic, retain) UIImageView *selectedView;   
  9. - (void)placeImageOnPasteboard:(id)view;   
  10. @end  
@interface CopyPasteImageViewController : UIViewController {     
	UIImageView *imageView;     
	UIImageView *pasteView;     
	UIImageView *selectedView; 
} 
@property (nonatomic, retain) IBOutlet UIImageView *imageView; 
@property (nonatomic, retain) IBOutlet UIImageView *pasteView; 
@property (nonatomic, retain) UIImageView *selectedView; 
- (void)placeImageOnPasteboard:(id)view; 
@end
 

2、当触摸图片的时候我们显示快捷菜单:

  1. - (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {       
  2.     NSSet *copyTouches = [event touchesForView:imageView];       
  3.     NSSet *pasteTouches = [event touchesForView:pasteView];            
  4.     [self becomeFirstResponder];       
  5.     if ([copyTouches count] > 0) {           
  6.         [self performSelector:@selector(showMenu:) withObject:imageView afterDelay:0.9f];       
  7.     }     else  if([pasteTouches count] > 0) {           
  8.         [self performSelector:@selector(showMenu:) withObject:pasteView afterDelay:0.9f];       
  9.     }       
  10.     [super touchesBegan:touches withEvent:event];   
  11. }    
  12.   
  13. - (void)showMenu:(id)view {       
  14.     [self setSelectedView:view];            
  15.     UIMenuController * menu = [UIMenuController sharedMenuController];       
  16.     [menu setTargetRect: CGRectMake(5, 10, 1, 1) inView: view];       
  17.     [menu setMenuVisible: YES animated: YES];   
  18. }  
  19.   
  20. 这里的快捷菜单,显示三个菜单项:剪贴、粘贴、复制:  
  21. - (BOOL)canPerformAction:(SEL)action withSender:(id)sender{       
  22.     if (action == @selector(cut:)) {         return ([self selectedView] == imageView) ? YES : NO;       
  23.     } else if (action == @selector(copy:)) {        return ([self selectedView] == imageView) ? YES : NO;       
  24.     } else if (action == @selector(paste:)) {         return ([self selectedView] == pasteView) ? YES : NO;       
  25.     } else if (action == @selector(select:)) {         return NO;       
  26.     } else if (action == @selector(selectAll:)) {           
  27.         return NO;      
  28.     } else {           
  29.         return [super canPerformAction:action withSender:sender];       
  30.     }   
  31. }   
  32.   
  33. - (void)cut:(id)sender {       
  34.     [self copy:sender];       
  35.     [imageView setHidden:YES];   
  36. }   
  37.   
  38. - (void)copy:(id)sender {       
  39.     [self placeImageOnPasteboard:[self imageView]]; }   
  40.   
  41. - (void)paste:(id)sender {       
  42.     UIPasteboard *appPasteBoard =      [UIPasteboard pasteboardWithName:@"CopyPasteImage" create:YES];       
  43.     NSData *data =[appPasteBoard dataForPasteboardType:@"com.marizack.CopyPasteImage.imageView"];       
  44.     pasteView.image = [UIImage imageWithData:data]; }  
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {     
	NSSet *copyTouches = [event touchesForView:imageView];     
	NSSet *pasteTouches = [event touchesForView:pasteView];          
	[self becomeFirstResponder];     
	if ([copyTouches count] > 0) {         
		[self performSelector:@selector(showMenu:) withObject:imageView afterDelay:0.9f];     
	}     else  if([pasteTouches count] > 0) {         
		[self performSelector:@selector(showMenu:) withObject:pasteView afterDelay:0.9f];     
	}     
	[super touchesBegan:touches withEvent:event]; 
}  

- (void)showMenu:(id)view {     
	[self setSelectedView:view];          
	UIMenuController * menu = [UIMenuController sharedMenuController];     
	[menu setTargetRect: CGRectMake(5, 10, 1, 1) inView: view];     
	[menu setMenuVisible: YES animated: YES]; 
}

这里的快捷菜单,显示三个菜单项:剪贴、粘贴、复制:
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{     
	if (action == @selector(cut:)) {         return ([self selectedView] == imageView) ? YES : NO;     
	} else if (action == @selector(copy:)) {        return ([self selectedView] == imageView) ? YES : NO;     
	} else if (action == @selector(paste:)) {         return ([self selectedView] == pasteView) ? YES : NO;     
	} else if (action == @selector(select:)) {         return NO;     
	} else if (action == @selector(selectAll:)) {         
		return NO;    
 	} else {         
		return [super canPerformAction:action withSender:sender];     
	} 
} 

- (void)cut:(id)sender {     
	[self copy:sender];     
	[imageView setHidden:YES]; 
} 

- (void)copy:(id)sender {     
	[self placeImageOnPasteboard:[self imageView]]; } 

- (void)paste:(id)sender {     
	UIPasteboard *appPasteBoard =      [UIPasteboard pasteboardWithName:@"CopyPasteImage" create:YES];     
	NSData *data =[appPasteBoard dataForPasteboardType:@"com.marizack.CopyPasteImage.imageView"];     
	pasteView.image = [UIImage imageWithData:data]; }
 

效果:

1、点击图片,显示菜单按钮。

2、点击复制,将数据复制到剪贴板上:

3、点击粘贴,将数据粘贴到uiimageview上。

相关推荐
简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address EJB的实现 ,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程接口的引用,用远程接口的引用访问EJB。 EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,但是它的主要作用是供程序使用的。本规范尝试满足大型主机、微型主机、个人工作站、和TACs 的不同需求。例如,容易实现协议的设计。 Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天通信演示代码 2个目标文件,一个服务器,一个客户端。 Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密   Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。   设定字符串为“张三,你好,我是李四”   产生张三的密钥对(keyPairZhang)   张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节   通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 同上 java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥   Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从文件中得到公钥编码的字节数组、如何从字节数组解码公钥。 Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输   Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲
<p> <span style="font-size:14px;color:#E53333;">限时福利1:</span><span style="font-size:14px;">购课进答疑群专享柳峰(刘运强)老师答疑服务</span> </p> <p> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;"></span> </p> <p> <span style="font-size:14px;color:#337FE5;"><strong>为什么需要掌握高性能的MySQL实战?</strong></span> </p> <p> <span><span style="font-size:14px;"><br /> </span></span> <span style="font-size:14px;">由于互联网产品用户量大、高并发请求场景多,因此对MySQL的性能、可用性、扩展性都提出了很高的要求。使用MySQL解决大量数据以及高并发请求已经是程序员的必备技能,也是衡量一个程序员能力和薪资的标准之一。</span> </p> <p> <br /> </p> <p> <span style="font-size:14px;">为了让大家快速系统了解高性能MySQL核心知识全貌,我为你总结了</span><span style="font-size:14px;">「高性能 MySQL 知识框架图」</span><span style="font-size:14px;">,帮你梳理学习重点,建议收藏!</span> </p> <p> <br /> </p> <p> <img alt="" src="https://img-bss.csdnimg.cn/202006031401338860.png" /> </p> <p> <br /> </p> <p> <span style="font-size:14px;color:#337FE5;"><strong>【课程设计】</strong></span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;">课程分为四大篇章,将为你建立完整的 MySQL 知识体系,同时将重点讲解 MySQL 底层运行原理、数据库的性能调优、高并发、海量业务处理、面试解析等。</span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;"></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>一、性能优化篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括经典 MySQL 问题剖析、索引底层原理和事务与锁机制。通过深入理解 MySQL 的索引结构 B+Tree ,学员能够从根本上弄懂为什么有些 SQL 走索引、有些不走索引,从而彻底掌握索引的使用和优化技巧,能够避开很多实战中遇到的“坑”。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>二、MySQL 8.0新特性篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括窗口函数和通用表表达式。企业中的许多报表统计需求,如果不采用窗口函数,用普通的 SQL 语句是很难实现的。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>三、高性能架构篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括主从复制和读写分离。在企业的生产环境中,很少采用单台MySQL节点的情况,因为一旦单个节点发生故障,整个系统都不可用,后果往往不堪设想,因此掌握高可用架构的实现是非常有必要的。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>四、面试篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">程序员获得工作的第一步,就是高效的准备面试,面试篇主要从知识点回顾总结的角度出发,结合程序员面试高频MySQL问题精讲精练,帮助程序员吊打面试官,获得心仪的工作机会。</span> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页