IT技术博客大学习 共学习 共进步
首页 / 叶德华
IT 2017-02-06 22:53:51 / 累计浏览 2,340

ubuntu系统root用户不能通过ssh远程登录问题

这篇讲的是Ubuntu系统中一个常见的SSH登录障碍:明明知道root密码,在虚拟机内能正常登录,但通过SSH远程连接时却总是报错“Password Authentication Failed”。问题根源往往藏在sshd的配置文件里——默认设置中`PermitRootLogin`被设为`without-password`,这意味着root用户只允许使用密钥认证登录,拒绝了所有密码验证请求。 解决方法直截了当:通过`vim /etc/ssh/sshd_config`编辑配置,将这一行改为`PermitRootLogin yes`,从而开放root用户的密码登录权限。修改完成后,只需重启sshd服务或重启系统,再次尝试远程连接就能顺利进入。 这篇内容虽然不长,但精准切中了一个实际运维中容易忽略的配置陷阱。对于刚接触Linux服务器管理的用户来说,理解认证方式与权限配置之间的对应关系,是排查连接故障的基础一步。

IT 2016-05-05 22:54:10 / 累计浏览 3,300

java enum枚举类型用法小结

这篇讲的是Java枚举(enum)的核心特性与实用技巧。文章从枚举的本质出发,指出它实际上是一种特殊的final类,继承自`java.lang.Enum`,所有枚举值都是`public static final`的常量。 作者通过示例代码,拆解了枚举的关键设计:其构造器必须私有,以确保外部无法实例化,这符合枚举作为常量集的初衷。接着,文章梳理了枚举类继承自Enum的常用方法,例如`ordinal()`用于获取声明顺序,`values()`能返回所有枚举值的数组,`valueOf()`则可根据字符串名称反向获取实例。 除了基础API,文章还着重展示了枚举的几种实战用法:用作类型安全的常量定义、在switch语句中提升代码可读性,以及如何向枚举中添加自定义字段和方法,使其承载更丰富的信息。这些内容覆盖了从入门到进阶的常见场景,能帮助开发者理解枚举不仅仅是一组常量,更是一个功能完备、封装良好的类型。

IT 2016-03-30 12:05:38 / 累计浏览 2,960

Java处理InterruptedException异常小结

这篇文章聚焦于Java开发中一个常见却容易被误用的异常处理场景:如何正确对待 `InterruptedException`。作者指出,许多开发者习惯性地“吞掉”这个异常,但这会损害程序响应中断、实现优雅取消的能力。 文章的核心在于阐明 `InterruptedException` 的特殊含义:当一个方法抛出此异常,它不仅是一个检查型异常,更是在声明自己是一个可被中断的阻塞方法。基于此,作者对比了几种关键的处理策略:其一是将异常直接向上抛出;其二是在进行必要的清理工作后重新抛出;其三,当在Runnable中无法抛出时,必须通过 `Thread.currentThread().interrupt()` 恢复中断状态。文中同时明确批判了仅仅记录日志或完全忽略的“生吞”做法。 通过代码示例,文章清晰地展示了正确与错误模式之间的分野,并解释了为何必须保留中断信号——因为中断是协作式的,且可能由线程池等机制多重消费。最终,作者建议通过轮询中断状态来实现灵活的、可取消的任务。整篇文章为处理这类并发问题提供了明确、实用的操作指南。

IT 2016-03-06 23:03:32 / 累计浏览 7,660

Java技术路线

这篇讲的是Java开发者从初阶到架构师的成长路线。 作者从一个常见痛点出发:很多开发者感觉需要提升,却不知道从哪里着手,也不清楚自己当前处于什么水平。为了解决这个问题,文章绘制了一张详细的Java技术路线图,并将进阶路径清晰地划分为五个阶段。 路线图从扎实的Java基础开始,涵盖了反射、多线程、IO等核心编程,再到JSP、Servlet这些Web开发基石。接着进入框架时代,梳理了经典的SSH(Struts+Spring+Hibernate)和SSI技术栈。随着经验增长,文章引导开发者走向高级领域,包括分布式开发、开源框架整合,直至最终的系统架构师角色,涉及SOA/云架构、设计模式与UML建模等宏观技能。 这份指南最大的特点是具体和结构化。它没有泛泛而谈,而是针对每个阶段都列出了必须掌握的关键技术点,比如从JDK命令、Linux部署,到事务管理、负载均衡,再到抽象工厂、观察者模式等。对于想系统规划技术栈、明确学习重点的开发者来说,这份指南提供了一个很清晰的参照框架。

IT 2016-03-01 14:15:37 / 累计浏览 21,840

Java开发岗位面试题归类汇总

这是一篇将Java岗位面试高频知识点进行系统归类的汇总文章。作者从Java基础、IO、Web、JVM、开源框架、多线程、网络通信、数据库、设计模式、算法、并发与性能调优等十二个维度,梳理了上百个经典面试问题。 文章并非单纯罗列题目,而是将问题嵌入具体的技术场景中。例如,在基础部分会追问HashMap底层原理与Hash冲突解决,在多线程部分则围绕线程池、锁机制和并发容器展开,而在性能调优章节,则抛出“每秒5千请求如何设计”这样的实战架构题,引导读者思考从单机到集群的解决方案。 它清晰地勾勒出一名合格Java工程师需要掌握的知识图谱,覆盖了从理论概念到框架原理,再到系统设计的完整链条。对于准备面试或希望系统查漏补缺的开发者来说,这份归类清晰的清单,提供了一个扎实的复习与自检框架。

IT 2016-02-20 14:19:36 / 累计浏览 2,240

JSON.parse()和JSON.stringify()方法总结

这篇讲的是JSON对象的两个核心方法:parse()与stringify()。作者从字符串与对象互相转换这一基本需求出发,清晰拆解了这对方法。 parse()负责“解析”,将符合JSON格式的字符串转换成可用的JavaScript对象,其translator参数允许自定义转换逻辑。而stringify()则执行反向的“序列化”,将对象转为字符串,并重点介绍了它强大的格式化能力:通过replacer参数可以选择性序列化指定属性,通过space参数则能控制输出字符串的缩进层级(数字指定空格数,字符串用作缩进符),大幅提升可读性。 文章通过对比示例与运行效果截图,直观展示了不同参数组合下的输出差异,比如如何只输出“name”字段,或如何用“###”作为缩进。最后,作者特别强调了一个实践原则:应避免使用eval()方法来解析JSON,指出了其潜在风险。 对于前端开发者而言,这篇文章将这两个高频使用的方法讲得细致透彻,不仅说明了“怎么用”,还阐释了“怎么用更好”,是扎实的技术参考。

IT 2016-02-16 20:58:35 / 累计浏览 2,200

使用vi命令出现Swap file "..." already exists!警告

这篇讲的是 Linux 用户用 `vi` 编辑文件时,可能遇到的一个经典小麻烦。 具体来说,当你尝试打开一个文件时,可能会收到 “Swap file '...' already exists!” 的警告,导致无法正常进入编辑界面。文章作者在强制关机后就碰到了这个问题。其根本原因在于,`vi` 在编辑文件时会在同目录下生成一个隐藏的交换文件(.swp),用于数据恢复。这个警告意味着该文件已经存在,可能是上次编辑未正常退出,或文件正被其他用户编辑所致。 文章提供的解决方案非常直接:进入文件所在目录,使用 `ls -a` 命令显示出所有隐藏文件,找到并删除那个对应的 `.swp` 文件(例如 `hello.ksh.swp`),然后就能重新正常打开原文件了。这个操作简单有效,清除了 `vi` 认为“正在被占用”的锁信号。 对于经常在终端工作的朋友来说,这是一个很实用的故障排查小技巧。文章演示了从遇到报错、分析原因到动手解决的完整思路。

IT 2016-02-16 20:57:37 / 累计浏览 2,340

SecureCRT怎么设置字符集编码及缓存

使用SecureCRT连接Linux终端时,中文字符乱码是个常见问题。这篇教程详细拆解了问题的根源和彻底解决的方法。 问题的根本原因在于字符编码不匹配。教程指出,只需将SecureCRT的默认编码设置为UTF-8,即可同时解决显示乱码和输入乱码两大问题。它提供了清晰的全局设置路径:从“Options”菜单进入“Global Options”,然后编辑默认会话设置,在“Appearance”选项卡中找到并勾选“Character encoding”为UTF-8。 除了编码,文章还顺带讲了一个实用技巧——如何调整回滚缓冲区大小。在同一个配置界面的“Emulation”部分,可以将“Scrollback buffer”从默认的500行调大,最大支持128000行,方便回溯更长的历史命令输出。 教程最后也提醒,上述修改会影响所有新建的连接。如果只想让某个特定会话生效,应该通过“Session Options”进行单独配置,这为用户提供了灵活的选择。

IT 2016-02-12 17:44:49 / 累计浏览 1,780

ExtJS怎么刷新Grid表格前面的行序列号

这篇讲的是ExtJS开发中一个常见的小痛点:Grid表格使用了RowNumberer列来显示行序号,但当删除中间某行后,序列号会断档(比如变成1、2、4),无法自动重排为1、2、3。 问题的根源在于数据视图在数据变更后没有及时刷新。文章给出的解决方案非常直接且高效:在删除操作的事件处理函数中,在调用`store.remove()`移除数据后,紧跟着调用`grid.getView().refresh()`。这一行代码会强制Grid的视图进行重绘,从而让RowNumberer列基于当前的Store数据重新计算并显示连续的序列号。 这种处理只刷新视图,不重新加载数据,操作轻量且针对性强,是解决此类UI刷新问题的标准做法。对于使用ExtJS进行表格开发的工程师来说,这个技巧能快速修复因数据增删导致的序号显示不全问题。

IT 2016-02-12 17:44:22 / 累计浏览 1,620

js代码因逗号不规范导致IE不兼容的问题

作者分享了一个在前端开发中容易遇到的兼容性陷阱:代码在Chrome、Firefox中运行正常,但在IE中却抛出“Expected identified, string or number”的错误。经过排查,根因是JavaScript对象字面量的最后一个属性后多写了一个逗号(trailing comma),这是老版本IE无法容忍的语法不规范。 文章展示了如何用Eclipse的正则搜索(`,\\s*}`)来定位这类问题,但也指出了该方法对注释中的代码无效的局限。因此,作者更推荐使用Spket这类IDE插件,它能在编码阶段实时检查并标记出代码中的不规范之处,帮助开发者从源头避免问题。此外,文章还提醒,像`console`对象这类在IE中不存在的API也是常见的兼容性问题源,需要一并清理。 总的来说,作者从实际项目报错出发,不仅给出了具体的排错和代码规范化工具,也强调了对运行时环境差异保持警惕的重要性。处理已知的兼容性“坑”很重要,而借助工具养成规范的编码习惯,是更根本的预防之道。

IT 2016-02-11 23:06:23 / 累计浏览 2,700

excel打开csv文件乱码的解决方法

这篇文章讲的是许多人在用Excel处理CSV文件时都会遇到的“乱码”坑。作者从一个实际问题出发:一个用程序导出的TXT文件,记事本打开一切正常,但把扩展名改成CSV后,用Excel打开不仅汉字乱码,连数据分列都识别不了。 问题的根源其实很直接——编码不匹配。在简体中文环境下,Excel打开CSV文件时默认使用的是ANSI编码,而很多现代程序导出的文件则是UTF-8编码。当Excel试图用“旧地图”去解读“新文字”,乱码和列错位就发生了。 解决办法简单有效:用记事本打开这个乱码的CSV文件,通过“另存为”功能,将编码从UTF-8明确选择为“ANSI”,保存后再次用Excel打开,问题就迎刃而解了。文章不仅给出了“三步走”的操作方案,还顺带科普了ANSI、Unicode和UTF-8这几种常见编码方式的核心区别与适用场景,帮助读者知其然也知其所以然。对编码原理感兴趣的读者还能读到更深入的讲解。

IT 2016-02-11 23:04:15 / 累计浏览 2,280

html中frameset、frame、iframe框架用法小结

这篇文章深入梳理了HTML中frameset、frame和iframe三个框架标签的用法与关键差异。作者通过多个代码示例,展示了如何用frameset的cols和rows属性划分浏览器窗口,构建多栏页面布局,同时特别提醒frameset不能与body标签共存这一常见误区。对于frame标签,它通常作为frameset的子元素加载不同页面,文章还强调了添加noframes标签来处理浏览器兼容性,确保不支持框架的用户能看到提示信息。 文章对比指出,iframe与frameset不同,它可以在普通HTML文档中直接嵌入外部页面,更加灵活独立。一个值得注意的细节是,在使用iframe设置height为100%时,必须确保其父容器也定义了高度,否则样式可能失效——这是实际开发中容易踩坑的地方。示例中演示了如何结合frame和iframe构建左侧导航栏和右侧内容区的结构,虽然这种框架技术在现代Web中使用较少,但对于维护遗留系统或特定内嵌场景仍有实用意义。

IT 2016-02-11 16:23:48 / 累计浏览 1,400

javascript定义对象的几种方法

这篇讲的是JavaScript中定义对象的几种经典方法。作者从最基础的对象扩充开始,逐步深入到工厂方式、构造函数、原型方式,最后介绍了试图融合两者优点的动态原型方式。 文章的核心价值在于对这些方式的细致对比。比如,它指出了“工厂方式”虽然方便,但每次创建对象都会生成新的函数实例,无法共享;而“构造函数方式”配合`new`关键字更规范,但方法不共享的问题依然存在。真正的突破点在于“原型方式”,它通过`prototype`让所有实例共享同一个方法,但作者也用代码清晰地演示了其中的陷阱:基本类型的属性变更不会同步,但引用类型(如数组)的变更却会在所有实例间反映出来。 最终,文章推荐了“动态原型方式”,它像一个精巧的折中方案:在构造函数内部通过一个标志变量,确保方法只添加一次到原型上,这样既保证了每个实例拥有独立的属性,又实现了方法的高效共享。这篇文章清晰地展示了每种方案的代码实现与适用场景,帮你理解为何需要从一种方式演进到另一种。

IT 2016-02-09 23:31:26 / 累计浏览 1,780

jQuery对象和DOM对象小结

这篇小结聚焦于jQuery开发中一个基础却易混淆的概念:jQuery对象和DOM对象的区别与转换。作者从实际编码中的常见错误切入,清晰阐述了两者的关系和使用场景。 DOM对象是通过原生JavaScript方法(如getElementById)获取的元素节点,可以直接使用innerHTML等标准DOM API。而jQuery对象则是通过$()函数包装DOM对象后产生的,拥有jQuery特有的方法链和便捷功能,例如用.html()获取内容。关键差异在于,两者的方法集完全不同,混用会导致运行时错误。 文章详细介绍了相互转换的技巧:jQuery对象转DOM对象可通过索引[0]或.get(0)方法;DOM对象转jQuery对象则只需用$()包裹。例如,var cr = document.getElementById('cr')得到的DOM对象,通过$(cr)就能变成jQuery对象。这些转换确保了开发者能灵活调用对应方法,避免代码失效。 通过实例对比,如$('#foo').html()与document.getElementById('foo').innerHTML,这篇总结以简洁方式强化了基础认知,帮助前端开发者写出更健壮的代码。

IT 2016-02-07 14:02:29 / 累计浏览 2,320

Linux lsof命令使用小结

这篇讲的是 Linux 系统中一个非常实用的诊断工具——lsof 命令。作者从“一切皆文件”的Linux设计哲学出发,点明了lsof能通过查看进程打开的文件列表,来实现对系统运行状态的监控与排错。 文章首先解释了lsof能查看到常规文件、网络连接(如TCP/UDP套接字)乃至硬件设备等各类“文件”,并拆解了其输出中COMMAND、PID、FD、TYPE、NAME等关键字段的含义,让读者能看懂命令返回的信息。 其核心价值在于提供了大量排查场景的实例命令。例如,可以用来查看哪个进程占用了特定文件(如/etc/passwd)、设备(如光驱)或端口(如80端口);也能反过来根据进程名(如sendmail)或用户(如tony)来查看其打开的所有文件资源。这些用法直击运维和开发中的常见痛点。 总的来说,文章从概念到输出解读,再到丰富的实战用例,系统性地小结了lsof的使用方法,为读者提供了一份即查即用的参考。

IT 2016-02-06 23:51:04 / 累计浏览 2,820

Java数据库连接池小结

这篇讲的是Java数据库中一个非常实际的问题:如何高效管理数据库连接。文章从连接池解决的根本问题——减少重复创建连接的开销——说起,把连接池比作一个预先建好的“缓冲池”。 作者详细介绍了三种主流开源连接池:Apache出品的dbcp,它是Tomcat的默认选择;异步操作的c3p0,支持自动回收空闲连接,与Spring、Hibernate集成良好;以及带有监控功能的proxool,便于排查连接泄漏。 文章的核心在于对这三者进行性能与稳定性的实测对比。测试发现,在相同高并发条件下,性能排序大致为 proxool ≈ c3p0 ≥ dbcp。但在稳定性方面,结果恰好相反:dbcp表现最稳定,c3p0和proxool则略逊一筹。 结论很明确:如果你的应用面临高并发挑战,c3p0和proxool是更好的选择;而如果你更看重长期运行的稳定性和可靠性,dbcp依然是稳妥之选。这为不同场景下的技术选型提供了清晰参考。

IT 2016-02-06 13:59:53 / 累计浏览 2,280

CentOS关机与重启命令小结

这篇讲的是 CentOS 系统中那些容易混淆的关机与重启命令。作者系统地梳理了 `shutdown`、`halt`、`reboot` 等核心命令的用法和区别,重点在于帮助管理员根据实际场景选择最安全、最合适的操作方式。 文章指出,`shutdown` 是最安全、最灵活的选择。它不仅能立刻或定时重启(`-r`)与关机(`-h`),还会在执行前通知所有登录用户,并冻结新的登录请求,从而避免强制断电可能导致的数据丢失或硬件损坏。更重要的是,计划中的关机重启可以通过 `shutdown -c` 随时取消。 相比之下,`halt` 命令默认就是关机(相当于 `shutdown -h`),而 `reboot` 则用于重启。它们功能相对单一,但执行直接。文章还提到了通过 `init` 运行级别来控制系统的高级方法,比如 `init 0` 关机,`init 6` 重启。 对于系统管理员而言,理解这些命令的细微差别至关重要。需要安全关机时,优先使用 `shutdown`;需要快速重启或关机时,`reboot` 和 `halt` 更为直接。掌握这些基础但关键的命令,是进行稳定、安全的系统维护的第一步。

IT 2015-11-08 22:19:49 / 累计浏览 1,560

CSS中的margin外边距折叠现象

这篇讲的是CSS中一个常见但容易让人困惑的布局现象——margin外边距折叠。文章从概念入手,清晰地定义了发生折叠的两个核心条件:相邻的margin之间没有被内容、padding、border或clear等属性分隔,且它们都处于普通文档流中。 文章的重点放在了折叠的具体计算规则上,通过三个直观的示例代码和示意图,分别讲解了参与折叠的margin全部为正值、全部为负值,以及正负值混合时的处理方法。例如,当两个正margin(50px和100px)相遇时,最终间距取较大的100px;而当正负margin(-50px和100px)相遇时,则会先取绝对值最大的负margin,再与最大的正margin相加,得到50px的结果。 这些规则解释清楚了为什么在垂直方向上,两个块级元素的间距有时会“不听使唤”。对于前端开发者,尤其是刚接触CSS布局的开发者来说,理解这一机制是避免样式计算“踩坑”、精准控制页面元素间距的基础。

IT 2015-11-08 21:50:23 / 累计浏览 1,760

用CSS绘制各种角度的三角形

这篇讲的是如何用CSS中看似用于边框的`border`属性,来“画”出各种方向的三角形。作者从一个有趣的技巧出发:将一个元素的`width`和`height`都设为0,使其内容区域消失,四个边框的交汇点就会合并成一个点。通过有策略地设置这个点的四周——将某些边框设为透明,另一些设为实色——就能精确地控制可见三角形的朝向和形状。 文章系统展示了正方形、上、下、左、右以及左上、右上等七个不同角度的三角形,并为每一种都提供了完整的HTML/CSS代码示例。这种教学方式非常直观,读者不仅能直接复制使用,更能理解其背后“调整中心点”的核心思路。它把一个基础的CSS特性,变成了绘制简单图形的实用小技巧。

IT 2015-11-02 22:42:32 / 累计浏览 2,800

Oracle正则表达式使用小结

这篇文章梳理了Oracle数据库从10g开始支持的正则表达式功能。作者将匹配逻辑集中在数据库端,可以避免在中间层处理,从而简化开发。文章概要总结了Oracle中使用正则表达式的核心方法。 内容重点介绍了五个关键的正则表达式函数:REGEXP_LIKE 用于条件过滤,REGEXP_COUNT 能统计模式出现次数,REGEXP_INSTR 可定位首次匹配位置,REGEXP_REPLACE 支持模式替换,REGEXP_SUBSTR 则能提取满足模式的字符串。每个函数都配有清晰的SQL示例。 除了函数用法,文章还梳理了控制匹配行为的选项,比如忽略大小写的“i”、多行模式“m”等,并通过示例解释了不同选项带来的具体差异。此外,文中也列举了如“.”“+”“*”等常见元字符及其含义,为实际编写匹配模式提供了参考。