精华内容
下载资源
问答
  • 对无用之用的理解
    千次阅读
    2018-02-05 14:08:49

                         个人对算法的一些理解

          在学校的同学们之间,算法总是被放在一个非常高的位置,有多高呢?嗯...就是非常非常高啦,高到有人只要能说出几个非常牛掰的和算法有关的名词,比如NP完全问题啦、模拟退火啦就觉得自己是大神了(其实有些人连快排都写不出来,或者写个快排还要先翻翻书)。其实我觉得算法跟数据结构、设计模式一样,都只是一种工具,用这样的工具能快速有效地解决一些实际问题,如果只知道算法,而不懂这些算法能够用于哪些场景,那么这些算法在这些人的大脑中是没有什么意义的。
         根据我的经验,算法对于大一的学生是“那个人算法很厉害,大神大神”,对于大二"你听说过模拟退火过没?你听说过遗传算法没?你听说过反馈神经网络没?现在的AI算法可以......",对于大三"嗯,算法很重要,以后工作有比没有好,工作中经常用到,平时有空闲的时间多研究研究,对未来的成长大大的有好处"。
          算法其实就是对一个问题或一类问题的解决过程的描述。比如说用加法求1加到100,那么就可以用
    count=0
    for i in 1...100
        count += i
    来描述。这个描述的过程就是不断的累加。算法非常关注于复杂度,也就是时间复杂度和空间复杂度。有些算法可以让时间用得尽量少,而有些算法为了节约空间,会用牺牲时间的方式来换取少用空间。不过,由于现在的物理储存设备的空间越来越大,空间暂时不是非常重要,除非在一些特殊的场景,比如说在大规模数据的情况下。当数据只有1M的时候,空间增加100倍没有什么很大的问题,但是如果数据有1T的话,再增加100倍后的数据量,是很难让人接受的。对于一个算法,我们经常需要在时间和空间之间进行取舍。
          算法跟程序不同,算法是对一个问题解决过程的描述,需要有0个或多个输入,至少1个输出,每个过程都是确定的,并且一定要有有限的时间内完成。但程序就不一定,有些程序可以一直运行下去,只有一直给机器供电,程序一直不出现致命错误。
          算法也可以一种模型,数据结构是对数据储存的模型,而算法是对问题解决过程的模型。数据结构是为了更方便的储存和访问数据,算法是为了更有效率地处理数据。所以算法和数据结构是不分家的,没有数据结构,算法根本没有数据可以操作,算法也无法进行,而没有算法,数据结构光储存有数据,这些数据不经处理,也大部分是无用的。
          经过无数计算机算法前辈的研究,已经有非常多现成的算法供我们学习和使用。算法并非是计算机专有的,或者说算法的思想来源于很多其他行业。比如说前面说到的模拟退火算法。算法还涉及到了很多微积分、线性代数、离散数学、概率论、博弈论、数论方面的知识。
          
    更多相关内容
  • 软件测试度量是一种通过检测软件测试过程的质量和有效性来评估软件开发的量化方法。开发团队使用测试指标来... 下面这些无用的测试指标的例子可以帮助你更好地理解测试指标是否提供了所需的洞察力。 1.执行的测试用例的
  • Asset Hunter 2是一款用于Unity3d清理无用资源的实用工具,能够让我们一直保持保持项目的清洁。 Asset Hunter是一个分析构建日志的工具,并为提供项目文件夹中未使用资产的易于理解的概览。 结果被分组到文件夹和...
  • 当项目开发时间越来越久,资源不断更新的时候,...3、在当前工程上继续扩展有时会造成理解上的困难等等 使用Android Studio可以帮助我们快速定位我们工程中的无效资源和类文件。 Step1:在工具栏中找到Analyze菜...

    当项目开发时间越来越久,资源不断更新的时候,有时我们的资源文件和自定义的类文件会越来越多,而且没有去定时的整理。这时会造成几个问题:

    1、资源文件过多,打包时apk会变大

    2、无效类过多时,对于维护来说比较耗时

    3、在当前工程上继续扩展有时会造成理解上的困难等等


    使用Android Studio可以帮助我们快速定位我们工程中的无效资源和类文件。

    Step1:在工具栏中找到Analyze菜单按钮

    Step2:在Analyze菜单下面找到Run Inspection by Name选项

    Step3:在弹窗中输入unused resources,点击回车

    Step4:根据自己的需求选择范围即可(我这里选的是Whole project)

    Step5:点击OK后一段分析时间过去,底部栏会显示出工程中的无效文件,可以根据实际需要进行删减或是点击quick fix进行快速自动处理

     

    展开全文
  • 那么这就不难理解了。我们Fundebug每天的数据请求为百万级别,那么日志数据自然非常大。 使用truncate命令,可以将Nginx容器的日志文件“清零”: truncate -s 0 /var/lib/docker/containers/a376aa694b22ee497f6...

    目录

    1.删除未被任何容器使用的本地卷

    2. Docker System命令

    3. 手动清理Docker镜像/容器/数据卷

    3. 限制容器的日志大小

    4. 重启Docker


    1.删除未被任何容器使用的本地卷

    要使用此命令,客户端和守护程序API版本都必须至少为1.25。在客户端上使用docker version命令可以检查客户端和守护程序API版本。

    删除未被任何容器使用的本地卷。

    docker volume prune -f

    其中选项有:

    名称,简写说明
    --filter提供过滤值
    --force , -f不提示确认信息,直接删除。

    其他命令:docker volume rm [OPTIONS] VOLUME [VOLUME...]

    删除一个或多个卷。从1.25版本起,支持一个选项--force , -f,强制删除一个或多个卷。

    要使用此命令,客户端和守护程序API版本都必须至少为1.21。在客户端上使用docker version命令可以检查客户端和守护程序API版本。

    2. Docker System命令

    它可以用于管理磁盘空间。
    docker system df命令,类似于Linux上的df命令,用于查看Docker的磁盘使用情况:

    docker system df
    TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
    Images              147                 36                  7.204GB             3.887GB (53%)
    Containers          37                  10                  104.8MB             102.6MB (97%)
    Local Volumes       3                   3                   1.421GB             0B (0%)
    Build Cache                                                 0B                  0B
    

    可知,Docker镜像占用了7.2GB磁盘,Docker容器占用了104.8MB磁盘,Docker数据卷占用了1.4GB磁盘。
    docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。docker system prune -a命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了……所以使用之前一定要想清楚吶。

    执行docker system prune -a命令之后,Docker占用的磁盘空间减少了很多:

    docker system df
    TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
    Images              10                  10                  2.271GB             630.7MB (27%)
    Containers          10                  10                  2.211MB             0B (0%)
    Local Volumes       3                   3                   1.421GB             0B (0%)
    Build Cache                                                 0B                  0B
    

     

    3. 手动清理Docker镜像/容器/数据卷

    对于旧版的Docker(版本1.13之前),是没有Docker System命令的,因此需要进行手动清理。这里给出几个常用的命令:

    删除所有关闭的容器:

    docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
    

    删除所有dangling镜像(即无tag的镜像):

    docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
    

    删除所有dangling数据卷(即无用的Volume):

    docker volume rm $(docker volume ls -qf dangling=true)
    

     

    3. 限制容器的日志大小

    有一次,当我使用1与2提到的方法清理磁盘之后,发现并没有什么作用,于是,我进行了一系列分析。

    在Ubuntu上,Docker的所有相关文件,包括镜像、容器等都保存在/var/lib/docker/目录中:

    du -hs /var/lib/docker/
    97G /var/lib/docker/
    

    Docker竟然使用了将近100GB磁盘,这也是够了。使用du命令继续查看,可以定位到真正占用这么多磁盘的目录:

    92G  /var/lib/docker/containers/a376aa694b22ee497f6fc9f7d15d943de91c853284f8f105ff5ad6c7ddae7a53
    

    由docker ps可知,Nginx容器的ID恰好为a376aa694b22,与上面的目录/var/lib/docker/containers/a376aa694b22的前缀一致:

    docker ps
    CONTAINER ID        IMAGE                                       COMMAND                  CREATED             STATUS              PORTS               NAMES
    a376aa694b22        192.168.59.224:5000/nginx:1.12.1            "nginx -g 'daemon off"   9 weeks ago         Up 10 minutes                           nginx
    

    因此,Nginx容器竟然占用了92GB的磁盘。进一步分析可知,真正占用磁盘空间的是Nginx的日志文件。那么这就不难理解了。我们Fundebug每天的数据请求为百万级别,那么日志数据自然非常大。

    使用truncate命令,可以将Nginx容器的日志文件“清零”:

    truncate -s 0 /var/lib/docker/containers/a376aa694b22ee497f6fc9f7d15d943de91c853284f8f105ff5ad6c7ddae7a53/*-json.log
    

    当然,这个命令只是临时有作用,日志文件迟早又会涨回来。要从根本上解决问题,需要限制Nginx容器的日志文件大小。这个可以通过配置日志的max-size来实现,下面是Nginx容器的docker-compose配置文件:

    nginx:
    image: nginx:1.12.1
    restart: always
    logging:
    driver: "json-file"
    options:
      max-size: "5g"
    

    重启Nginx容器之后,其日志文件的大小就被限制在5GB,再也不用担心了~

     

    4. 重启Docker

    有一次,当我清理了镜像、容器以及数据卷之后,发现磁盘空间并没有减少。根据Docker disk usage提到过的建议,我重启了Docker,发现磁盘使用率从83%降到了19%。根据高手指点,这应该是与内核3.13相关的Bug,导致Docker无法清理一些无用目录:

    it's quite likely that for some reason when those container shutdown, docker couldn't remove the directory because the shm device was busy. This tends to happen often on 3.13 kernel. You may want to update it to the 4.4 version supported on trusty 14.04.5 LTS.


    The reason it disappeared after a restart, is that daemon probably tried and succeeded to clean up left over data from stopped containers.

    我查看了一下内核版本,发现真的是3.13:

    uname -r
    3.13.0-86-generic
    

    如果你的内核版本也是3.13,而且清理磁盘没能成功,不妨重启一下Docker。当然,这个晚上操作比较靠谱。

     

    展开全文
  • 了,你听过144Hz没?就像以前的胶片电影一样,我们在电脑显示器上看到的画面都是由一张一张连贯起来的“图片”组成的(不管你是看网页还是玩游戏)。这些“图片”则由显卡渲染生成,所以在运行同一款应用的时候,...

    科技在发展,技术在进步。崭新而实用的技术总是能为我们带来更棒的应用体验,至于当今在游戏本上被炒得非常火的144Hz屏幕以及窄边框概念,它们到底是崭新而实用的技术还是商家骗钱的噱头?

    哦对了,你听过144Hz没?

    就像以前的胶片电影一样,我们在电脑显示器上看到的画面都是由一张一张连贯起来的“图片”组成的(不管你是看网页还是玩游戏)。

    这些“图片”则由显卡渲染生成,所以在运行同一款应用的时候,显卡性能越好,其每秒所能生成的“图片”也就越多。

    a03a2da9b727f96ed2e28e3e5745fecb.png

    不过,并不是说显卡性能越好,我们就能在屏幕上看到越来越流畅的画面了,因为显示器还会造成一个瓶颈:每一张“图片”都要由显示器来最终呈现。

    而实际能呈现出多少张“图片”到我们的肉眼里去,那还要看显示器的刷新率(显示器的硬性指标,通常无法改变)是多少。

    60Hz就是每秒呈现60张“图片”,144Hz就是每秒呈现144张“图片”,“图片”越多画面就越流畅。

    37d5ded12d24b43e718edcdcb96834f1.png

    因此,理论上来讲,在我们玩游戏的时候,用一块性能好的显卡再配上一个144Hz的屏幕就能给我们带来比以往更加流畅的体验。

    ab07400c326e3ce5af2dcee79e80599f.png

    那究竟是不是我说的这样呢?下面我们就用144Hz显示器和传统60Hz显示器,通过游戏、日常系统操作和观影这三个部分来对比测试一下。

    f41a03a911aefa9e40010567c82cdad1.png

    144Hz屏幕游戏测试部分:

    游戏部分我们做三项更加细化的测试,分别对应显卡性能一般时144Hz的表现、显卡性能较好时144Hz屏幕的表现以及显卡性能超强时144Hz屏幕的表现。

    游戏选用还算热门的《守望先锋》,为了让大家能更直观地看到区别,我们选择用高速摄影机实拍屏幕画面,然后放慢视频后进行对比。

    6000455d9e5188db258440e3ab489c73.png

    第一种,游戏帧数大于等于144FPS,能“喂饱”高刷新率屏幕

    d30f01d3db86db6555aa8e0f89c413f0.png

    第二种,游戏帧数达到100FPS,能基本“喂饱”高刷新率屏幕

    a413d7791790ed559cc6d25a3f9173f4.png

    第三种,游戏帧数等于60FPS,无法“喂饱”高刷新率屏幕

    0dab343489c3a47f3c21d3d6365e1ec9.png

    游戏体验部分结论:

    高速摄影能捕捉到我们肉眼平时不易观察到的细节,通过上面的对比,大家应该能了解,在游戏体验方面,144Hz屏幕比传统60Hz显示器有明显的提升(我指的是硬件层面),原本在60Hz刷新率下的移动的物体充满了瞬移的跳跃感,而144Hz屏幕上的移动物体则显得非常平顺。

    前提是!你的电脑能先跑过60帧

    那么如果你买了144Hz的游戏本以后却身无分文,啥游戏都玩不起了,那么你还可以看我们太平洋电脑网,或者看看我们的视频。那么这些时候144Hz还有用么?

    2285bc13f9b346d90624cb5bafc5b9d3.png

    由于视频和游戏不同,每一部片子固定了帧数,比如我们在电影院看到的大片通常是24FPS,有些电视剧是30FPS,综艺、体育节目可能可以达到60FPS,总之就是目前市面上很少有超过60FPS的视频(李安指导的《比利林恩》是一部120FPS的影片),而这时144Hz刷新率的屏幕就确实没用了。

    132971bf7b2c19e1bdcdc88899baa76d.png

    而你在看我们太平洋电脑网或者XX网页的时候,系统会根据屏幕刷新率来让显卡生成相对应的“图片”,也就是说如果你用的是144Hz屏幕,那么系统就会让显卡每秒生成144张“图片”,因此在浏览网页、拖动窗口等操作时,我们能感觉到144Hz显示器会比传统60Hz显示器更加流畅。

    502bb8186f6c901a235909cb62314413.png

    回到实际体验上来讲,我个人在玩游戏、进行系统日常操作的时候确实能感受到144Hz屏幕所带来的不同。

    9c95f6100c9f2f178019d8465340eeca.png

    而对于那些认为高刷新率无用的人,其实我也能理解。因为我想每个人可能都存在生理差异。打个比方,假如你的视力是1.5,那么你可能能看到10米以外的一个大字,而你朋友那1.0的视力或许就真的看不到那个字。

    32da5dd6c3c3de032cfb9ea99fb7c1da.png

    所以在我们选购144Hz的屏幕之前,我推荐大家去就近的网吧、体验店去试用一下144Hz的显示器,看看自己是否能感受到区别,如果能感受到区别,那么144Hz屏幕对你来说就是一项崭新而实用的技术,若感受不到,那就不要再去那家网吧了。

    f3a0f56bba843f3029e20277d0303798.png

    窄边框又是什么“鬼”?

    窄边框应该不难理解?就是很窄的屏幕边框。那么应用在笔记本上的话,能为我们带来怎样的实际体验呢?我想大概有这三点:

    1、看上去美

    传统游戏本和窄边框游戏本给人的感觉是完全不同的,是跨越时代的感觉。哪个更美观自然不必多说,大家都是成年人。

    75314d660534ea3324fb33e0510c1ad8.png

    2、看上去更沉浸

    边框变窄以后,似乎在看电影、玩游戏的时候没有了屏幕边框干扰我,我能更快地沉浸到内容当中。

    3fa27d3535a1c40c5a868b9af2f370aa.png

    3、机身体积缩小,更便于我们携带

    同样是15.6英寸的屏幕,屏幕边框变窄以后,机身体积也能得到缩减,这样的就让游戏本变得更加便于携带了。

    a2e46eb9bdf58d2ed511337ca70ed853.png

    总体而言,在我看来144Hz屏幕是否有效因人而异,大家亲自试一试再决定是否为此多掏一些腰包会相对更理性一些,而窄边框能确实带来美、沉浸、便携的用机体验。最重要是美!

    展开全文
  • 从计算机程序出现的第一天起,效率的追求就是程序天生的坚定信仰,这个过程犹如一场没有终点,永不停歇的F1方程式竞赛,程序员试车手,技术平台则是在赛道上飞驰的赛车。 文章目录早期(编译期)优化概述Javac...
  • 说说你GC理解,什么是GC?

    千次阅读 2018-11-22 23:13:42
    GC(GarbageCollection)是垃圾回收机制(垃圾回收器),GC是JVM内存(实际上就是对象)进行管理的方式。 Java是由C++发展来的。它摈弃了C++中一些繁琐容易出错的东西。其中有一条就是这个GC。 写C/C++程序,...
  • 视频内容理解相关方法

    千次阅读 2019-08-28 19:57:30
    本文是做场景识别的,场景识别有几个难点,图像中对于场景识别的无用信息比较多(例如人、车等),全景数据并非由某个部分属于某个场景的标签。 本文将VLAD方法融入cnn的结构,并进行end-to-end训练,相比使用训好...
  • 以编译方式执行本地代码比解释方式更快,所以有这样的共识,除去虚拟机解释执行字节码时额外消耗时间的原因外,还有一个很重要的原因就是虚拟机设计团队几乎把代码的所有优化措施都集中在了即时编译器中(在...
  • GitHub 19k Star 的Java工程师成神路,不来了解一下吗! 最近一段时间,我在面试的过程中,很喜欢问双亲委派的一些问题,因为我发现这个问题真的可以帮助我全方位的了解一个候选人。 记得前几天一次面试过程中,我...
  • 深入理解MySQL索引B+Tree

    万次阅读 多人点赞 2019-01-13 21:17:25
    在正式讲解之前,后面举例中使用的表结构先简单看一下: create table user ( id bigint not null comment 'id' primary key, name varchar(200) null comment 'name', age bigint null comment 'age', gender int...
  • 如何快速清除无用的css

    万次阅读 2015-08-15 03:02:12
    我们在编写CSS样式的时候,往往或遭遇CSS样式的修改或者界面设计的变更,页面的CSS在经历几个版本的修改之后,可能有些样式已经不到了,或许将某些样式更名了而原来的忘了删除,总之页面中可能存在着一些无用的...
  • 我也就是把我自己学习算法过程中的一些问题和问题的理解记录一下,希望可以加深大家该算法的理解。 本篇可能不会详细讲解FP树的构建过程或是算法流程,而是会算法中的一些关键点给出自己的理解,分析算法为...
  • keil Mdk 优化等级的理解

    千次阅读 2020-08-24 21:37:06
    移除未调用的内联函数和静态函数,关闭debug窗口优化,此状态也能用于调试 特点:有限的优化,去除无用的inline和无用的static函数、死代码消除等,在影响到调试信息的地方均不进行优化。在适当的代码体积和充分的...
  • Java8 出现的时间已经不算短了,免费维护期马上也要到期了,官方已经开始推荐使用 Java...函数式编程的定义很晦涩,但是我们可以将函数式编程理解为函数本身可以作为参数进行传递,就是说,参数不仅仅可以是数据,也..
  • 借汉诺塔理解栈与递归 单调栈 双端单调队列 单调队列优化的背包问题 01背包问题 完全背包问题 多重背包问题 串的定长表示 串的堆分配实现 KMP 一、引子 二、分析总结 三、基本操作 四、原理 五、复杂度分析 ...
  • Java面向对象的理解

    千次阅读 多人点赞 2019-03-17 00:03:55
    当不存在一个对象的引用时,该对象成为一个无用对象。Java的垃圾收集器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。当系统内存用尽或调用System.gc( )要求垃圾回收时,垃圾回收线程与系统...
  • 项目团队合作中,总会出现一些重复或者无用的资源,特别是经过几次迭代。代码不清爽。 以下步骤请依次执行: 多余的import 在项目文件目录右键-&gt;Optimize import. 点击Run。 PS:千万不要在项目正在...
  • 深入理解Java虚拟机-垃圾回收器与内存分配策略

    万次阅读 多人点赞 2020-01-04 13:08:32
    阅读《深入理解Java虚拟机》受益匪浅,Java虚拟机有初步的认识。这里写博客主要出于以下三个目的:一方面是记录,方便日后阅读;一方面是加深内容的理解;一方面是分享给大家,希望大家有帮助。 《深入理解...
  • SQL Server 索引管理——禁用无用索引

    千次阅读 2019-05-28 13:38:34
    SQL Server 索引管理——禁用无用索引 前文中,对于不再使用的索引,直接生成删除的脚本,在文中,也提到了直接删除无用索引存在的风险。为了保险起见,如果我们使用的是SQLServer 2005及以后版本,我们可以使用...
  • 深入理解iOS App的启动过程

    万次阅读 多人点赞 2017-10-23 13:28:28
    这就保证了在dyld进行加载的时候,可以每一个page进行独立的验证。 mach-o中有很多符号,有指向当前mach-o的,也有指向其他dylib的,比如 printf 。那么,在运行时,代码如何准确的找到 printf 的地址呢? ...
  • 必要的话说在前面,我的思考还是很浅的,而且也没有足够的时间研究这个问题,特别是我对于银行支付清算业务的理解有限,所以有浅薄不当处,还请读者体谅和指出。 实际这两件事情不应该分开看,而应该视为一问一答...
  • 中西方关于颜色的理解对比

    千次阅读 2019-06-28 08:12:25
    红色”汉语文化的人而言,表示喜庆、幸福、吉祥, 但在英语国家的人眼中,绿色和金黄色具有类似的联想意义,而红色则意味着流血、危险或暴力 绿色green在英语中可以表示“嫉妒、眼红”,如:green with envy,...
  • linux eBPF是3.17内核开始引入的一个全新设计,代码目录主要在kernel/bpf 下,它的全称是 extended BPF(eBPF), 目前关于eBPF的资料还比较乱,很难得看到一篇ebpf总结的那么全的文章,转载自此:
  • 并发容器ThreadLocal详解

    千次阅读 多人点赞 2019-10-11 19:12:30
    文章目录ThreadLocal的简介ThreadLocal的...在多线程编程中通常解决线程安全的问题我们会利用synchronzed或者lock控制线程临界区资源的同步顺序从而解决线程安全的问题,但是这种加锁的方式会让未获取到锁的线程...
  • 视觉场景理解论文阅读笔记:Bottom-Up and Top-Down Attention 一、文章相关资料 1.论文地址:点击打开链接 2.论文代码:点击打开链接 3.发表时间:2018 4. 解决的问题: Image Captioning 和 VQA(visual ...
  • 数据库索引的理解及适合建立索引的字段

    万次阅读 多人点赞 2018-03-06 13:17:43
    因本人小白,总结一下别人总结的,勿怪勿怪。转载 深入浅出数据库索引原理 , 哪些字段适合建立索引 ...如果开发的应用使用的数据库表中只有1万条数据,那么了解...9、删除无用的索引,避免执行计划造成负面影响;
  • 深入理解java虚拟机(全章节完整)

    万次阅读 多人点赞 2019-04-27 10:35:41
    的,所有过的内存度放一边,空闲的内存放另一边,中间放着一个指针作为分界点的指示器,所分配内存就仅仅是把哪个指针向空闲空间那边挪动一段与对象大小相等的举例,这种分配方案就叫指针碰撞 空闲列表 :有一个...
  • 深入理解Java-GC机制

    万次阅读 多人点赞 2018-04-13 15:28:14
    虚拟机可以满足上述3个条件的无用类进行回收,这里说的是可以回收而不是必然回收。  大多数情况下,对象在新生代Eden区中分配,当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC;同理,当老年代中没有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 105,737
精华内容 42,294
热门标签
关键字:

对无用之用的理解