精华内容
下载资源
问答
  • 大家好 最近两年太忙了,都没有时间文章了,希望从今天开始经常来写写自己解决过的问题,给大家参考。 有好的文章,转载也不错。

    大家好

    最近两年太忙了,都没有时间写文章了,希望从今天开始经常来写写自己解决过的问题,给大家参考。


    有好的文章,转载也不错。

    展开全文
  • 彻底解决POI 读写excel 发生OOM问题

    万次阅读 2018-12-10 16:55:06
    说实话之前之前没怎么接触过POI组件,只知道有这么一个东西可以解决excel读写问题,但不用不知道,使用起来真心无语,到处都是坑。接下来我讲分享一些在项目中遇到的坑及解决方法,其实社区也有不少类似文章,但讲的...

    说实话之前之前没怎么接触过POI组件,只知道有这么一个东西可以解决excel读写问题,但不用不知道,使用起来真心无语,到处都是坑。接下来我讲分享一些在项目中遇到的坑及解决方法,其实社区也有不少类似文章,但讲的都比较零散。

    1. .xls与.xlsx

    首先,科普一些基础常识

    .xls 是用03版Office Excel ,新建Excel默认保存的Excel文件格式的后缀是.xls,不可以打开编辑07版的xlsx文件,否则出现乱码或者卡死。行列的上限为 65536行,256列。

    .xlsx 是用07版Office Excel ,新建Excel默认保存的的Excel文件格式后缀是.xlsx,也能打开编辑03版的xls文件。行列的上限为 1048575行,16384列。

    然后,在存储格式上:

    .xls,文件存储格式实现原理是基于微软的ole db是微软com组件的一种实现,本质上也是一个微型数据库,由于微软的东西很多不开源,基本上也已经被淘汰,了解它的细节意义不大。

    .xlsx ,文件存储格式实现是基于openXml和zip技术((用winrar可以打开看)。它的优点是简单存储、安全传输方便、处理数据简单。

    .csv,纯文本文件(以","为分割符),可以被excel打开。他的格式非常简单,解析起来和解析文本文件一样。

    2. poi读写大文件的坑

    为什么一定要用POI呢?虽然POI是目前使用最多的用来做excel解析的框架,但这个框架并不那么完美。大部分使用POI都是使用他的userModel模式,它上手容易使用简单,随便拷贝个API代码并填写业务代码就可以完成读写操作。但它的问题也会比较明显:

    1. 我的excel只有5行数据,为啥它就消耗了200MB内存?
    2. 在处理比较大的 excel 的时候(2w行),有时候会会出现内存溢出(2G)

    它带来的后遗症就是,稍微几个并发(估计都不用并发),可怕的问题就来了出现full gc。

    再分享一个最“热门”的坑,当它在大并发情况下就抛的一个异常

    Caused by: java.io.IOException: Could not create temporary directory '/home/admin/dio2o/.default/temp/poifiles'
            at org.apache.poi.util.DefaultTempFileCreationStrategy.createTempDirectory(DefaultTempFileCreationStrategy.java:93) ~[poi-3.15.jar:3.15]
            at org.apache.poi.util.DefaultTempFileCreationStrategy.createPOIFilesDirectory(DefaultTempFileCreationStrategy.java:82) ~[poi-3.15.jar:3.15]
    
    //引自org.apache.poi.util.DefaultTempFileCreationStrategy
    private void createTempDirectory(File directory) throws IOException {
        if (!(directory.exists() || directory.mkdirs()) || !directory.isDirectory()) {
            throw new IOException("Could not create temporary directory '" + directory + "'");
        }
    }
    /**
    *
    如果2个线程同时判断directory.exists()都为false,但执行directory.mkdirs()如果一些线程优先执行完,另外一个线程就会返回false。
    最终 throw new IOException(“Could not create temporary directory ‘” + directory + “’”)。
    针对这个问题easyexcel在写文件时候首先创建了该临时目录,避免poi在并发创建时候引起不该有的报错。
    **/

    不过还好官方于2018-8月在4.0.0版本得以解决。

    3. 重新认识poi及流式支持

    先贴一张来自官网非常经典的图

    Spreadsheet API Feature Summary

    usermodel,它是基于DOM的文档驱动,读写都支持,基于内存的,总之就是很垃圾

    SAX,它是Simple API for XML的缩写,主要用在读文件,它并不是由W3C官方所提出的标准,但使用SAX的还是不少,几乎所有的XML解析器都会支持它。 SAX在概念上与DOM完全不同。它不同于DOM的文档驱动,它是事件驱动的,它并不需要读入整个文档,而文档的读入过程一行一行解析。所谓eventmodel(事件驱动),将一行的解析结果以观察者的模式通知处理,通知的方式基于回调(callback)机制的程序运行方法。how use?

    sxssf,它你可理解为缓存流式支持,在写文件很重要。

    到这里基本上对上图的理解已经到位了,可以下手进一步了解API了。

    1. HSSFWorkbook(excel 2003)
    它是基于usermodel,HSSFWorkbook 针对是 EXCEL2003 版本,扩展名为 .xls;所以 此种的局限就是 导出的行数 至多为 65535 行,此种因为行数不够多所以一般不会发生OOM。

    2.  XSSFWorkbook (excel 2007)
    它是基于usermodel,这种形式的出现是由于第一种HSSFWorkbook 的局限性而产生的,因为其所导出的行数比较少,所以XSSFWookbook应运而生 其 对应的是EXCEL2007+(1048576行,16384列)扩展名 .xlsx,最多可以 导出 104 万行,不过 这样 就伴随着一个问题---OOM 内存溢出,原因是 你所 创建的 book sheet row cell 等 此时是存在内存的并没有持久化,那么随着数据量增大内存的需求量也就增大,那么很大可能就是要 OOM了。

    3. SXSSFWorkbook(excel 2007后,poi使用3.8+版本)

    它是基于sxssf,因为数据量过大导致内存吃不消无法写文件,有读一批写一批的做法吗? 答案是肯定的。怎么做?此种的情况就是设置最大内存条数。比如:设置最大内存量为5000 rows(new SXSSFWookbook(5000))或者手动flush(),此时当行数达到 5000 时,把内存中的数据写到文件中,以此逐步写入避免OOM,那么这样 就完美解决了大数据下导出的问题。

    性能参数:SXSSFWorkbook.setCompressTempFiles(true),SXSSF将sheet data刷新到临时文件(每张sheet一个临时文件)中,并且这些临时文件的大小可以增长到非常大的值。例如,对于一个20MB的CSV数据,临时XML的大小变得大于千兆字节。如果临时文件的大小是一个问题,你可以开启使用GZIP压缩。

    4. WorkbookFactory.create(InputStream inputStm)

    // 它会基于xls或xlsx判断创建HSSFWorkbook或XSSFWorkbook
    public static Workbook create(InputStream inp, String password) throws IOException, InvalidFormatException, EncryptedDocumentException {
            // If clearly doesn't do mark/reset, wrap up
            if (! inp.markSupported()) {
                inp = new PushbackInputStream(inp, 8);
            }
    
            // Ensure that there is at least some data there
            byte[] header8 = IOUtils.peekFirst8Bytes(inp);
    
            // Try to create
            if (NPOIFSFileSystem.hasPOIFSHeader(header8)) {
                NPOIFSFileSystem fs = new NPOIFSFileSystem(inp);
                return create(fs, password);
            }
            if (DocumentFactoryHelper.hasOOXMLHeader(inp)) {
                return new XSSFWorkbook(OPCPackage.open(inp));
            }
            throw new InvalidFormatException("Your InputStream was neither an OLE2 stream, nor an OOXML stream");
        }

    5. 抛弃不重要的数据

    Excel解析时候会包含样式,字体,宽度等数据,但这些数据占了相当大的空间,却是我们不关注的,如果将这部分数据抛弃可以大大降低内存使用。

    4. 其他解决方案

    1. easyexcel

    alibaba开源的,基于注解,api可读性好,更多

    2. Hutool-poi

    api可读性好,本质是对POI封装,更多

    5. 总结

    如果对有一定并发的项目,大文件读最好是使用SAX模式,但它有一定的编码量,大文件的写最好基于sxssf。当然结合项目的实际情况,我们项目中是有定时做System.gc(),如果你gc不是cms模式要在启动项中要添加配置(-XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled)。

    展开全文
  • 解决U盘写保护,成功擦除

    万次阅读 热门讨论 2018-04-12 11:20:15
    在此给大家总结一下如何去解决类似的问题,希望能给你们带来一些帮助,次方法是终极方法,如果想保留数据的可以数据给备份下来,写保护的模式下是可以进行读取的,大家一定提前备份!!!好了 开始说...

    大家有时会遇到U盘突然不能写的问题,格式化也报错,说是U盘写保护,但是又不知道怎么去关闭,我最近帮同事解决了这个问题,我的蛮荒之力和麒麟臂同时发作才解决掉,U盘型号实在太多了,可能大家和我的并不是同一个型号,在此给大家总结一下如何去解决类似的问题,希望能给你们带来一些帮助,次方法是终极方法,如果想保留数据的可以把数据给备份下来,写保护的模式下是可以进行读取的,大家一定要提前备份!!!好了  开始说方法。。。

    大家先下载这个工具: https://download.csdn.net/download/u014239709/10343207   不好意思哈,这个需要5积分,如果没有积分的,可以留言,我是用这个工具成功擦除了金士顿的U盘主控芯片型号是PS2251-07,这个型号可以使用工具里的GetInfo v3.10.7.6.exe获取,附图如下:

    这是很关键的一步,这样就不局限于你的优盘是什么型号的了,如果百度上无法搜到相应的型号,就选择版本相近的。

    找到了相应的版本之后,如果和我的相近,就直接打开量产工具就行了,可能你会发现没有识别出来U盘,不要着急,这边有一个关键点,看图:

     

    再此打开就会发现你的U盘了,如果没有出现,点击update应该就出现了,一般不需要配置,点击start就可以了,等待量化完成,重新插拔优盘就可以了。有可能出现不成功的现象,大家按照这个方法在茫茫的度娘中找到合适的版本就可以了,祝你好运!

    需要软件的兄弟姐妹们,可以给我留言哦!!!

     

    =================================================================
    为了方便大家下载工具使用,我将工具上传到了百度云盘,分享给大家!

    链接:https://pan.baidu.com/s/1U_NlFdS7oPbP4pc-YbY-uQ
    提取码:fji9
     

     

    展开全文
  • https://github.com/ddwhan0123/Useful-Open-Source-Android昨天用webpack我们的项目跑了起来,没看的可以看下,比较有条理性:http://blog.csdn.net/ddwhan0123/article/details/55095661今天我们就要react的...

    转载请注明出处:王亟亟的大牛之路

    啰嗦之前先安利,会渐渐丰富前端的知识点 https://github.com/ddwhan0123/Useful-Open-Source-Android

    昨天用webpack把我们的项目跑了起来,没看的可以看下,比较有条理性:http://blog.csdn.net/ddwhan0123/article/details/55095661


    今天我们就要写react的内容了,首先先要用npm来下载相关需要的依赖库

    分别是react和react-dom

    npm install --save react react-dom

    当你下完react相关后就要解决es6和jsx的支持,这部分交由Babel解决

    npm install --save-dev babel-cli babel-preset-react
    
    npm install --save-dev babel-cli babel-preset-es2015

    因为用Webpack构建项目,所以css 相关内容也可以像加载普通js一样处理,只需要加入几个加载库

    npm install css-loader style-loader --save-dev
    

    下完之后在配置文件里添加支持就好

    var path = require('path');
    var config = {
      entry: path.resolve(__dirname, 'app/main.js'),
      output: {
        path: path.resolve(__dirname, 'build'),
        filename: 'bundle.js'
      },
      module: {
        loaders: [
          {
            test: /\.jsx?$/,
            exclude: /(node_modules|bower_components)/,
            loader: 'babel-loader',
            query: {
              "presets": ["es2015", "react"]
            }
          }, {
            test: /\.css$/,
            loader: 'style!css' 
            }
        ]
      }
    };
    
    module.exports = config;
    

    七大姑八大姨都配置好就可以干活了,我们写个简单的<H1>试试

    index.html

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8"/>
      </head>
      <body>
        <div id="root"></div>
        <h1>
          hi
        </h1>
        <script src="http://localhost:8080/webpack-dev-server.js"></script>
        <script src="bundle.js"></script>
      </body>
    </html>
    

    接下来看下入口js

    import React from 'react';
    import ReactDOM from 'react-dom';
    
    export default class Hello extends React.Component {
      render() {
        return (
              <H1>hi all</H1>
        );
      }
    }
    ReactDOM.render(
      <Hello />,
      document.getElementById('root')
    );
    

    跑下来就是在页面上打了个hi all这里就不截图了。


    手写css不难,但是很烦,因为会瞎眼睛,找了找各种封装的库,找了个靠谱的,推荐给大家

    https://github.com/styled-components/styled-components

    npm install --save styled-components

    下载也是走 npm,下完就好,作者提供了一个供大家试玩的网站,地址如下:
    http://www.webpackbin.com/V1VNoINA-

    对html的那些标签进行了封装,使用它就跟使用默认的html一样,整个css架构都跟着组件走,而不需要你从中调度。
    具体支持哪写可以看https://github.com/styled-components/styled-components/blob/master/src/utils/domElements.js

    大致长这样

    这里写图片描述

    使用起来也非常简单,我们把我们的demo加以修改

    import React from 'react';
    import ReactDOM from 'react-dom';
    import styled from 'styled-components';
    
    const Input = styled.input`
      font-size: 1.25em;
      padding: 0.5em;
      margin: 0.5em;
      color: palevioletred;
      background: papayawhip;
      border: none;
      border-radius: 3px;
    
      &:hover {
        box-shadow: inset 1px 1px 2px rgba(0,0,0,0.1);
      }
    `;
    const H1 = styled.h1`
      background-color: #a1a
    `;
    
    export default class Hello extends React.Component {
      render() {
        return (
          <div>
              <Input placeholder="@mxstbr" type="text" />
              <H1>hi all</H1>
          </div>
        );
      }
    }
    ReactDOM.render(
      <Hello />,
      document.getElementById('root')
    );
    

    改完后长这样
    这里写图片描述

    使用完全就像使用常规html标签一样非常简便,加以简单的设置就可以达到任意你想要的效果

    这一篇内容比较简单,主要是开工前的准备第二期,但是组织好了好工具才会 事半功倍吧?

    展开全文
  • 居然周末加班才解决这个问题

    千次阅读 2019-10-30 22:10:55
    摘要 万万没想到,最近的一个...虽然这个任务可能你不会遇到特别相似的,但是我还是想把问题解决过程分享给大家,顺便聊聊如何解决技术问题问题背景 需要将一个开源的python项目接入到公司的微服务体系(主要是...
  • 转载请注明出处:王亟亟的大牛之路本来想一下子路由的接下来的内容都完的,但是今天白天开了会,传了些代码打了个包,就被耽搁了 这一篇来讲一下 IndexLink和 onlyActiveOnIndex的一些问题老习惯先安利一下:...
  • 今天用sourceTree好奇怪,我pull下来了同事的代码,但是本地...我先是从git 上面clone一份代码下来, 发现这个类里面是有同事的函数的,这次真的没有找出原因,用的最笨的办法,自己之前改动的加入到项目里面去,然
  • 吉德林法则,难题清清楚楚地出来,便已经解决了一半。
  • 永久解决VSCode终端中文乱码问题

    万次阅读 多人点赞 2019-05-05 01:02:12
    在Windows下使用VSCode编译运行,都出现中文乱码的问题,今天我就遇见了这种情况,上网搜了半天也没有找到正确的解决方法,现将我我的方法晒一下. 中文的windows下的cmd默认使用GBK的编码, 每次需要的时候只要在...
  • IDEA中Maven依赖包下载不了的问题解决方案汇总

    万次阅读 多人点赞 2018-04-25 14:11:16
    之前一直把下载不上的依赖剪切再粘贴到pom.xml文件中,保存它就自动下载了,但是今天怎么剪切粘贴都没用,所以就花了点时间在网上各种搜解决方案,试了一些之后终于从根本上解决了问题,所以个博客把解决这个问题的方案...
  • NFS不能正常读写的问题解决

    千次阅读 2009-03-01 23:24:00
    周末搞了套机器,E8400+ASUS P5Q,超到4G,挺爽。搞定后直接上ubuntu 8.10,想工作环境迁移上去。 android的编译等都挺正常。接下来就是配置nfs等。想先用nfs跑起来。...初步判断是大数据的问题。 经g
  • 用flock在文件前先锁上,等完后解锁,这样就实现了多线程同时读写一个文件避免冲突。大概就是下面这个流程 /* *flock(file,lock,block) *file 必需,规定锁定或释放的已打开的文件 *lock 必需。
  • 谈谈程序员解决问题的能力

    万次阅读 多人点赞 2017-03-25 12:36:47
    谈谈程序员解决问题的能力 解决问题的能力,程序员立业之本。 一般文章我不会特意去,而是有感而发的时候刚好又有时间我就会去写写文字。本想推些技术文章的,但技术文章又很耗时,得太浅显又没有技术含量...
  • 解决问题最简单的方法

    千次阅读 2016-08-20 07:09:45
    这是一本小书,只有145页,7万字左右,花2个小时就能读完,但你会学到立马提高你解决问题能力的10多种方法。
  • 为了减轻数据库的压力,一般会使用数据库主从(master/slave)的方式,但是这种方式会给应用程序带来一定的麻烦,比如说,应用程序如何做到数据到master库,而读取数据的时候,从slave库读取。如果应用程序判断...
  • 传统的单层神经网络在对于xor这样简单的分类问题都难以解决A0,A1分为一类,B0,B1分为一类,用一条直线是无论如何也无法区分的。解决的方法是采用多层神经网络,我做了一个详细的计算,果然能解决,很神奇,...
  • 解决Python memory error的问题(四种解决方案)

    万次阅读 多人点赞 2018-08-08 21:35:51
    (作者:陈玓玏) 昨天在用用Pycharm读取一个200+M的CSV的过程中,竟然出现了Memory Error!...如果你用pd.read_csv来读文件,会一次性数据都读到内存里来,导致内存爆掉,那么一个想法就是一...
  • 今天要解决的是Y轴文字被遮住的问题。 被遮住的样式: 这种情况肯定不是我们所能接收的。接下来解决办法: 使用grid的left与right解决: options: { grid: { left: '1%', right: '1%', ...
  • 近期公司调用外部连接的地方比较多,楼主正好碰到这个问题篇博文奉上,方便自己日后查阅。 首先大家可以先了解下http3XX状态码到底是什么含义,楼主看了好几篇博文 就这篇感觉比较通俗易懂点 ,想了解的点http...
  • 在这里一下解决过程:  虚拟机克隆后,会遇到的问题:  1.MAC地址一样  2.IP一样  3.eth0配置文件存在,但是使用ifconfig -a 查看只能看到 eth1  4. 无法连接外网,提示域名无法解析  解决办法:  1
  • 两步解决maven依赖导入失败问题

    万次阅读 多人点赞 2019-03-01 07:30:00
    由于网络问题,maven依赖经常会导入失败,私服上的以来导入失败概率低一些,maven中央仓库上的依赖导入失败的概率则相对较高,其实这个问题很容易解决,但是之前还是见到很...
  • 解决问题的四个步骤(一)

    千次阅读 2019-09-23 20:23:54
    注意:我们应该花80%的精力放在 拆解 定位问题 20% 去解决问题(合理) 明确和理解问题 在代码出现bug的时候 我们都会去看日志,调试 靠编程软件来解决. 这一步就是 找问题. 如果报一个404 无法说明更详细的错误原因...
  • 因为写论文的需要,在word中插入mathtype编辑器,中间遇到了一些问题,所以现在写下来也方便大家参考。 mathtype可以在很多地方下载到,这里提供了一个链接: 链接:http://www.mathtype.cn/xiazai.html 直接...
  • 同步锁-线程安全问题解决方案

    万次阅读 多人点赞 2021-03-21 15:12:05
    1 同步锁 1.1 前言 经过前面多线程编程的学习,我们遇到了线程安全的相关问题,比如多线程售票情景下的超卖/重卖现象. 上节笔记点这里-进程与线程笔记 ...那我们可以有可能出现问题的代码都包裹起来,一次只让一
  • 在Android所有系统自带的控件当中,ListView这...遇到这个问题时,不少人在网上搜索找到了相应的解决方案,但是真正深入理解这个问题出现的原因并对症解决的人恐怕还并不是很多。那么今天我们就来具体深入分析一下ListV
  • 之前过一篇 一个框架...在这篇文章中可以学到一个完整的运用机器学习解决分析问题的过程,它包括了解决问题的一般流程,描述性统计的常用方法,数据清洗的常用方法,如何由给定的普通变量启发式思考其他影响因素,sk
  • 技术人员的价值,不在于你能出多么优美的代码,也不在于你能设计出一个多么大而全的高屋建瓴的架构,而在于你实实在在的解决问题的能力,在于你使用技术手段服务于业务的能力”。 导入: 先罗列一两个遇到的现象:...
  • 一个框架解决几乎所有机器学习问题

    万次阅读 多人点赞 2017-05-02 11:26:37
    上周一个叫 Abhishek Thakur 的数据科学家,在他的 Linkedin 发表了一篇文章 Approaching (Almost) Any Machine Learning Problem,介绍他建立的一个自动的机器学习框架,几乎可以解决任何机器学习问题,项目很快也...
  • C++里Ofstream文件的中文问题

    万次阅读 2013-03-05 13:55:07
    这次把问题解决方法都记录下来,以备来日查阅。 问题1:中文路径问题导致文件打开失败。 通常是因为在调用fstream的open方法时,系统内部调用mbstowcs_s进行文件名转换,而mbstowcs_s依赖于程序的本地化设置...
  • 怎样解决PHP中文乱码问题

    千次阅读 2009-11-13 21:48:00
    最近在CSDN刚开了这个博客,没什么时间以前的文章搬过来,只能有空慢慢来了。 --------------------------这篇文章仅献给那些一直在PHP乱码问题上困惑的人。 A.首先说下HTML中文乱码问题解决方法。比如有个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 623,487
精华内容 249,394
关键字:

把要解决的问题写下来