iOS OSS如何批量上传多张高质量图片???求大神指导 100C

业务描述:一款摄影师app, 需要上传大量的图片到OSS上面,将10M-20M的原片压缩到1-2M之后,然后一次性选择500张1-2M的图片上传到OSS上面。

问题描述: 选择了大量高质量图片之后,会导致内存瞬间暴增,最终导致APP闪退。

解决思路:从相册选取照片的时候,将10-20M的图片压缩到100KB左右的照片,显示在collectionView上面,因为这样选择的是缩略图,所以不会导致内存暴增,可以将几百张图片顺利展示在collectionView上。
然后,在图片上传的时候,将10M-20M的原片压缩到1-2M之后上传,上传了4-5张图片之后,就会出现app闪退,后面找出原因是因为 [putTask waitUntilFinished] 阻塞了线程,如果注释掉这句代码可以将几百上图片上传,但是中途会导致某些照片实际上面没有上传。

问题追加:

去掉putTask waitUntilFinished] 不行,会导致大量的图片上传不成功。
我反复测试发现,这个问题的根源在于内存里面加载了大量的高质量图片,导致占用的内存暴增,最终会因为内存不够,导致app闪退。
我感觉解决的办法应该是要释放一些内存,占内存的是图片,但是又不得不加载这些图片,而且还要保证图片的质量。

求大神指导,当图片占用了大量内存?如何解决?

已经尝试过@autoreleasepool,对于数量在300张以下有效果,当图片数量达到500张以下,依然会内存暴增。


- (void)thread1GetData:(NSArray *)array
{
    PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
    options.synchronous = YES;

    for (int i = 0; i <[array count]; i ++) {

        @autoreleasepool{
            PHAsset *asset = array[i];

            NSString *imgName = [asset valueForKey:@"filename"];
            NSLog(@"filename:%@",imgName);

            CGSize size = CGSizeMake(asset.pixelWidth, asset.pixelHeight);
            // 从asset中获得图片
            [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:size contentMode:PHImageContentModeDefault options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {

                UIImage *resultImg = [result scaledCopyOfSizeMin:CGSizeMake(1300, 1300)]; //压缩图片

                [self.dataArr addObject:resultImg];

                result = nil;
                info = nil;
            }];
        }

    }
}

ios

6个回答

调用[putTask waitUntilFinished] 这个是使上传变成单线程串型,建议去掉,
至于中途某些没有上传可能是中途网络堵塞 导致请求超时
提供两种方式:
1.每张上传的时候设置自动重传 比如没有上传成功自动重传一次
2.没有上传成功的标注出来 提醒用户 让用户自己再重传

谢谢

去掉putTask waitUntilFinished] 不行,会导致大量的图片上传不成功。
我反复测试发现,这个问题的根源在于内存里面加载了大量的高质量图片,导致占用的内存暴增,最终会因为内存不够,导致app闪退。
我感觉解决的办法应该是要释放一些内存,占内存的是图片,但是又不得不加载这些图片,而且还要保证图片的质量。

并没有彻底的解决,只是缓解了一些。加载大量的图片会占用大量的内存,把for循环读取图片的代码放到自动释放池中。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
iOS 使用阿里云OSS 上传图片
使用阿里云OSS 存储上传的图片,iOS 端显示上传成功,但是后台却没有接收到数据,这是iOS端的问题,还是后台配置的问题 ps.安卓端上传成功,后台也能看到。 pss.选区相册图片后,图片在内存中的地址怎么获取,一般是选择 用NSData 上传数据
springboot如何把图片上传到oss上,并把图片地址存到数据库中?
大神求解 :问题原因:我后台要求把图片存到阿里的OSS上,如何把图片的名称和地址存到数据表中,我的问题是在接收表单信息时,怎么上传到OSS上? 我后台的接口应该如何写?
阿里云OSS Android伤处图片缓慢
我在使用阿里云OSS上传图片Android版的SDK,上传图片的时候发现图片上传速度很快,但是图片上传完成之后 OSS返回图片地址的时候特别慢,有没有人知道这是什么原因啊。下面是我上传图片的时候打印的Log: ![图片说明](https://img-ask.csdn.net/upload/201910/10/1570669971_769727.jpg) 上面图片的log中,在51秒的时候图片就上传完成了,但是直到59秒才返回图片的路径信息,我想知道这是怎么回事,麻烦了!
java 阿里云oss存储问题
最近项目需要把图片视频上传阿里云的oss,代码写完后测试,本地部署上传图片到oss完全没问题,但是部署到服务器上传图片页面就报504错误,oss我设置的timeout是50S,一张图片也就几十KB,不可能超时啊,所以我怀疑是其他什么原因,但是我想了一天,还是没个结果,所以在此求救大神帮助。。。。在线等
java获取阿刘云oss服务器上的图片
图片已经上传到阿里云oss服务器 已获得url和图片名称 通过java怎么获取到阿里云oss上的图片
今天看到一个帖子,把对象存储oss集成到thinkPHP,将图片上传到oss里面
![图片说明](https://img-ask.csdn.net/upload/201611/30/1480494974_538322.jpg) 可以在阿里云网站下载oss的demo源代码PHP版:v2.0.5 https://help.aliyun.com/document_detail/32174.html?spm=5176.doc44688.6.375.MwiLwn 不过,阿里云的这个demo,用的是命名空间(命名空间具体功能我也没搞懂,各位自行百度,高手请路过),如要集成到thinkPHP里面需要修改下相关文件和命名空间,我已经整理好了。 第一步:将oss引入到tp框架里面,路径为: Thinkphp-->Library-->Org,将OSS文件夹放在org里面。 第二步:公共配置文件里面 //oss配置 "OSS_ACCESS_ID" => '', "OSS_ACCESS_KEY"=> '', "OSS_ENDPOINT" => '', "OSS_TEST_BUCKET" => '', "OSS_WEB_SITE" =>'', //上面4个就不用介绍了,这个OSS_WEB_SITE是oss的bucket创建后的外网访问地址,如需二级域名,可以指向二级域名,具体可以参考阿里云控制台里面的oss //oss文件上传配置 'oss_maxSize'=>1048576, //1M 'oss_exts' =>array(// 设置附件上传类型 'image/jpg', 'image/gif', 'image/png', 'image/jpeg', 'application/octet-stream',//阿里云好像都是通过二进制上传,似乎上面4个后缀设置起到什么用? ), 第三步:公共function里面 // 返回json function backJson($code,$info){ $arr['status']=$code; $arr['info']=$info; print_r(json_encode($arr)); exit; } //oss上传 /* *$fFiles:文件域 *$n:上传的路径目录 *$ossClient *$bucketName *$web:oss访问地址 *$isThumb:是否缩略图 */ function ossUpPic($fFiles,$n,$ossClient,$bucketName,$web,$isThumb=0){ $fType=$fFiles['type']; $back=array( 'code'=>0, 'msg'=>'', ); if(!in_array($fType, C('oss_exts'))){ $back['msg']='文件格式不正确'; return $back; exit; } $fSize=$fFiles['size']; if($fSize>C('oss_maxSize')){ $back['msg']='文件超过了1M'; return $back; exit; } $fname=$fFiles['name']; $ext=substr($fname,stripos($fname,'.')); $fup_n=$fFiles['tmp_name']; $file_n=time().'_'.rand(100,999); $object = $n."/".$file_n.$ext;//目标文件名 if (is_null($ossClient)) exit(1); $ossClient->uploadFile($bucketName, $object, $fup_n); if($isThumb==1){ // 图片缩放,参考https://help.aliyun.com/document_detail/44688.html?spm=5176.doc32174.6.481.RScf0S $back['thumb']= $web.$object."?x-oss-process=image/resize,h_300,w_300"; } $back['code']=1; $back['msg']=$web.$object; return $back; exit; } 第四步:控制器里的操作方法里面,例如控制器是Index, public function upPic(){ //oss上传 $bucketName = C('OSS_TEST_BUCKET'); $ossClient = new \Org\OSS\OssClient(C('OSS_ACCESS_ID'), C('OSS_ACCESS_KEY'), C('OSS_ENDPOINT'), false); $web=C('OSS_WEB_SITE'); //图片 $fFiles=$_FILES['pic_1']; $rs=ossUpPic($fFiles,'s',$ossClient,$bucketName,$web,0); if($rs['code']==1){ //图片 $img = $rs['msg']; //如返回里面有缩略图: $thumb=$rs['thumb']; }else{ $this->error('图片有误:'.$rs['msg']); return; } } 第五步:调用,文件域名pic_1,要与第四步里面的$_FILES['pic_1']一致。action地址为控制器的操作地址,例如:/index.php/Home/Index/upPic <meta charset="UTF-8"/> <form action="/index.php/Home/Index/upPic" enctype="multipart/form-data" method="post"> <input type="file" name="pic_1" value="" /> <input type="submit" value="上传"/> </form> 演示链接如下:http://www.erdangjiade.com/js/875.html
富文本通过UEditor-for-aliyun-OSS上传图片
根据官网的文本我修改了UEditor-for-aliyun-OSS里面的osskey的配置,但是得不到callbackName,所以在运行的过程中,总是报错,程序无法正常运行,该怎么搞
OSS循环上传30多个文件, 有一个文件显示上传超时,其他都成功了
# 代码如下: // 上传文件 private static void uploadFile(OSSClient client, String bucketName, String key, File file) throws OSSException, ClientException, IOException { ObjectMetadata objectMeta = new ObjectMetadata(); objectMeta.setContentLength(file.length()); String fileName=key.substring(key.lastIndexOf(".")); if(fileName.equalsIgnoreCase(".pdf")) { objectMeta.setContentType("application/pdf"); }else if(fileName.equalsIgnoreCase(".zip")){ objectMeta.setContentType("application/octet-stream"); }else{ // 可以在metadata中标记文件类型 objectMeta.setContentType("image/jpeg"); } InputStream input = new FileInputStream(file); client.putObject(bucketName, key, input, objectMeta); input.close(); } # 控制台输出如下: 12-Jun-2018 09:18:44.694 警告 [http-nio-8084-exec-7] com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl Unable to execute HTTP request: Read timed out [ErrorCode]: SocketTimeout [RequestId]: Unknown 12-Jun-2018 09:19:37.353 警告 [http-nio-8084-exec-7] com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl Unable to execute HTTP request: Read timed out [ErrorCode]: SocketTimeout [RequestId]: Unknown 2018-06-12 09:19:37.368 | UPLOAD FILE ERROR ! com.aliyun.oss.ClientException: Read timed out [ErrorCode]: SocketTimeout [RequestId]: Unknown at com.aliyun.oss.common.utils.ExceptionFactory.createNetworkException(ExceptionFactory.java:65) ~[aliyun-sdk-oss-2.0.5.jar:na] at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:62) ~[aliyun-sdk-oss-2.0.5.jar:na] at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:126) ~[aliyun-sdk-oss-2.0.5.jar:na] at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:72) ~[aliyun-sdk-oss-2.0.5.jar:na] at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:92) ~[aliyun-sdk-oss-2.0.5.jar:na] at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:133) ~[aliyun-sdk-oss-2.0.5.jar:na] at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:111) ~[aliyun-sdk-oss-2.0.5.jar:na] at com.aliyun.oss.internal.OSSObjectOperation.writeObjectInternal(OSSObjectOperation.java:518) ~[aliyun-sdk-oss-2.0.5.jar:na] at com.aliyun.oss.internal.OSSObjectOperation.putObject(OSSObjectOperation.java:112) ~[aliyun-sdk-oss-2.0.5.jar:na] at com.aliyun.oss.OSSClient.putObject(OSSClient.java:407) ~[aliyun-sdk-oss-2.0.5.jar:na] at com.aliyun.oss.OSSClient.putObject(OSSClient.java:394) ~[aliyun-sdk-oss-2.0.5.jar:na] at com.tmbj.api.service.imgupload.UploadService.uploadFile(UploadService.java:104) ~[classes/:na] at com.tmbj.api.service.imgupload.UploadService.upload(UploadService.java:39) ~[classes/:na] at com.tmbj.api.service.imgupload.UploadService$$EnhancerByCGLIB$$487d1c8f.CGLIB$upload$0(<generated>) [cglib-nodep-3.1.jar:na] at com.tmbj.api.service.imgupload.UploadService$$EnhancerByCGLIB$$487d1c8f$$FastClassByCGLIB$$3380697a.invoke(<generated>) [cglib-nodep-3.1.jar:na] at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) [cglib-nodep-3.1.jar:na] at com.jfinal.aop.Invocation.invoke(Invocation.java:82) [classes/:na] at com.jfinal.aop.Callback.intercept(Callback.java:96) [classes/:na] at com.tmbj.api.service.imgupload.UploadService$$EnhancerByCGLIB$$487d1c8f.upload(<generated>) [cglib-nodep-3.1.jar:na] at com.tmbj.api.controller.TmInsureFenqiController.setContractValue(TmInsureFenqiController.java:1305) [classes/:na] at com.tmbj.api.controller.TmInsureFenqiController.createLoadContract(TmInsureFenqiController.java:998) [classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_151] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_151] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_151] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_151] at com.jfinal.aop.Invocation.invoke(Invocation.java:73) [classes/:na] at com.tmbj.api.session.CorsInterceptor.intercept(CorsInterceptor.java:35) [classes/:na] at com.jfinal.aop.Invocation.invoke(Invocation.java:67) [classes/:na] at com.tmbj.api.exception.TmbjExceptionInterceptor.intercept(TmbjExceptionInterceptor.java:28) [classes/:na] at com.jfinal.aop.Invocation.invoke(Invocation.java:67) [classes/:na] at com.tmbj.api.session.SessionInterceptor.intercept(SessionInterceptor.java:39) [classes/:na] at com.jfinal.aop.Invocation.invoke(Invocation.java:67) [classes/:na] at com.jfinal.core.ActionHandler.handle(ActionHandler.java:74) [classes/:na] at com.jfinal.ext.handler.UrlSkipHandler.handle(UrlSkipHandler.java:45) [classes/:na] at com.jfinal.plugin.druid.DruidStatViewHandler.handle(DruidStatViewHandler.java:75) [classes/:na] at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:72) [classes/:na] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.31] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.31] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) [catalina.jar:8.5.31] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [catalina.jar:8.5.31] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496) [catalina.jar:8.5.31] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [catalina.jar:8.5.31] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) [catalina.jar:8.5.31] at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650) [catalina.jar:8.5.31] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [catalina.jar:8.5.31] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [catalina.jar:8.5.31] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) [tomcat-coyote.jar:8.5.31] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-coyote.jar:8.5.31] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790) [tomcat-coyote.jar:8.5.31] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1468) [tomcat-coyote.jar:8.5.31] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-coyote.jar:8.5.31] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_151] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_151] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:8.5.31] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]
himall怎么配置oss,需详细的阿里云截图和himall代码配置截图
我用himall中的web.config的oss相关配置,结合阿里云的相关参数,配置了oss,oss自动上传了himall部分js文件,但上传图片,调式出现文件不存在,有没有大神配置成功过
springboot如何获取oss服务器的签名权限 让前端页面可以访问文件或图片的链接地址打开图片
最近做一个项目 要将文件或者图片放在阿里的oss服务器上 但是oss的服务器不是公共读的 需要在后端做一个验证 可以把访问oss的权限传给前端 让前端可以打开oss服务器上文件 的链接打开 请问大佬们有没有什么方法可以获取这个oss服务器的访问权限
在Ali服务器A上通过OSS将图片上传给另一台Ali服务器B,老是timeout 异常!
项目C在本地(Windows+tomcat )下运行,调用上传图片方法 uploadPic(主要调用 OssClient.putObject() 方法 ), 可以把 图片 p 上传到Ali 服务器 B上。但是一旦把 C 部署到 到Ali服务器A上(linux + tomcat ),调用 同一个方法 uploadPic 却总是说 timeout exception。超时时间设置的是 30s,图片文件不大才 70k,在本地(Windows + tomcat )一下就上传OK了,但是在 Ali 服务器 A上就不行。 各位有类似经验的同行,能看看有没有其它的解决该 bug 的思路吗?谢谢您宝贵的意见
关于阿里云 OSS 上传 pdf 和 excel的问题
![图片说明](https://img-ask.csdn.net/upload/201806/29/1530245827_308503.jpg)问题是把pdf模板已经使用itext写好了,然后使用pdfWriter,getInstance给前端,但是前端说他们不好处理,最好给他们一个下连接, 所以想到阿里云的 OSS,想把pdf写好直接上传到阿里云,那么现在遇到的问题就是 pdfWriter.getOs() 返回的是 OutputStreamCounter 在转换成 ByteArrayOutputStream 的是偶出现转换异常 ;![图片说明](https://img-ask.csdn.net/upload/201806/29/1530245766_865394.jpg)
winform上传到 OSS 总包这错
怎么解决 求大神![图片说明](https://img-ask.csdn.net/upload/201511/05/1446709193_242535.png)
oss链接的问题。。。。
oss里面存储一些视频,现在想点击链接播放视频,但是不知道oss里的视频怎么取出来,请大神帮忙
项目中使用FTP的方式过慢,还经常出现421错误跟Software caused connection abort: socket write error错误,有些时候上传就特别的慢,有些时候就是飞速了
![图片说明](https://img-ask.csdn.net/upload/201911/30/1575082120_116111.jpg) 就像这图片中描述的一样,一直在等待状态,等路径返回的时候,通过访问图片就显示图片损坏,这问题困扰我太久了,有大神支招吗?从百度找的我都试过了,一直找不到合适的解决方案 ![图片说明](https://img-ask.csdn.net/upload/201912/04/1575428188_620666.jpg) 这是FTP代码,或者我想知道除了FTP,OSS之外还有什么方式可以上传文件至服务器?
oss web直传使用例子出错
![图片说明这是所出现的错误](https://img-ask.csdn.net/upload/201705/19/1495171619_419172.png)所使用的是“服务端签名后直传”这个demo 修改参数如下 ![图片说明](https://img-ask.csdn.net/upload/201705/19/1495171720_195671.png)![图片说明](https://img-ask.csdn.net/upload/201705/19/1495171741_44246.png)![图片说明](https://img-ask.csdn.net/upload/201705/19/1495171748_313861.png) 本人新手 求大神指点一下!
公司的阿里云oss图片服务器,其他人都可以访问,而我的电脑访问不了
公司的阿里云oss图片服务器,其他人都可以访问,而我的电脑访问不了![图片说明](https://img-ask.csdn.net/upload/201601/12/1452567090_648533.png)
阿里云oss和阿里云nas文件存储选择问题
1,各位大神,问个问题:java_web项目,大家是怎么存储这类静态资源的(直接链接能访问,例如图片,静态html文章)?用阿里云的oss 还是 用阿里云nas文件系统存储 ? 为啥呢? 如果用阿里云nas文件系统的话,是不是要把文件挂载到tomcat等服务器里面?
flask响应return时老是报相同的错:TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement.
flask响应return时老是报相同的错:TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement. python代码为: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200124022917753.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjQ0MTQ3,size_16,color_FFFFFF,t_70) html代码: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200124022948221.png) 奇怪的是另一个与这样相同的响应可以成功跳转,但只有这个不行…… 求助!!!
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
如何防止抄袭PCB电路板
目录 1、抄板是什么 2、抄板是否属于侵权 3、如何防止抄板 1、抄板是什么 抄板也叫克隆或仿制,是对设计出来的PCB板进行反向技术研究;目前全新的定义:从狭义上来说,抄板仅指对电子产品电路板PCB文件的提取还原和利用文件进行电路板克隆的过程;从广义上来说,抄板不仅包括对电路板文件提取、电路板克隆、电路板仿制等技术过程,而且包括对电路板文件进行修改(即改板)、对电子产品外形模具进行三维...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
相关热词 c# 二进制截断字符串 c#实现窗体设计器 c#检测是否为微信 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片
立即提问