我正在使用围绕FileReader的BufferedReader读取本地文件:
BufferedReader reader = new BufferedReader(new FileReader(fileName));
// read the file
// (error handling snipped)
reader.close();
Run Code Online (Sandbox Code Playgroud)
我需要close()的FileReader为好,或将包装处理这个问题?我见过人们这样做的代码:
FileReader fReader = new FileReader(fileName);
BufferedReader bReader = new BufferedReader(fReader);
// read the file
// (error handling snipped)
bReader.close();
fReader.close();
Run Code Online (Sandbox Code Playgroud)
从servlet调用此方法,我想确保不打开任何句柄.
在3排布局中:
问题是,当主要内容扩展时,它会删除页眉和页脚行:

HTML:
<section>
<header>
header: sized to content
<br>(but is it really?)
</header>
<div>
main content: fills remaining space<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
<!-- uncomment to see it break - ->
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
<!-- -->
</div>
<footer>
footer: fixed height in px
</footer>
</section>
Run Code Online (Sandbox Code Playgroud)
CSS:
section {
display: flex;
flex-flow: column;
align-items: stretch;
height: 300px;
}
header {
flex: 0 1 auto;
background: tomato;
}
div {
flex: 1 1 auto;
background: gold;
overflow: auto;
}
footer …Run Code Online (Sandbox Code Playgroud) 这困扰了我一段时间,我无法找到一个感觉正确的解决方案......
给定一个OO语言,其中对象属性的通常命名约定是camelCased,以及像这样的示例对象:
{
id: 667,
firstName: "Vladimir",
lastName: "Horowitz",
canPlayPiano: true
}
Run Code Online (Sandbox Code Playgroud)
我应该如何在PostgreSQL表中建模这个结构?
有三个主要选择:
他们每个人都有自己的缺点:
不带引号的标识符会自动折叠为小写.这意味着您可以使用canPlayPiano列创建表,但混合大小写永远不会到达数据库.当您检查表时,该列将始终显示为canplaypiano- 在psql中,pgadmin,解释结果,错误消息,所有内容.
带引号的标识符保留了它们的大小写,但是一旦你创建它们,你将始终必须引用它们.IOW,如果您创建一个包含"canPlayPiano"列的表,SELECT canPlayPiano ...则会失败.这会给所有SQL语句增加许多不必要的噪音.
带下划线的小写名称是明确的,但它们不能很好地映射到应用程序语言正在使用的名称.您必须记住为storage(can_play_piano)和code(canPlayPiano)使用不同的名称.它还可以防止某些类型的代码自动化,其中属性和数据库列需要命名相同.
所以我陷入了岩石和坚硬的地方(和一块大石头;有三种选择).无论我做什么,有些部分会感到尴尬.在过去的10年左右,我一直在使用选项3,但我一直希望有更好的解决方案.
我很感激您的任何建议.
PS:我确实意识到案例折叠和引号的需求来自于SQL标准,或者更确切地说是PostgreSQL对标准的改编.我知道它是如何工作的; 我对有关最佳实践的建议比对PG如何处理标识符的解释更感兴趣.
oop postgresql database-design camelcasing naming-conventions
我希望Java程序具有不同的默认设置(详细程度,可能是支持的彩色输出),具体取决于其用途.在C中,有一个isatty()函数,如果文件描述符连接到终端,则返回1,否则返回0.在Java中是否有相同的功能?我没有在JavaDoc中看到任何有关InputStream或PrintStream的内容.
这是一个真正的初学者问题(我还在学习Java基础知识).
我可以(有点)理解为什么方法会返回List <String>而不是ArrayList <String>,或者为什么它们会接受List参数而不是ArrayList.如果它对方法没有影响(即,如果不需要ArrayList中的特殊方法),这将使该方法更灵活,更容易用于调用者.其他集合类型也是如此,例如Set或Map.
我不明白的是:通常的做法是创建这样的局部变量:
List<String> list = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
虽然这种形式不太常见:
ArrayList<String> list = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
这有什么好处?
我只能看到一个小缺点:必须添加java.util.List的单独"import"行.从技术上讲,可以使用"import java.util.*",但我也不经常看到,可能是因为某些IDE自动添加了"import"行.
我有8个类似的PL/pgSQL函数; 它们被用作INSTEAD OF INSERT/UPDATE/DELETE视图的触发器以使它们可写.每个视图组合了一个通用表的列(在下面的示例中称为"事物")和一个特殊表(下面的"shaped_things"和"flavored_things").顺便说一句,PostgreSQL的继承功能在我们的案例中不能使用.
触发器必须在通用表中插入/更新行; 这些部分在所有8个功能中是相同的.由于泛型表有大约30列,我试图在那里使用辅助函数,但是我无法将视图的NEW记录传递给需要things记录作为输入的函数.
(这里和这里都提出了类似的问题,但我不认为我可以在我的案例中应用建议的解决方案.)
CREATE TABLE things (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL
-- (plus 30 more columns)
);
CREATE TABLE flavored_things (
thing_id INT PRIMARY KEY REFERENCES things (id) ON DELETE CASCADE,
flavor TEXT NOT NULL
);
CREATE TABLE shaped_things (
thing_id INT PRIMARY KEY REFERENCES things (id) ON DELETE CASCADE,
shape TEXT NOT NULL
);
-- etc...
Run Code Online (Sandbox Code Playgroud)
CREATE …Run Code Online (Sandbox Code Playgroud) PHP文档有这样的说法pg_free_result():
只有在脚本执行期间的内存消耗成为问题时才需要调用此函数.否则,脚本结束时将自动释放所有结果内存.
http://www.php.net/manual/en/function.pg-free-result.php
我(也许是天真的)已经预料到调用返回的资源pg_query()在超出范围时会被垃圾收集.
在这样的假设函数中:
function selectSomething ()
{
$res = pg_query("SELECT blah FROM sometable");
// do something with $res
pg_free_result($res); // required or not?
}
Run Code Online (Sandbox Code Playgroud)
是否真的有必要pg_free_result()在最后打电话?
换句话说,如果我将此函数调用1000次,它会占用内存来存储所有1000个结果吗?
编辑:我在谈论典型案例,即pg_connect()代替pg_pconnect().
我在 TypeScript、Vue 或 Node 生态系统方面都不是很有经验。
我有一个使用 Vue CLI 创建的工作设置,带有 Vue 3 和 TypeScript,与vue create生成项目和配置的方式几乎没有变化。如果我理解正确,Babel 将参考"browserslist"我的配置package.json并添加 polyfills/rewrite 代码以与旧浏览器一起使用。TypeScript 编译器也有--target和--lib选项,它们似乎做类似的事情。
我在 Vue 项目中编写的 TypeScript 代码是否经过了两次转换,首先由 TypeScript 编译器转译,然后由 Babel 转译?如果是这样,有没有办法避免这种冗余?
编辑添加:我刚刚使用上述设置创建了一个新的空白项目,并被问到我是否想要“将 Babel 与 TypeScript 一起使用(现代模式需要,自动检测的 polyfill,转译 JSX)”。我不在 Vue 中使用 JSX,但谁能拒绝“现代模式”,不管那是什么。
mbstring PHP模块有一个strict_detection设置,在此处记录.不幸的是,手册完全没用; 它只说这个选项"启用严格的编码检测".
我做了一些测试,无法找到任何mbstring函数如何受此影响.mb_check_encoding()并mb_detect_encoding()为有效和无效的UTF-8输入提供完全相同的结果.
(编辑:)该mbstring.strict_detection选项是在PHP 5.1.2中添加的.
在PHP 5.4.9中,以下示例触发致命错误"B具有来自traits的碰撞构造函数定义".
trait T {
public function __construct () {
echo __CLASS__ . ": constructor called.\n";
}
}
class A {
use T;
}
class B extends A {
use T;
}
Run Code Online (Sandbox Code Playgroud)
当trait包含与构造函数不同的方法时没有问题,并且当构造函数实际复制到类中时没有问题(不使用特征,"语言辅助复制和粘贴"功能).
这里的构造函数有什么特别之处?PHP不应该弄清楚其中一个会覆盖另一个吗?我在手册中找不到任何有关此限制的内容.
这个相关问题提到了解决问题的方法(通过使用特征方法的别名),但不是首先导致它的原因.
java ×3
php ×3
postgresql ×3
oop ×2
babeljs ×1
camelcasing ×1
console ×1
constructor ×1
css ×1
declaration ×1
filereader ×1
flexbox ×1
function ×1
interface ×1
io ×1
layout ×1
mbstring ×1
memory-leaks ×1
parameters ×1
plpgsql ×1
terminal ×1
traits ×1
triggers ×1
typescript ×1
variables ×1
vue-cli ×1
vue.js ×1