精华内容
下载资源
问答
  • 2021-02-05 08:55:25

    诶?这项技术又是什么玩意(What)?

    这项技术为什么会存在?我们已经有那么多解决方案(Method)了,我们为什么要用它(Why)?

    如果这项技术那么好且我们正好有场景可以用到这项技术,且能使我们的系统得到很乐观的优化,那么我们怎么用呢(How)?

    大概已经有同学觉得这些问题很熟悉了,是的,这就是黄金全法则提出的三个问题,对于每种新鲜事物我们首先基于这三个问题去了解,更有利于弄清楚事情的本质,端正态度去了解,而不是因为新,因为大家都说好,才要去了解……。说了那么多前奏,我们可以开始了,今天我们就带着黄金圈法则提出的三个问题去看看MySQL数据库复制这项领域技术,然后再结合实际应用扩展一些问题,本文也仅仅是结合自己了解的皮毛以抛砖引玉的态度和大家一起分享。

    WHAT?

    MySQL复制使得一台MySQL数据库服务器的数据被拷贝到其他一台或者多台数据库服务器,前者通常被叫做Master,后者通常被叫做Slave。

    MySQL复制示意图

    复制的结果是集群(Cluster)中的所有数据库服务器得到的数据理论上都是一样的,都是同一份数据,只是有多个copy。MySQL默认内建的复制策略是异步的,基于不同的配置,Slave不一定要一直和Master保持连接不断的复制或等待复制,我们指定复制所有的数据库,一部分数据库,甚至是某个数据库的某部分的表。

    MySQL复制支持多种不同的复制策略,包括同步、半同步、异步和延迟策略等。

    同步策略:Master要等待所有Slave应答之后才会提交(MySql对DB操作的提交通常是先对操作事件进行二进制日志文件写入然后再进行提交)。

    半同步策略:Master等待至少一个Slave应答就可以提交。

    异步策略:Master不需要等待Slave应答就可以提交。

    延迟策略:Slave要至少落后Master指定的时间。

    MySQL复制同时支持多种不同的复制模式:

    基于语句的复制,Statement Based Replication(SBR)。

    基于行的复制Row Based Replication(RBR)。

    混合复制(Mixed)。

    WHY?

    这个问题其实也就是MySQL复制有什么好处,我们可以将复制的好处归结于下面几类:

    性能方面:MySQL复制是一种Scale-out方案,也即“水平扩展”,将原来的单点负载扩散到多台Slave机器中去,从而提高总体的服务性能。在这种方式下,所有的写操作,当然包括UPDATE操作,都要发生在Master服务器上。读操作发生在一台或者多台Slave机器上。这种模型可以在一定程度上提高总体的服务性能,Master服务器专注于写和更新操作,Slave服务器专注于读操作,我们同时可以通过增加Slave服务器的数量来提高读服务的性能。

    防腐化:由于数据被复制到了Slave,Slave可以暂停复制进程,进行数据备份,因此可以防止数据腐化。

    故障恢复:同时多台Slave如果有一台Slave挂掉之后我们还可以从其他Slave读取,如果配置了主从切换的话,当Master挂掉之后我们还可以选择一台Slave作为Master继续提供写服务,这大大增加了应用的可靠性。

    数据分析:实时数据可以存储在Master,而数据分析可以从Slave读取,这样不会影响Master的性能。

    HOW?

    这里我们只介绍一下MySQL的复制是如何工作的,至于配置,网上也有很多相关的介绍,读者具体应用的时候可以再去查阅。我们拿最常用的基于二进制文件的复制来看看。

    MySQL复制工作示意图

    请点击输入图片描述

    请点击输入图片描述

    MySQL的复制过程大概如下:

    首先,主库在每次准备提交事务完成数据更新操作之前都会将数据更改操作记录到二进制日志中,这些日志是以二进制的方式记录数据更改的事件。值得一提的是二进制日志中记录的顺序实际上是事务的提交顺序,而非SQL执行语句的顺序。在记录二进制日志之后,主库会告诉存储引擎事务可以提交了。

    然后,备库会启动一个IO线程,之所以叫做IO线程是因为这个线程专门做IO相关的工作,包括和主库建立连接,然后在主库上启动一个特殊的二进制转储线程,这个转储线程会不断的读取二进制日志中的事件,发送给备库的IO线程,备库的IO线程会将事件记录到中继日志中。

    备库会有一个叫做SQL的线程被开启,这个线程做的事情是读取中继日志中的DB操作事件在备库执行,从而实现数据更新。

    总的来说,在发生复制的主库服务器和备库服务器中,一共有三个线程在工作。

    上面我们已经大概了解的什么是复制?为什么要复制?如何复制?这三个问题了,接下来我们基于上面的介绍,提出一些实际应用可能会发生的问题来思考如何解决。博主自问自答的方式-。-

    问答环节

    问题一:通过复制模型虽然读能力可以通过扩展slave机器来达到提高,而写能力却不能,如果写达到瓶颈我们应该怎么做呢?

    答:我们首先会得出结论,这种复制模型对于写少读多型应用是非常有优势的,其次,当遇到这种问题的时候我们可以对数据库进行分库操作,所谓分库,就是将业务相关性比较大的表放在同一个数据库中,例如之前数据库有A,B,C,D四张表,A表和B表关系比较大,而C表和D表关系比较大,这样我们把C表和D表分离出去成为一个单独的数据库,通过这种方式,我们可以将原有的单点写变成双点写或多点些,从而降低原有主库的写负载。

    问题二:因为复制是有延迟的,肯定会发生主库写了,但是从库还没有读到的情况,遇到这种问题怎么办?

    答:MySQL支持不同的复制策略,基于不同的复制策略达到的效果也是不一样的,如果是异步复制,MySQL不能保证从库立马能够读到主库实时写入的数据,这个时候我们要权衡选择不同复制策略的利弊来进行取舍。所谓利弊,就是我们是否对从库的读有那么高的实时性要求,如果真的有,我们可以考虑使用同步复制策略,但是这种策略相比于异步复制策略会大大降低主库的响应时间和性能。我们是否可以在应用的设计层面去避开这个问题?

    问题三:复制的不同模式有什么优缺点?我们如何选择?

    答:基于语句的复制实际上是把主库上执行的SQL在从库上重新执行一遍,这么做的好处是实现起来简单,当前也有缺点,比如我们SQL里面使用了NOW(),当同一条SQL在从库中执行的时候显然和在主库中执行的结果是不一样的,注入此类问题可以类推。其次问题就是这种复制必须是串行的,为了保证串行执行,就需要更多的锁。

    基于行的复制的时候二进制日志中记录的实际上是数据本身,这样从库可以得到正确的数据,这种方式缺点很明显,数据必须要存储在二进制日志文件中,这无疑增加的二进制日志文件的大小,同时增加的IO线程的负载和网络带宽消耗。而相比于基于语句的复制还有一个优点就是基于行的复制无需重放查询,省去了很多性能消耗。

    无论哪种复制模式都不是完美的,日志如何选择,这个问题可以在理解他们的优缺点之后进行权衡。

    问题四:复制的工作过程只有三个线程来完成,对于Master来说,写是并发的,也就出现了一个IO线程要把所有并发的数据变更事件记录,这个IO线程会不会累死?当一个Master对应多个Slave的时候,其实在Master中会唤起多个IO线程,这无疑会增加Master的资源开销,如果出现事件堆积,也就是事件太多,来不及及时发送出去怎么办?另外就是Slave那边的IO线程和SQL线程也会有对应主库并发数据变更事件,而Slave方单个线程处理的问题,这个时候Slave线程会不会累死?

    答:上面的问题确实会发生,上面第一个问题和第二个问题其实是写负载的问题,当事件堆积太多,从库时延就会变大,Slave单SQL线程问题据说有参数可以开启并行操作,这个大家可以确认一下。

    问题五:针对复制工作过程可能会出现的问题,主库写完二进制日志文件同时都会保存二进制日志的偏移量,但是当断电的时候,二进制日志文件没有刷新到磁盘,主库重新启动之后,从库尝试读该偏移量的二进制日志,会出现读不到的情况,这个问题应该怎么解决?

    答:首先如果开启了sync_binlog选项,对于innodb同时设置innodb_flush_log_at_trx_commot=1,则可以保证二进制日志文件会被写入磁盘,但MyISAM引擎可能会导致数据损坏。如果没有开启这个选项,则可以通过制定从库的二进制偏移量为下一个二进制日志文件的开头,但是不能解决事件丢失问题。

    问题六:从库在非计划的关闭或重启时,回去读master.info文件去找上次停止复制的位置,这同样会有一个问题,如果master.info不正确,就会导致复制数据不一致的情况,遇到这个问题怎么办?

    答:这个问题可以通过两种方式解决,一是控制master.info在从库非计划关闭或重启的时候让master.info能够同步到磁盘,这样下次启动的时候就不会读取错误的信息,这有助于减少错误的发生概率。另外想要找到正确的复制位置是困难的,我们也可以选择忽略错误。

    f27323c1483466f2f75630ed73c49d5a.png

    请点击输入图片描述

    请点击输入图片描述

    更多相关内容
  • 在CSDN写博客,最方便的是复制图片,直接在文本粘贴,自动成为Markdown链接,所以在个人网站的博客写Markdown,是否也能有同样的功能呢? 有! 插件下载 插件设置 开启图片粘贴即可 比起建立私有图床方式,更加...

    在CSDN写博客,最方便的是复制图片,直接在文本粘贴,自动成为Markdown链接,所以在个人网站的博客写Markdown,是否也能有同样的功能呢?
    有!

    插件下载

    file

    插件设置

    file

    开启图片粘贴即可

    file

    比起建立私有图床方式,更加简单快捷,不需要本地PicGo上传图片

    展开全文
  • 下面小编就为大家普及一下这个小知识工具/材料电脑操作方法01打开网页或者文档,找到自己想要复制粘贴的文字02按住鼠标左键从想要复制的那段话的第一个字开始往后拖动,直到结尾03然后松开鼠标左键,按鼠标右键,会...

    目前电脑已经成为了许多工作者的必备工具,有时候为了节省时间,面对很多文字大家都不想自己动手去打,而是想要通过粘贴复制,但是粘贴复制具体怎么操作呢?下面小编就为大家普及一下这个小知识

    工具/材料

    电脑

    操作方法

    01

    打开网页或者文档,找到自己想要复制粘贴的文字

    3a8507b7f012381019850049bd3baac5.png

    02

    按住鼠标左键从想要复制的那段话的第一个字开始往后拖动,直到结尾

    a42b7cf6f307cb7be1048113e2265ed2.png

    03

    然后松开鼠标左键,按鼠标右键,会出现一个小框,选择里面的【复制】

    436e8a2f93f513d8a5d147e2eefbaf3f.png

    04

    打开想要复制到的位置页面,点击鼠标右键,同样会出现一个小框,选择里面的粘贴,即可把刚刚复制的文字全部放到这个页面

    82b11b5e3ee545041b7f559b1279ed88.png

    57381d866c80b099afbd066933f3a684.png

    05

    掌握了上面的操作后,下面再为大家普及一下复制粘贴的快捷键,首先你需要熟悉键盘中它们的具体位置

    90cdd623648334386d129073684c7167.png

    06

    复制的快捷键是【ctrl+C】,当你选择好自己需要的文字后,直接按键盘上的快捷键就可复制

    1cdac87df07e6e9323325e0ff7701c11.png

    07

    粘贴的快捷键是【ctrl+V】,复制好自己想要的文字后,选择粘贴的目的地,直接按快捷键就可以把所有文字放进去,也可以节省时间

    c1b1bda5410d54103c9d57ef5db1e9f1.png

    好了,以上就是大致内容了,(END)

    展开全文
  • IOS手机中图片复制粘贴,剪切

    千次阅读 2013-12-29 22:23:50
    触摸两次图片后的情况如下: 选择copy,进行操作 在空白处触摸两次,然后效果图如下: 鼠标放上去选择paste,后效果如图所示: 其实很简单,是不是呀,只要记下那几个函数,就可以...

    在应用程序中也可以使用剪切板时需要使用UIPasteboard类,使用的第一个步骤是取得UIPasteBoard的单一实例(single instance),可以通过generalPasteboard方法取得此种单一实例。

    编辑菜单可以通过UIMenuController类在应用程序中使用此编辑菜单。UIMenuController 通过sharedMenuController属性取得单一实例,例如需要两次触摸画面时显示copy等,

    首先,因为编辑菜单只能在第一响应者中显示,如果默认非第一响应者的情况下,需要重写UIResponder 的canBecomeFirstresponder方法并返回 YES.

    接着,需要重写UIResponder的canPerformAction:withSender:方法,让需要显示菜单返回YES。

    新建一个单视图控制器工程。

    下面我们就结合实际的代码来说明吧

    具体的代码如下:

    HHLAppDelegate.h

    #import <UIKit/UIKit.h>
    
    @class HHLViewController;
    
    @interface HHLAppDelegate : UIResponder <UIApplicationDelegate>
    
    @property (strong, nonatomic) UIWindow *window;
    
    @property (strong, nonatomic) HHLViewController *viewController;
    
    @end
    


    HHLAppDelegate.m

    #import "HHLAppDelegate.h"
    
    #import "HHLViewController.h"
    
    @implementation HHLAppDelegate
    
    - (void)dealloc
    {
        [_window release];
        [_viewController release];
        [super dealloc];
    }
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
        // Override point for customization after application launch.
        self.viewController = [[[HHLViewController alloc] initWithNibName:@"HHLViewController" bundle:nil] autorelease];
        self.window.rootViewController = self.viewController;
        [self.window makeKeyAndVisible];
        return YES;
    }
    
    - (void)applicationWillResignActive:(UIApplication *)application
    {
        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
        // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
    }
    
    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }
    
    - (void)applicationWillEnterForeground:(UIApplication *)application
    {
        // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
    }
    
    - (void)applicationDidBecomeActive:(UIApplication *)application
    {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    }
    
    - (void)applicationWillTerminate:(UIApplication *)application
    {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }
    
    @end
    


    HHLViewController.h

    #import <UIKit/UIKit.h>
    
    @interface HHLViewController : UIViewController
    {
    @private
        CGPoint touchPoint;
        
    }
    @end
    


     HHLViewController.m


    #import "HHLViewController.h"
    
    @interface HHLViewController ()
    
    - (UIImageView *)imageContainsPoint:(CGPoint)point;
    
    @end
    
    @implementation HHLViewController
    
    - (void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
        self.view.backgroundColor = [UIColor whiteColor];
        
        UIImage *image = [UIImage imageNamed:@"bug1.png"];
        UIImageView *bug1 = [[UIImageView alloc]initWithImage:image];
        bug1.center = self.view.center;
        [self.view addSubview:bug1];
        [bug1 release];
        
    //    image = [UIImage imageNamed:@"bug2.png"];
    //    UIImageView *bug2 = [[UIImageView alloc]initWithImage:image];
    //    
    //    bug2.center = self.view.center;
    //    [self.view addSubview:bug2];
    //    [bug2 release];
    //    
    //    
    //    image = [UIImage imageNamed:@"bug3.png"];
    //    
    //    UIImageView *bug3 = [[UIImageView alloc]initWithImage:image];
    //    bug3.center = self.view.center;
    //    [self.view addSubview:bug3];
    //    [bug3 release];
        
        
    }
    
    
    //不成为第一响应这无法显示编辑菜单
    -(BOOL)canBecomeFirstResponder
    {
        return YES;
    }
    
    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
    {
        UITouch *touch = [touches anyObject];
        if ([self becomeFirstResponder] && 1 < [touch tapCount]) {
            //连续两次碰触后显示编辑菜单
            UIMenuController *menu = [UIMenuController sharedMenuController];
            touchPoint = [touch locationInView:self.view];
            CGRect minRect;
            minRect.origin = touchPoint;
            [menu setTargetRect:minRect inView:self.view];
            [menu setMenuVisible:YES animated:YES];
        }
    }
    
    - (BOOL)canPerformAction:(SEL)action withSender:(id)sender
    {
        if (@selector(copy:) == action) {
            if ([self imageContainsPoint:touchPoint]) {
                return YES;
            }
            
        }else if (@selector(cut:) == action){
            if ([self imageContainsPoint:touchPoint]) {
                return YES;
                
            }
            
        }else if (@selector(paste:) == action){
        
            return (nil != [UIPasteboard generalPasteboard].image);
            
        }
    return NO;
    
    }
    
    
    - (UIImageView *)imageContainsPoint:(CGPoint)point
    {
        for (UIView *view in self.view.subviews) {
            if (CGRectContainsPoint(view.frame, point)) {  //如果point 被包含在view.frame内则返回true,否则返回false
                if ([view isKindOfClass:[UIImageView class]]) {
                    return (UIImageView *)view;
                    
                }
            }
        }
        return nil;
        
    }
    
    - (void)copy:(id)sender
    {
        UIImageView *imageView = [self imageContainsPoint:touchPoint];
        if (imageView) {
            [UIPasteboard generalPasteboard].image = imageView.image;
            
        }
    }
    - (void)cut:(id)sender
    {
        UIImageView *imageView = [self imageContainsPoint:touchPoint];
        if (imageView) {
            [UIPasteboard generalPasteboard].image = imageView.image;
            [imageView removeFromSuperview];
        }
    }
    
    - (void)paste:(id)sender
    {
        UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
        if (pasteBoard) {
            UIImageView *bug = [[[UIImageView alloc]initWithImage:pasteBoard.image]autorelease];
            bug.center = touchPoint;
            [self.view addSubview:bug];
            pasteBoard.image = bug.image;
            
            
        }
    }
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    	// Do any additional setup after loading the view, typically from a nib.
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    

    运行程序后,效果如下:



    触摸两次图片后的情况如下:


    选择copy,进行操作 在空白处触摸两次,然后效果图如下:


    鼠标放上去选择paste,后效果如图所示:



    其实很简单,是不是呀,只要记下那几个函数,就可以了,以后用到的时候套用即可。

    展开全文
  • 在写论文时出现不兼容的情况~~ 原因很简单,因为.doc和.docx格式不兼容,所以可以重新保存一遍,统一格式!立竿见影
  • 一个文件或压缩包的复制粘贴(注意,不是文件夹) 将一个文件打包成压缩包 单级目录的复制粘贴(就是复制一个文件夹,该文件夹内没有其他的文件夹只有一个或多个文件) 将单击目录复制出来并打包成压缩包 多级目录的复制...
  • [摘要]当我们尝试拖拽某个文件的时候,对应的应用程序列表就会出现在屏幕上。腾讯数码讯(Bear)智能手机凭借小巧的体积...而现在谷歌也看到了这个问题,并且在寻扎一种方法让Android系统进行复制粘贴更方便。在电脑上...
  • 今天的问题就是大家用excel会经常遇到的问题:C列数据是筛选状态,现在想把D列数据,复制粘贴到E列,怎么做呢?wps有一个功能是粘贴到可见单元格,但是excel没有,我们用excel怎么实现呢?请点击输入图片描述1、下图...
  • 项目是一款小型Mac应用程序,使“粘贴和匹配样式”成为默认复制/粘贴行为。它位于菜单栏中,监视剪贴板查找文本,从文本中删除任何样式,并将纯文本放回剪贴板上。 制作这个应用程序是因为很少希望样式复制到剪贴板...
  • VB操作PNG格式图片(透明、合成等),可读取PNG格式的图片,读取可设置PNG图片的背景、混合透明、自定义背景色、设置背景图片及位置等,可以将自定义的背景图片与PNG图片合并在一起,成为一张新的PNG图像。...
  • 电脑excel表格中无法将复制的内容粘贴进去如何解决腾讯视频/爱奇艺/优酷/外卖 充值4折起如果我们不能在表格中粘贴内容的话,应该是该表格被保护了,今天小编就告诉大家电脑excel表格中无法将复制的内容粘贴进去如何...
  • 需求说明实现思路见代码注释代码内容使用IO复制图片import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/*** @auther::9527* @...
  • :action="upLoadUrl" multiple> 上传图片 复制代码 图片转 base64 上传 有时候做一些私活项目,或者一些小图片上传可能会采取前端转base64后成为字符串上传。当我们有这一个需求,有一个商品轮播图多张,转base64...
  • 图 / 引用 / Ditto 剪贴板工具 复制粘贴复制粘贴,复制再粘贴。 这种重复性的按键,已经成为了我们生活中的一环,这种干燥的工作,不光无聊,也会影响我们工作的效率。 Windows 的复制粘贴,应该是经常使用的。 ...
  • 一、教学内容分析本课是小学信息技术教材四年级下册第十八课文本的复制与移动。是在学生掌握了文件夹的复制、移动,以及掌握了Word的启动、退出,在Word中输入文字并保存等内容之后的又一个知识点,学好这一课为学生...
  • bash剪切复制粘贴Cutting, copying, and pasting are three of the most basic features available to a computer user, but as you might expect Microsoft Word gives you more options than just those....
  • 复制</button> <button class="paster">粘贴</button><br> <textarea name="" id="contentArea" cols="30" rows="10">hello world</textarea> <h4>获取粘贴板里的...
  • 发明「复制粘贴」的那位老奶奶 Evelyn Berezin 去世了,她的发明曾经让秘书文员从重复劳动中解放,也奠定了后来 Word 等文档编辑软件的基础功能。 图片来自:computerhistory.org 12 月 8 日,发明史上第一个...
  • 比如:富文本编辑器开发、ctrl + v 上传图片、支付宝红包口令自动复制(典型被玩坏儿了的用途) 剪贴板操作途径 剪贴板事件 操作剪贴板,最基础的方式为监听剪贴板事件。出于兼容性考虑,一般都只在剪贴板事件处理...
  • 使用touchesEnded:withEvent:自定义复制粘贴菜单,copy:复制屏幕中的图片,cut:剪切屏幕中的图片,paste:粘贴屏幕中的图片. 1 @implementation prjCopyAndPaste 2 3 -(void)viewDidLoad 4 { 5 [super ...
  • 配置完成,要获取一个可用于markdown的图片外链只需要暂时只windows测试通过,因为java是跨平台,理论上mac linux 系统都可以更改配置使用的: . 方式一: 右击电脑本地图片→点击你的自定义上传菜单→自动生成图片...
  • 复制粘贴应该是所有人最常用的功能了。打开浏览器,选中一段内容,然后快捷键ctrl-c,再新建一个文本文件,打开,ctrl-v粘贴,最后ctrl-s保存,这一系列的动作出现的频率估计也不低吧,通常这样做的后果,就是桌面...
  • 教你怎么完美的复制别的公众内容到自己的公众号里面,不用再一个一个图片的保存然后对照别人的公众号按照序列插图了,现在可以直接将内容和图片一次性的复制到你的公众号里面了,成为你的东西,只需要几步就好了,很...
  • 在写了 这个 29.7 K 的剪贴板 JS 库有点东西! 这篇文章之后,收到了小伙伴提的两个问题:1.clipboard.js 这个库除了复制文字之外,能复制图像么?2.clipboar...
  • 为什么你应该停止复制粘贴

    千次阅读 2020-09-04 03:53:43
    前言 我写代码是为了好玩,也是为了生活。很久以前,我曾经复制和粘贴的速度比闪电棒还快。我已经掌握了所有的快捷键。_cutting,_partial ...我不会再复制粘贴了! 我知道 I know. 疯了吧?好吧,这种做法一开始确
  •  想要成为架构师的程序员一生必读的书,分为以下四个部分:  1.Coding Practice(编程实践系列)  2.Architecture Design(架构与设计系列)  3.Methodology(方法学系列)  4.Thought Leadership(思想与领导力...
  • QQ聊天魔术图片生成器实现将两张不同的图片合成为一张魔术图片,将此魔术图片从QQ聊天窗口中发给好友会显示出第一张图片,双击图片后会显示隐藏的第二张图片。软件还可以在图片上添加文字,并调整文字位置,一键生成...
  • 大数据文摘出品 ...著名学术打假侦探克莱尔·弗朗西斯称,在锁定塞门扎作为“造假嫌疑人”,她已经找到了20多份有问题的论文,并在PubPeer上标记了出来,之后又发现塞门扎的研究发现与另一位诺...
  • Python实现将一张图片放到另一张图片指定的位置上并合成一张图 # -*- coding: utf-8 -*- # by:Apsinc # time:2019年12月10日 #Python实现将一张图片放到另一张图片指定的位置上并合成一张图 from PIL import ...
  • iOS开发-剪切板实现拷贝粘贴

    千次阅读 2016-04-02 16:26:04
    但是实际中有时候可能需要对这3个以外的控件进行文本、图片等的拷贝粘贴,就需要自定义实现。UIKit framework为我们提供了几个相关的类和协议用来实现这一功能。 UIPasteboard:剪切板,用来向其中写入数据以及从中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,592
精华内容 4,636
关键字:

复制粘贴后成为图片