autojump

autojump https://linux.cn/article-3401-1.html 在命令行中切换目录是最常用的操作,不过很少有比一遍又一遍重复"cd ls cd ls cd ls ……“更令人沮丧的事情了。如果你不是百分百确定你想要进入的下一个目录的名字,那么你不得不使用ls来确认,然后使用cd来进入你想要进的那一个。所幸的是,现在大量的终端和shell语言提供了强大的自动补全功能来处理该问题。但是,你仍然需要一直疯狂地敲击TAB键来干这事。如果你和我一样懒惰,你一定会对autojump感到惊喜。 autojump 是一个命令行工具,它允许你可以直接跳转到你喜爱的目录,而不用管你现在身在何处。 oh-my-zsh 自带的插件_z_,和 autojump 实现的功能是一样的,但是不用额外安装,直接在plugins=()里启用就可以了。

2017-02-22 · 1 min · 15 words · -

idea maven mvn archetype,generate 速度缓慢问题

idea maven mvn archetype,generate 速度缓慢问题 https://my.oschina.net/u/225373/blog/468035 maven生成项目速度慢的令人发指,都在Generating project in Batch mode等待,Idea状态显示栏还在不行runing,并没有卡死。查看debug信息发现,是maven获取archetype-catalog.xml导致。 (用浏览器打开http://repo1.maven.org/maven2/archetype-catalog.xml,需要等待很长时间才能获取到。) 解决方法: 加上-DarchetypeCatalog=internal 运行参数,archetype-catalog.xml本地获取。 对于intellij idea可以再Runner加上参数。 curl http://repo1.maven.org/maven2/archetype-catalog.xml> .m2/archetype-catalog.xml -DarchetypeCatalog=local

2017-02-22 · 1 min · 21 words · -

agile backlog

agile backlog 积压列表的优先级选择必须权衡以下方面: 客户价值 (解决正确的问题) 业务价值 (产生的收益) 技术价值 (可以促进学习,减少风险,有牢靠的解决方案和智能工作流) 质量价值 (缓解风险) http://www.infoq.com/cn/articles/product-owner-raison?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global

2017-02-21 · 1 min · 12 words · -

homelab

homelab 新二级域名 在阿里云控制台添加新域名 等域名生效 drill jenkins.wiloon.com 在 wiloon.com 更新证书加入新域名, ssh aliyun podman stop nginx certbot ssh root@nginx sh /data/cert/cert.sh ssh router vi /etc/hosts /etc/init.d/dnsmasq restart DNS 192.168.50.1 Nginx 192.168.50.130 更新 nginx 在内网有梯子的机器 podman pull nginx:1.27.2 podman save 7f553e8bbc897571642d836b31eaf6ecbe395d7641c2b24291356ed28f3f2bd0>nginx.tar tar zcvf nginx.tar.gz nginx.tar scp nginx.tar.gz aliyun:~

2017-02-20 · 1 min · 45 words · -

cad 旋转

cad 旋转 旋转命令快捷键: 【RO】 旋转命令使用方法: 可通过输入【RO】回车,也可直接用鼠标点击旋转命令按钮激活旋转命令 选择需要旋转的对象 空格或回车或右击,确定选择对象 确定旋转基点 确定旋转角度 http://www.mfcad.com/cad/874/14136.html

2017-02-18 · 1 min · 11 words · -

archlinux 连接 蓝牙键盘

archlinux 连接 蓝牙键盘 filco 配对 ctrl+alt+fn 忘记已配对设备 connect 长按3秒 #mac of bluetooth keyboard # 00:18:00:3C:A4:C5 bluetoothctl # show help info help # show keyboard info, paired, trusted, connected info 00:18:00:3C:A4:C5 power on devices agent on pair 00:18:00:3C:A4:C5 trust 00:18:00:3C:A4:C5 connect 00:18:00:3C:A4:C5 systemctl start bluetooth https://wiki.archlinux.org/index.php/Bluetooth_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#.E5.AE.89.E8.A3.85 https://bbs.archlinux.org/viewtopic.php?id=217451

2017-02-17 · 1 min · 46 words · -

golang 类/type

golang 类/type //类定义 type Mutex struct { state int32 sema uint32 } //扩展已定义类型 type Num int32 func (num Num) IsBigger(otherNum Num) bool { return num > otherNum } //类方法 type Once struct { m Mutex done uint32 } func (o *Once) Do(f func()) { if atomic.LoadUint32(&o.done) == 1 { return } // Slow-path. o.m.Lock() defer o.m.Unlock() if o.done == 0 { defer atomic.StoreUint32(&o.done, 1) f() } } 类声明 ...

2017-02-17 · 1 min · 132 words · -

FreeType

FreeType FreeType是一个免费且开源的,可移植的字体引擎,有许多程序包括游戏使用它作为字体渲染的库 FreeType is a freely available software library to render fonts.

2017-02-15 · 1 min · 12 words · -

探活

探活 https://www.51cto.com/article/699046.html

2017-02-10 · 1 min · 2 words · -

进程调度

进程调度 Linux 进程调度 操作系统要实现多进程,进程调度必不可少。进程调度是对TASK_RUNNING状态的进程进行调度 (参见《linux进程状态浅析》) 。如果进程不可执行 (正在睡眠或其他) ,那么它跟进程调度没多大关系。 所以,如果你的系统负载非常低,盼星星盼月亮才出现一个可执行状态的进程。那么进程调度也就不会太重要。哪个进程可执行,就让它执行去,没有什么需要多考虑的。 反之,如果系统负载非常高,时时刻刻都有N多个进程处于可执行状态,等待被调度运行。那么进程调度程序为了协调这N个进程的执行,必定得做很多工作。协调得不好,系统的性能就会大打折扣。这个时候,进程调度就是非常重要的。 尽管我们平常接触的很多计算机 (如桌面系统、网络服务器、等) 负载都比较低,但是linux作为一个通用操作系统,不能假设系统负载低,必须为应付高负载下的进程调度做精心的设计。 当然,这些设计对于低负载 (且没有什么实时性要求) 的环境,没多大用。极端情况下,如果CPU的负载始终保持0或1 (永远都只有一个进程或没有进程需要在CPU上运行) ,那么这些设计基本上都是徒劳的。 优先级 现在的操作系统为了协调多个进程的"同时"运行,最基本的手段就是给进程定义优先级。定义了进程的优先级,如果有多个进程同时处于可执行状态,那么谁优先级高谁就去执行,没有什么好纠结的了。 那么,进程的优先级该如何确定呢?有两种方式: 由用户程序指定、由内核的调度程序动态调整。 (下面会说到) linux内核将进程分成两个级别: 普通进程和实时进程。实时进程的优先级都高于普通进程,除此之外,它们的调度策略也有所不同。 实时进程的调度 实时,原本的涵义是"给定的操作一定要在确定的时间内完成"。重点并不在于操作一定要处理得多快,而是时间要可控 (在最坏情况下也不能突破给定的时间) 。 这样的"实时"称为"硬实时",多用于很精密的系统之中 (比如什么火箭、导弹之类的) 。一般来说,硬实时的系统是相对比较专用的。 像linux这样的通用操作系统显然没法满足这样的要求,中断处理、虚拟内存、等机制的存在给处理时间带来了很大的不确定性。硬件的cache、磁盘寻道、总线争用、也会带来不确定性。 比如考虑"i++;“这么一句C代码。绝大多数情况下,它执行得很快。但是极端情况下还是有这样的可能: i的内存空间未分配,CPU触发缺页异常。而linux在缺页异常的处理代码中试图分配内存时,又可能由于系统内存紧缺而分配失败,导致进程进入睡眠; 代码执行过程中硬件产生中断,linux进入中断处理程序而搁置当前进程。而中断处理程序的处理过程中又可能发生新的硬件中断,中断永远嵌套不止……;等等…… 而像linux这样号称实现了"实时"的通用操作系统,其实只是实现了"软实时”,即尽可能地满足进程的实时需求。 如果一个进程有实时需求 (它是一个实时进程) ,则只要它是可执行状态的,内核就一直让它执行,以尽可能地满足它对CPU的需要,直到它完成所需要做的事情,然后睡眠或退出 (变为非可执行状态) 。 而如果有多个实时进程都处于可执行状态,则内核会先满足优先级最高的实时进程对CPU的需要,直到它变为非可执行状态。于是,只要高优先级的实时进程一直处于可执行状态,低优先级的实时进程就一直不能得到CPU;只要一直有实时进程处于可执行状态,普通进程就一直不能得到CPU。 (后来,内核添加了/proc/sys/kernel/sched_rt_runtime_us和/proc/sys/kernel/sched_rt_period_us两个参数,限定了在以sched_rt_period_us为周期的时间内,实时进程最多只能运行sched_rt_runtime_us这么多时间。这样就在一直有实时进程处于可执行状态的情况下,给普通进程留了一点点能够得到执行的机会。参阅《linux组调度浅析》。) 那么,如果多个相同优先级的实时进程都处于可执行状态呢?这时就有两种调度策略可供选择: SCHED_FIFO: 先进先出。直到先被执行的进程变为非可执行状态,后来的进程才被调度执行。在这种策略下,先来的进程可以行sched_yield系统调用,自愿放弃CPU,以让权给后来的进程; SCHED_RR: 轮转调度。内核为实时进程分配时间片,在时间片用完时,让下一个进程使用CPU; 强调一下,这两种调度策略仅仅针对于相同优先级的多个实时进程同时处于可执行状态的情况。 在linux下,用户程序可以通过sched_setscheduler系统调用来设置进程的调度策略以及相关调度参数;sched_setparam系统调用则只用于设置调度参数。这两个系统调用要求用户进程具有设置进程优先级的能力 (CAP_SYS_NICE,一般来说需要root权限) (参阅capability相关的文章) 。 通过将进程的策略设为SCHED_FIFO或SCHED_RR,使得进程变为实时进程。而进程的优先级则是通过以上两个系统调用在设置调度参数时指定的。 对于实时进程,内核不会试图调整其优先级。因为进程实时与否?有多实时?这些问题都是跟用户程序的应用场景相关,只有用户能够回答,内核不能臆断。 综上所述,实时进程的调度是非常简单的。进程的优先级和调度策略都由用户定死了,内核只需要总是选择优先级最高的实时进程来调度执行即可。唯一稍微麻烦一点的只是在选择具有相同优先级的实时进程时,要考虑两种调度策略。 普通进程的调度 实时进程调度的中心思想是,让处于可执行状态的最高优先级的实时进程尽可能地占有CPU,因为它有实时需求;而普通进程则被认为是没有实时需求的进程,于是调度程序力图让各个处于可执行状态的普通进程和平共处地分享CPU,从而让用户觉得这些进程是同时运行的。 与实时进程相比,普通进程的调度要复杂得多。内核需要考虑两件麻烦事: 一、动态调整进程的优先级 按进程的行为特征,可以将进程分为"交互式进程"和"批处理进程": 交互式进程 (如桌面程序、服务器、等) 主要的任务是与外界交互。这样的进程应该具有较高的优先级,它们总是睡眠等待外界的输入。而在输入到来,内核将其唤醒时,它们又应该很快被调度执行,以做出响应。比如一个桌面程序,如果鼠标点击后半秒种还没反应,用户就会感觉系统"卡"了; 批处理进程 (如编译程序) 主要的任务是做持续的运算,因而它们会持续处于可执行状态。这样的进程一般不需要高优先级,比如编译程序多运行了几秒种,用户多半不会太在意; 如果用户能够明确知道进程应该有怎样的优先级,可以通过nice、setpriority (非实时进程优先级的设置) 系统调用来对优先级进行设置。 (如果要提高进程的优先级,要求用户进程具有CAP_SYS_NICE能力。 然而应用程序未必就像桌面程序、编译程序这样典型。程序的行为可能五花八门,可能一会儿像交互式进程,一会儿又像批处理进程。以致于用户难以给它设置一个合适的优先级。再者,即使用户明确知道一个进程是交互式还是批处理,也多半碍于权限或因为偷懒而不去设置进程的优先级。 (你又是否为某个程序设置过优先级呢?) ...

2017-02-10 · 2 min · 385 words · -

maven dependency version range

maven dependency version range http://maven.apache.org/components/enforcer/enforcer-rules/versionRanges.html Version Range Specification The [RequireMavenVersion][1] and [RequireJavaVersion][2] rules use the [standard Maven version range syntax][3]{.externalLink} with one minor change for ease of use (denoted with *): Range Meaning 1.0 x >= 1.0 * The default Maven meaning for 1.0 is everything (,) but with 1.0 recommended. Obviously this doesn't work for enforcing versions here, so it has been redefined as a minimum version. (,1.0] x <= 1.0 (,1.0) x < 1.0 [1.0] x == 1.0 [1.0,) x >= 1.0 (1.0,) x > 1.0 (1.0,2.0) 1.0 < x < 2.0 [1.0,2.0] 1.0 <= x <= 2.0 (,1.0],[1.2,) x <= 1.0 or x >= 1.2. Multiple sets are comma-separated (,1.1),(1.1,) x != 1.1 http://maven.apache.org/components/enforcer/enforcer-rules/requireMavenVersion.html http://maven.apache.org/components/enforcer/enforcer-rules/requireJavaVersion.html http://docs.codehaus.org/display/MAVEN/Dependency+Mediation+and+Conflict+Resolution#DependencyMediationandConflictResolution-DependencyVersionRanges

2017-02-08 · 1 min · 119 words · -

java jmx

java jmx 在 Java 程序的运行过程中,对 JVM 和系统的监测一直是 Java 开发人员在开发过程所需要的。一直以来,Java 开发人员必须通过一些底层的 JVM API,比如 JVMPI 和 JVMTI 等,才能监测 Java 程序运行过程中的 JVM 和系统的一系列情况,这种方式一直以来被人所诟病,因为这需要大量的 C 程序和 JNI 调用,开发效率十分低下。于是出现了各种不同的专门做资源管理的程序包。为了解决这个问题,Sun 公司也在其 Java SE 5 版本中,正式提出了 Java 管理扩展 (Java Management Extensions,JMX) 用来管理检测 Java 程序 (同时 JMX 也在 J2EE 1.4 中被发布) 。 JMX 的提出,让 JDK 中开发自检测程序成为可能,也提供了大量轻量级的检测 JVM 和运行中对象 / 线程的方式,从而提高了 Java 语言自己的管理监测能力。 开启JMX,用 JVisvualVM, jmc 或 jconsole 连接JVM oracle jdk 自带JVisvualVM, jmc, openjdk 只有jconsole 通过jcmd开启 - 不需要重启JVM: # jmxremote.rmi.port: 监听jmx客户端的端口 # jmxremote.rmi.port: jmx数据传输端口,如果此项未配置,jmx会随机开一个新端口跟客户端传输数据. jcmd <PID> ManagementAgent.start \ jmxremote.port=1099 \ jmxremote.rmi.port=1099 \ jmxremote.ssl=false \ jmxremote.authenticate=false 关闭jmx jcmd <PID> ManagementAgent.stop 通过JVM启动参数开启,需要重启JVM. # JVM command line option: -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.rmi.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.1.54 注: ...

2017-02-07 · 1 min · 127 words · -

nice, cpulimit, cgroups 限制 cpu 占用率

nice, cpulimit, cgroups 限制 cpu 占用率 3 种控制进程运行时间的方法: 使用 nice 命令手动降低任务的优先级。 使用 cpulimit 命令不断的暂停进程,以控制进程所占用处理能力不超过特定限制。 使用linux内建的control groups (控制组) 功能,它提供了限制进程资源消耗的机制。 模拟高cpu占用率 https://caffinc.github.io/2016/03/cpu-load-generator/ nice命令 nice -n 10 bash # 不带后缀,查看当前nice值 nice 下面介绍一下nice命令的使用方法,nice命令可以修改进程的优先级,这样就可以让进程运行得不那么频繁。 这个功能在运行cpu密集型的后台进程或批处理作业时尤为有用。 nice值的取值范围是[-20,19],-20表示最高优先级,而19表示最低优先级。 Linux进程的默认nice值为0。使用nice命令 (不带任何参数时) 可以将进程的nice值设置为10。这样调度器就会将此进程视为较低优先级的进程,从而减少cpu资源的分配。 下面来看一个例子,我们同时运行两个 matho-primes 进程,一个使用nice命令来启动运行,而另一个正常启动运行: nice matho-primes 0 9999999999 > /dev/null & matho-primes 0 9999999999 > /dev/null & 再运行top命令。 看到没,正常运行的进程 (nice值为0) 获得了更多的cpu运行时间,相反的,用nice命令运行的进程占用的cpu时间会较少 (nice值为10) 。 在实际使用中,如果你要运行一个CPU密集型的程序,那么最好用nice命令来启动它,这样就可以保证其他进程获得更高的优先级。 也就是说,即使你的服务器或者台式机在重载的情况下,也可以快速响应。 renice renice -n 1 -p 14459 nice 还有一个关联命令叫做 renice,它可以在运行时调整进程的 nice 值。使用 renice 命令时,要先找出进程的 PID。下面是一个例子: ...

2017-02-07 · 3 min · 505 words · -

Retained Heap

Retained Heap http://supercharles888.blog.51cto.com/609344/1347144 为了开始研究,我们希望在memory 溢出时候能自动生成heap dump文件,为此,我们在运行时候添加JVM 参数: -XX:+HeapDumpOnOutOfMemoryError 然后,我们来做一系列实验来逐步研究各个有趣的问题。 实验1: 我们先来研究最简单的memory leak例子。我们先构造一个POJO类Person,这个Person类就是一般的java 类,然后我们构造一个ArrayList,然后在一个无限循环中一直放这个Person类的实例,因为Person类和ArrayList都在堆上,而ArrayList因为是强引用,所以无法被GC回收, (因为我们List一直在用并没有摧毁) 所以一旦ArrayList所占用的堆内存填满整个heap size时候,heap就溢出了。 POJO类代码是: package com.charles.research; /** 这是一个Person类,我用它来撑满heap @author charles.wang */ public class Person { private String name; private String sex; private int age; public Person( String name,String sex,int age){ this.name=name; this.sex=sex; this.age=age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; ...

2017-02-07 · 2 min · 386 words · -

NMT, Native Memory Tracking

NMT, Native Memory Tracking NMT for Hotspot VM is turned off by default. Turn this feature on using JVM command line option -XX:NativeMemoryTracking=[off | summary | detail] 注意,根据Java官方文档,开启NMT会有5%-10%的性能损耗; 访问NMT数据 JDK提供了jcmd命令来访问NMT数据: jcmd VM.native_memory [summary | detail | baseline | summary.diff | detail.diff | shutdown] [scale= KB | MB | GB] 配置项 说明 summary 只打印打印按分类汇总的内存 detail 打印按分类汇总的内存用法、virtual memory map和每次内存分配调用 baseline 创建内存快照,以比较不同时间的内存差异 summary.diff 打印自上次baseline到现在的内存差异,显示汇总信息 detail.diff 打印自上次baseline到现在的内存差异, 显示详细信息 shutdown 关闭NMT功能,NMT can be shutdown using jcmd utility, but can not start/restart using jcmd ...

2017-02-06 · 1 min · 90 words · -

java finalize

java finalize http://blog.csdn.net/walkerjong/article/details/6950091 Java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize()。 (1).对象不一定会被回收。 (2).垃圾回收不是析构函数。 (3).垃圾回收只与内存有关。 (4).垃圾回收和finalize()都是靠不住的,只要JVM还没有快到耗尽内存的地步,它是不会浪费时间进行垃圾回收的。 有时当撤消一个对象时,需要完成一些操作。例如,如果一个对象正在处理的是非Java 资源,如文件句柄或window 字符字体,这时你要确认在一个对象被撤消以前要保证这些资源被释放。为处理这样的状况,Java 提供了被称为收尾 (finalization ) 的机制。使用该机制你可以定义一些特殊的操作,这些操作在一个对象将要被垃圾回收程序释放时执行。 要给一个类增加收尾 (finalizer ) ,你只要定义finalize ( ) 方法即可。Java 回收该类的一个对象时,就会调用这个方法。在finalize ( )方法中,你要指定在一个对象被撤消前必须执行的操作。垃圾回收周期性地运行,检查对象不再被运行状态引用或间接地通过其他对象引用。就在对象被释放之前,Java 运行系统调用该对象的finalize( ) 方法。 finalize()方法的通用格式如下: protected void finalize( ) { // finalization code here } 其中,关键字protected是防止在该类之外定义的代码访问finalize()标识符。该标识符和其他标识符将在第7章中解释。 理解finalize( ) 正好在垃圾回收以前被调用非常重要。例如当一个对象超出了它的作用域时,finalize( ) 并不被调用。这意味着你不可能知道何时——甚至是否——finalize( ) 被调用。因此,你的程序应该提供其他的方法来释放由对象使用的系统资源,而不能依靠finalize( ) 来完成程序的正常操作。 注意: 如果你熟悉C ,那你知道C 允许你为一个类定义一个撤消函数 (destructor ) ,它在对象正好出作用域之前被调用。Java不支持这个想法也不提供撤消函数。finalize() 方法只和撤消函数的功能接近。当你对Java 有丰富经验时,你将看到因为Java使用垃圾回收子系统,几乎没有必要使用撤消函数。 理解finalize()-析构函数的替代者 by Tim Gooch 在许多方面,Java 类似于 C++。Java 的语法非常类似于 C++,Java 有类、方法和数据成员;Java 的类有构造函数; Java 有异常处理。 但是,如果你使用过 C++ 会发现 Java 也丢掉一些可能是你熟悉的特性。这些特性之一就是析构函数。取代使用析构函数,Java 支持finalize() 方法。 ...

2017-02-06 · 3 min · 441 words · -

jdk tool, java tool, jvm tool

jdk tool, java tool, jvm tool jcmd Java 命令行(Java Command),用于向正在运行的JVM发送诊断命令请求。 jmc Java任务控制工具(Java Mission Control),主要用于HotSpot JVM的生产时间监测、分析、诊断。 https://blog.wiloon.com/?p=9724 java Java解释器/运行工具,用于运行.class 字节码文件或.jar文件。 javac Java编译工具(Java Compiler),用于编译Java源代码文件。将Java源代码转换成字节码。 jconsole 图形化用户界面的监测工具,主要用于监测并显示运行于Java平台上的应用程序的性能和资源占用等信息。 jhat Java堆分析工具(Java Heap Analysis Tool),用于分析Java堆内存中的对象信息。 jmap Java内存映射工具(Java Memory Map),主要用于打印指定Java进程、核心文件或远程调试服务器的共享对象内存映射或堆内存细节。 jstack Java堆栈跟踪工具,主要用于打印指定Java进程、核心文件或远程调试服务器的Java线程的堆栈跟踪信息。 wiloon.com/jstack jstat JVM统计监测工具(JVM Statistics Monitoring Tool),主要用于监测并显示JVM的性能统计信息。 https://blog.wiloon.com/?p=411 jstatd jstatd(VM jstatd Daemon)工具是一个RMI服务器应用,用于监测HotSpot JVM的创建和终止, 并提供一个接口,允许远程监测工具附加到运行于本地主机的JVM上。 jvisualvm JVM监测、故障排除、分析工具,主要以图形化界面的方式提供运行于指定虚拟机的Java应用程序的详细信息。 appletviewer 小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。 (chrome, firefox 不再支持NPAPI) extcheck 扩展检测工具,主要用于检测指定jar文件与当前已安装的Java SDK扩展之间是否存在版本冲突。 idlj IDL转Java编译器(IDL-to-Java Compiler),用于为指定的IDL文件生成Java绑定。 IDL意即接口定义语言(Interface Definition Language)。 jar jar文件管理工具,主要用于打包压缩、解压jar文件。 jarsigner jar密匙签名工具。 javadoc Java文档工具, 主要用于根据Java 源代码中的注释信息生成HTML格式的API帮助文档。 ...

2017-02-06 · 2 min · 256 words · -

java io PrintStream

java io PrintStream http://www.cnblogs.com/skywang12345/p/io_16.html 本章介绍PrintStream以及 它与DataOutputStream的区别。我们先对PrintStream有个大致认识,然后再深入学习它的源码,最后通过示例加深对它的了解。 转载请注明出处: http://www.cnblogs.com/skywang12345/p/io_16.html PrintStream 介绍 PrintStream 是打印输出流,它继承于FilterOutputStream。 PrintStream 是用来装饰其它输出流。它能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。 与其他输出流不同,PrintStream 永远不会抛出 IOException;它产生的IOException会被自身的函数所捕获并设置错误标记, 用户可以通过 checkError() 返回错误标记,从而查看PrintStream内部是否产生了IOException。 另外,PrintStream 提供了自动flush 和 字符集设置功能。所谓自动flush,就是往PrintStream写入的数据会立刻调用flush()函数。 PrintStream 函数列表 /* 构造函数 */ // 将"输出流out"作为PrintStream的输出流,不会自动flush,并且采用默认字符集 // 所谓"自动flush",就是每次执行print(), println(), write()函数,都会调用flush()函数; // 而"不自动flush",则需要我们手动调用flush()接口。 PrintStream(OutputStream out) // 将"输出流out"作为PrintStream的输出流,自动flush,并且采用默认字符集。 PrintStream(OutputStream out, boolean autoFlush) // 将"输出流out"作为PrintStream的输出流,自动flush,采用charsetName字符集。 PrintStream(OutputStream out, boolean autoFlush, String charsetName) // 创建file对应的FileOutputStream,然后将该FileOutputStream作为PrintStream的输出流,不自动flush,采用默认字符集。 PrintStream(File file) // 创建file对应的FileOutputStream,然后将该FileOutputStream作为PrintStream的输出流,不自动flush,采用charsetName字符集。 PrintStream(File file, String charsetName) // 创建fileName对应的FileOutputStream,然后将该FileOutputStream作为PrintStream的输出流,不自动flush,采用默认字符集。 PrintStream(String fileName) // 创建fileName对应的FileOutputStream,然后将该FileOutputStream作为PrintStream的输出流,不自动flush,采用charsetName字符集。 PrintStream(String fileName, String charsetName) ...

2017-02-04 · 4 min · 683 words · -

linux 设置 默认 声卡

linux 设置 默认 声卡 alsa设置默认声卡 2013-11-06 15:43 4650人阅读 评论(0) 收藏 举报 分类: gentoo (47) 版权声明: 本文为博主原创文章,未经博主允许不得转载。 首先说一下alsa的配置文件。alsa的配置文件是alsa.conf位于/usr/share/alsa目录下,通常还有/usr/share/alsa/card和/usr/share/alsa/pcm两个子目录用来设置card相关的参数,别名以及一些PCM默认设置。以上配置文件,我等凡夫从不用修改,修改它们是大神的工作。 还有两个配置文件/etc/asound.conf和~/.asoundrc,它俩有效是因为它俩被alsa.conf引用。以下是alsa.conf的原文: pre-load the configuration files @hooks [ { func load files [ { @func concat strings [ { @func datadir } “/alsa.conf.d/” ] } “/etc/asound.conf” “~/.asoundrc” ] errors false } ] 然后说我遇到的问题。为了提高本人的台式机的性能,在没有换主板的情况下升级了CPU和显卡。CPU没有造成什么影响,显卡是淘来的微星R6750暴雪1G,芯片为AMD Radeon HD 6750。由于它提供了一个HDMI接口,该接口还支持音频输出,于是麻烦出现了,在gentoo下,声音不走板载的HDA VIA VT82xx集成声卡,不知道走到哪里出去了,反正我的耳机没有声音。 找了好多文档,终于然我弄明白怎么回事了。 首先,如果机器有多于一个声卡,可以用下面的命令显示出来: $ cat /proc/asound/cards 0 [Generic ]: HDA-Intel - HD-Audio Generic HD-Audio Generic at 0xfe9bc000 irq 25 1 [VT82xx ]: HDA-Intel - HDA VIA VT82xx HDA VIA VT82xx at 0xfeafc000 irq 17 ...

2017-01-24 · 1 min · 202 words · -

java 运算符 优先级

java 运算符 优先级 http://blog.csdn.net/xiaoli_feng/article/details/4567184 在实际的开发中,可能在一个运算符中出现多个运算符,那么计算时,就按照优先级级别的高低进行计算,级别高的运算符先运算,级别低的运算符后计算,具体运算符的优先级见下表: 优先级 运算符 结合性 1 () [] . 从左到右 2 ! +(正) -(负) ~ ++ – 从右向左 3 * / % 从左向右 4 +(加) -(减) 从左向右 5 << >> »> 从左向右 6 < <= > >= instanceof 从左向右 7 == != 从左向右 8 &(按位与) 从左向右 9 ^ 从左向右 10 | 从左向右 11 && 从左向右 12 | 从左向右 13 ?: 从右向左 14 = += -= *= /= %= &= |= ^= ~= <<= >>= »>= 从右向左 说明: ...

2017-01-17 · 1 min · 111 words · -