驼峰命名,id排版什么格式?
驼峰命名,id排版什么格式?
在编程中,id排版通常遵循一定的格式规范,以提高代码的可读性和可维护性。常见的id排版格式包括驼峰命名法、下划线命名法和短横线命名法。
驼峰命名法将单词首字母小写,后续单词首字母大写,例如:myVariableName。
下划线命名法使用下划线分隔单词,所有字母小写,例如:my_variable_name。
短横线命名法使用短横线分隔单词,所有字母小写,例如:my-variable-name。选择合适的id排版格式取决于个人偏好和项目约定,但在团队合作中,应保持一致性以提高代码的可读性和可维护性。
perl的命名规范?
1 命名规则
1.1 文件命名
文件名称统一用英文字母(大小写)、数字和下划线的组合,长度一般不超过20个字符,文件命名体现功能的含义,正式发布版本不能加入作者信息。Perl Scripts 文件的扩展名必须是".pl",Perl Module文件的扩展名必须是".pm"。
正确:
lucent_file_parser.pl
不是:
lucent_file.p
1.2 标识符
采用语法模板来定义标识符的名字,命名必须有一定的实际意义,由英文字母组成,中间可以根据语义的连续性,使用下划线连接。
1.2.1 变量
局部变量必须由小写字母和下划线组成,常量名必须由大写字母和下划线组成。由多个单词组成的名字里,使用下划线"_"把多个单词分开。全局变量以’g_’开头,其余部分的命名规则和局部变量相同。每个全局变量必须有注释说明其作用。
正确:
my $next_node;
不是:
my $node;
1.2.2 包和类
包、类的命名采用大小写混合、首字母大写的方法。
正确:
IO::Controller
1.2.3 标识符缩写
标识符缩写时要保留单词的开始字母,不是辅音字母的简写。
正确:
use List::Util qw( max );
DESC:
for my $desc (@orig_strs) {
my $len = length($desc);
next DESC if ($len > $UPPER_LIM);
$max_len = max($max_len, $len);
}
不是:
use List::Util qw( max );
DSCN:
for my $dscn (@rgnl_strgs) {
my $lngh = length $dscn;
next DSCN if $lngh > $UPPR_LMT;
$mx_lngh = max($mx_lngh, $lngh);
}
1.2.4 函数
由小写字母、下划线组成。
正确:
sub max
{
……
}
sub get_msc_name
{
……
}
不是:
sub getMscName
{
……
}
1.3 布尔类型
boolean类型的变量,或返回boolean类型的值的函数,在命名时要反映其属性,必须用is或者has开头。
正确:
sub is_valid;
sub is_metadata_available_for;
sub has_end_tag;
my $has_loading_finished;
my $has_found_bad_record;
# and later...
if (is_valid($next_record) && !$has_loading_finished) {
METADATA:
while (is_metadata_available_for($next_record)) {
push @metadata, get_metadata_for($next_record);
last METADATA if (has_end_tag($next_record));
}
}
else {
$has_found_bad_record = 1;
}
1.4 数组和哈希
数组类型的变量采用复数,hash类型的变量采用单数。要用undef显式释放变量空间。
正确:
my %option;
my %title_of;
my %count_for;
my %is_available;
# and later...
if ($option{'count_all'} && $title_of{$next_book} =~ m/$target/xms) {
$count_for{$next_book}++;
$is_available{$next_book} = 1;
}
my @events;
my @handlers;
my @unknowns;
# and later...
for my $event (@events) {
push @unknowns, grep { ! $_->handle($event) } @handlers;
}
print map { $_->err_msg } @unknowns;
2 注释
所有注释可用英文或中文书写,尽量使用英文注释。保持注释和代码的完全一致,修改程序时,必须修改相应的注释。注释的行数一般应在程序总行数的1/5到1/3。禁止出现错别字。注释应该语义明确,避免出现二义性。
2.1 文件头部注释
每个含有源代码的文件必须在文件开始有关于该文件的介绍性注释。其中列出文件名、创建者、创建日期、功能描述、版本信息、版权声明;如果对文件进行了修改,应该在文件头中说明修改人、修改日期、修改原因,并变更文件的版本信息,最新版本信息放到最前面。
格式为:
#*********************************************************
# FileName: lucent_file_parser.pl
# Creator: Phonix <phonix@gmail.com.cn>
# Create Time: 2006-01-09
# Description: This is the proof-of-concept code for the
# Windows denial-of-serice attack described by
# the Razor team (NTBugtraq, 19-May-00).
# CopyRight: Copyright © Bright Ocean Inter-Telecomm,All rights reserved.
# Revision: V1.0.0
# ModifyList:
# Revision: V1.1.1
# Modifier: Phonix
# ModifyTime: 2006-01-17
# ModifyReason: fix the bug of ……
#
# Revision: V1.1.0
# Modifier: Phonix
# ModifyTime: 2006-01-16
# ModifyReason: add mysql&oracle db support
#*********************************************************
不是简单的:
#========================================
#Created By:Phonix
#Created Time: 2006-01-09
#Modified Time: 2006-01-17
#========================================
2.2 文件中注释
建议在文件中标识出修改部分的起止位置。
正确:
# add mysql&oracle db support begin
……
# add mysql&oracle db support end
2.3 函数注释
在每个函数前必须写描述性注释。说明这个函数的功能、参数和函数的返回值。
格式为:
#*******************************************************************
# Function Name: calc_time($datetime, $delta)
# Description: This function calculate the new datetime.
# Parameters:
# 1. $datetime is the base time, taking the format of 'yyyy-mm-dd hh:mm:ss'
# 2. $delta is the time which should be add to the $datetime. A positive value increase the time
# while the negative vale decrease the time
# Return:
# A new time string is returned, also taking the format of 'yyyy-mm-dd hh:mm:ss'
#*********************************************************************
不是简单的:
##########################################
#function name : get_ldap
#desc : get config info from ldap server
##########################################
2.4 程序块注释
程序块注释用于说明程序中的关键算法、使用某种技巧的代码以及修改、测试、阅读时必须加以注意的代码。
格式为:
#*********************************************************************
#注释内容
#......
#......
#********************************************************************
2.5 语句注释
用于对特定程序语句进行说明,建议采取在语句行末尾说明的方法,同时注释换行后也要对齐。格式为:
my @names = (
'Damian', # Primary key
# the key is
'Matthew', # Disambiguator
'Conway', # General class or category
);
3 代码布局
3.1 括号
建议括号、插入语可以采用两种方式之一,但是在一个程序里选定那种方式之后,那么要至始至终保持一致。
3.1.1 方式一
采用K&R风格。
格式为:
my @names = (
'Damian', # Primary key
'Matthew', # Disambiguator
'Conway', # General class or category
);
for my $name (@names) {
for my $word ( anagrams_of(lc $name) ) {
print "$word\n";
}
}
3.1.2 方式二
括号对{}对必须位于同一列,独占一行,并且和{}之外的语句行对齐
my @names =
(
'Damian', # Primary key
'Matthew', # Disambiguator
'Conway', # General class or category
);
for my $name (@names)
{
for my $word (anagrams_of(lc $name))
{
print "$word\n";
}
}
3.2 关键字
把关键字和其他的内容分开,关键字if, while, for,else…后面必须接一个空格。if和while语句必须使用’{‘和’}’括起语句体,即使只有一行代码。建议不使用单行的if语句。
正确:
for my $result (@results) {
print_sep( );
print $result;
}
while ($min < $max) {
my $try = ($max - $min) / 2;
if ($value[$try] < $target) {
$max = $try;
}
else {
$min = $try;
}
}
if ($condition){
$i++;
}
不是:
for(@results) {
print_sep( );
print;
}
while($min < $max) {
my $try = ($max - $min) / 2;
if($value[$try] < $target) {
$max = $try;
}
else{
$min = $try;
}
}
if($condition) {$i++;}
3.3 子程序和变量
不要把子程序或变量和其后的括号部分分开。
正确:
my @candidates = get_candidates($marker);
CANDIDATE:
for my $i (0..$#candidates) {
next CANDIDATE if open_region($i);
$candidates[$i]
= $incumbent{ $candidates[$i]{region} };
}
不是:
my @candidates = get_candidates ($marker);
CANDIDATE:
for my $i (0..$#candidates) {
next CANDIDATE if open_region ($i);
$candidates [$i]
= $incumbent {$candidates [$i] {region}};
}
3.4 代码缩排
缩进采用四个空格,或一个TAB(1 TAB 设置成四个空格)。
3.5 代码块
不要把两句话放在一行,每行只能写一个语句。
正确:
while (my $record = <$inventory_file>) {
chomp $record;
next RECORD if $record eq $EMPTY_STR;
my @fields = split $FIELD_SEPARATOR, $record;
update_sales(\@fields);
$count++;
}
不是:
while (my $record = <$inventory_file>) {
chomp $record; next RECORD if $record eq $EMPTY_STR;
my @fields = split $FIELD_SEPARATOR, $record; update_sales(\@fields);$count++;
}
3.6 代码长度
每个函数体的语句行不能超过100行(不包括注释,一个分号算一行)。每行长度不要超过78个字符,超过该长度时,必须考虑换行,从低优先级的操作符处分割长表达式, 在赋值符前断开长的语句。
正确:
push (@steps, $steps[-1]
+ $radial_velocity * $elapsed_time
+ $orbital_velocity * ($phase + $phase_shift)
- $DRAG_COEFF * $altitude);
$predicted_val = $average + $predicted_change * $fudge_factor;
不是:
push (@steps, $steps[-1] + $radial_velocity
* $elapsed_time + $orbital_velocity
* ($phase + $phase_shift) - $DRAG_COEFF
* $altitude);
$predicted_val = $average
+ $predicted_change * $fudge_factor;
3.7 操作符
二元运算符(算术运算符, 赋值运算符等)的两边都要接空格,低级操作符(如:+-)两边各有两个空格,高级操作符(如:*%)两边各有一个空格。
在运算符'->'两边不要使用空格,在一元操作符和操作数两边不要使用空格。
可以使用括号来表示运算的先后顺序。
正确:
my $displacement
= $initial_velocity * $time + 0.5 * $acceleration * $time**2;
my $price
= $coupon_paid * $exp_rate + ($face_val + $coupon_paid) * $exp_rate**2;
不是:
my $displacement=$initial_velocity*$time+0.5*$acceleration*$time**2;
my $price=$coupon_paid*$exp_rate+(($face_val+$coupon_val)*$exp_rate**2);
3.8 语句结束符
在每个语句后边要填加分号。
正确:
while (my $line = <>) {
chomp $line;
if ( $line =~ s{\A (\s*) -- (.*)}{$1#$2}xms ) {
push @comments, $2;
}
print $line;
}
3.9 代码排列
数组或Hash的赋值采用垂直排列。
正确:
my @months = qw(
January February March
April May June
July August September
October November December
);
my %expansion_of = (
q{it's} => q{it is},
q{we're} => q{we are},
q{didn't} => q{did not},
q{must've} => q{must have},
q{I'll} => q{I will},
);
不是:
my @months = qw(
January February March April May June July August September
October November December
);
my %expansion_of = (
q{it's} => q{it is}, q{we're} => q{we are}, q{didn't} => q{did not},
q{must've} => q{must have}, q{I'll} => q{I will},
);
3.10 非末端表达式
采用中间变量代替长表达式。
正确:
my $next_step = $steps[-1]
+ $radial_velocity * $elapsed_time
+ $orbital_velocity * ($phase + $phase_shift)
- $DRAG_COEFF * $altitude
;
add_step( \@steps, $next_step, $elapsed_time);
不是:
add_step( \@steps, $steps[-1]
+ $radial_velocity * $elapsed_time
+ $orbital_velocity * ($phase + $phase_shift)
- $DRAG_COEFF * $altitude
, $elapsed_time);
3.11 功能块顺序
在每个Perl Scripts中,每个功能块之间必须有一个空行。主程序为main()函数,功能块出现顺序如下:
use modules;
global variable 定义
main定义
sub routine 定义
4 数值和表达式
4.1 字符串界定符
需要用变量替换的字符串用双引号,否则用单引号。
正确:
my $spam_name = "$title $first_name $surname";
my $pay_rate = "$minimal for maximal work";
my $spam_name = 'Dr Lawrence Mwalle';
my $pay_rate = '$minimal for maximal work';
4.2 常量
使用字符常量,而不要直接用数值。
正确:
use Readonly;
Readonly my $MOLYBDENUM_ATOMIC_NUMBER => 42;
# and later...
print $count * $MOLYBDENUM_ATOMIC_NUMBER;
不是:
print $count * 42;
4.3 字符串
4.3.1 两行
对于两行的字符串,要用“.”进行连接。
正确:
$usage = "Usage: $0 <file> [-full]\n"
. "(Use -full option for full dump)\n";
不是:
$usage = "Usage: $0 <file> [-full]
(Use -full option for full dump)";
4.3.2 多于两行
对于多于两行,要采用如下格式:
正确:
$usage = <<"END_USAGE";
Usage: $0 <file> [-full] [-o] [-beans]
Options:
-full : produce a full dump
-o : dump in octal
-beans : source is Java
END_USAGE
不是:
$usage = "Usage: $0 <file> [-full] [-o] [-beans]\n"
. "Options:\n"
. " -full : produce a full dump\n"
. " -o : dump in octal\n"
. " -beans : source is Java\n"
;
4.4 哈希变量
Hash变量的定义采用双箭头(=>)方式。
正确:
%default_service_record = (
name=> '<unknown>',
rank=> 'Recruit',
serial=> undef,
unit=> ['Training platoon'],
duty=> ['Basic training'],
);
不是:
%default_service_record = (
'name', '<unknown>',
'rank', 'Recruit',
'serial', undef,
'unit', ['Training platoon'],
'duty', ['Basic training'],
);
5 函数
5.1 调用语法
调用时要使用圆括号,不管是否有参数。
正确:
fix();
coerce($input, $INTEGER, $ROUND_ZERO);
不是:
fix;
5.2 函数返回
在函数中要进行显式的return返回。
正确:
sub set_terseness {
my ($terseness) = @_;
my $default_terseness = $terseness;
return; # Explicitly return nothing meaningful
}
不是:
sub set_terseness {
my ($terseness) = @_;
my $default_terseness = $terseness;
}
6 编程惯例
6.1 使用use strict
所有Perl Scripts 文件中必须在开始使用“use strict;”,进行严格的语法检查,便于查找错误。
6.2 避免使用内部变量名称
避免使用Perl内部变量。使用“use English;”装入Perl内部变量的符号名称。使用my来限定变量的作用域。下面是一些Perl内部变量名称的对应关系。
$_ $ARG
@_ @ARG
$! $ERRNO
$? $CHILD_ERROR
$$ $PID
$0 $PROGRAM_NAME
$. $INPUT_LINE_NUMBER
$| $OUTPUT_AUTOFLUSH
$@ $EVEL_ERROR
$& $MATCH
$` $PREMATCH
$' $POSTMATCH
$+ $LAST_PAREN_MATCH
$/ $RS
$\ $ORS
$< $UID
$> $EUID
$( $GID
$) $EGID
$] $PERL_VERSION
$? $CHILD_ERROR
6.3 避免使用goto
避免使用goto语句(只有在从多重循环的内部跳出时才可以使用)。除非能够特别有效的增加程序的效率并且不影响程序良好结构的特殊情况。
6.4 语法检查(辅助工具)
使用-cw选项检查Perl程序的语法。
正确:
perl -cw -Mdiagnostics file.pl # check syntax with warnings on
nt; # Perl 5.004_04, define constants
use Env; # instead of $ENV{'HOME'}; Shortens the usage, but do not
# mix normal variables
# with environment variables.
6.5 use Carp; # For modules: 使用标准模块
尽量使用标准库函数、公共函数和开发库中已有的函数和模块,使用FileHandle模块来处理文件的读写。尽量使用以下的标准Perl模块:
use strict; # helps you to locate syntax errors or uncertainties.
use integer; # if you don't need floating point math,it will speed Perl up.
use constagives you `carp' and `croak'
use English; # gives symbolic names, like $! ==> $ERRNO
use Getopt::Long; # --posix command line option handling
use Cwd; # platform independent cwd()
use File::Basename; # don't invent your own wheel of this.
use File::Find; # don't use system("find . -name ...")...
use File::copy; # don't use system("cp this that");
use File::patch; # instead of system("mkdir");
use File::stat; # readable: $st = stat($file), $st->mode
use DirHandle; # OO form of `readdir'
use Text::Tabs # un/expand tabs in text
use Text::ParseWords; # Parse text into tokens, understands embedded
# quotes. @a = "ewords("[ +]", 0, $_);
# a+b, "a b" + c
use Socket; # socket handling
use Sys::Hostname; # don't invent your own wheel
use Net::Ping # unix ping, check if host is online
use Time::Local # time manipulations
6.6 其他
1、编码、测试、注释,是程序员的三项基本工作,它们是同等重要的。
2、可靠性第一,可读性第二,效率第三。只有在极个别必须强调效率的部分,可以是可靠性第一,效率第二,可读性第三。
3、首先是正确,其次是优美。
4、无法证明你的程序没有错误。因此,在新编写完一段程序后,应该测试通过后再继续编码。
5、改正一个错误的同时,可能会引起新的错误。因此,在修改bug前,首先考虑对其他程序的影响。修改后,应该对程序进行完整的测试,而不是只对修改部分进行测试。
6、避免使用很多个参数的函数。
7、函数应该只有一个出口。
8、循环应该只有一个出口,避免多个出口。
9、尽量避免使用全局变量。
10、在尽可能小的作用域内定义和使用变量。
11、使用括号,表达复杂表达式中的操作符的优先顺序。
12、循环、分支不要超过五个层次。
13、循环、分支等语句后,即使只有一行代码时,也要使用{}将其括起来。
14、禁止else goto和else return。
15、重复使用的、完成相对独立功能的算法、代码,应该抽象为公共模块。
什么是大泽山?
大泽山风景名胜区
省级风景名胜区。又名“九青山”,胶东名山之一,位于平度市北部。主峰海拔737米。现分为皇城、西坡、大姑顶、桃花涧、天柱山、御驾山及森林公园等游览区。
中文名称
大泽山风景名胜区
地理位置
平度市北部
别称
九青山”
主峰海拔
737米
快速
导航
景点介绍旅游提示地图信息
简介
大泽山,屹立于山东省青岛市平度市东北部,峰峦叠嶂,奇泉遍布,林壑幽深,久负“鲁东名山”之誉。千百年来,其秀丽的自然风光,曾吸引着无数名人纷至沓来,“始皇游而忘返,武帝过以乐留”更被传为千古佳话。今日的大泽山,经过精心的保护和开发,装点得更为瑰丽多姿,现为山东省著名的风景名胜区和“中国葡萄之乡”。
共5张
大泽山风景名胜区
景点介绍
著名景点
游览大泽山,古时多由西麓韭园村入,经珍珠泉、楼子石、流云峡,越普贤门,徒步登山。而今日可乘汽车由高家村出发,经筢搂石、雀石涧、南门顶,沿新修的环山公路盘旋而上,直达山中腹地智藏寺。
智藏寺俗称下寺,始建于唐朝。史称“自秦汉以来,高人胜士多隐于此”,号为“神仙窟宅”。原古刹已被毁。重新修建的智藏寺,规模比古寺更为宏伟壮观。周围崖壁上遍布宋元明清历代佛家偈语。东侧是造型别致,雕刻精美的座座佛塔,是我国十大塔林之一。寺西侧聚景台上有一石亭,名“聚景亭”,古朴典雅,凌空欲飞,是游人小憩赏景之佳地。亭西有一山涧,林木葱郁,奇石遍布,相传春秋时越国大夫范蠡辅佐越王勾践灭掉吴国后,急流勇退,偕西施来此隐居,因名“范蠡涧”。
由智藏寺沿林间石阶路北上,一路溪水潺潺,芳草萋萋,少顷即达日照庵。日照庵,俗称上寺,以“日出即照”而得名,古为泰山碧霞元君行宫,亦毁于战乱。而今,展现在游人面前的山门、正殿、配殿、钟鼓楼均为仿古重建,较之过去更显富丽堂皇。庵内供奉碧霞元君、观音菩萨、无生老母、送子娘娘等女神,慈眉善目,神态安详。
据史料记载,早在明清及民国年间,农历三月十八日为大泽山庙会,至三月二十六日达到高潮,人山人海,延续月余。碑刻记载:“远近接踵而至,人烟辐辏,时常立碑送匾,以彰其盛德,修庙送衣,以安其尊座”。“每值朔望,虔诚致祭,岁月无间。”今日之庙会,一改往日习俗,成为融宗教朝圣、修学观光、休闲娱乐于一体的节日盛会。
日照庵东侧,有一天然石洞,大如广厦,名曰“老母洞”,又名“莲花洞”。传说,隋末女将杨斯玉,武艺超群,道法高明,就是在这洞内练就了一身好武艺。洞外至今有一箱形巨石,名曰“箱子石”,上书“书藏万卷”四个大字,为杨斯玉的藏书处。莲花洞外,有古松两株,相对而生。一株匍匐而起,似卧龙翘首,名卧龙松;一株松盖翩翩,如凤凰展翅,曰凤凰松,被誉为“龙凤呈祥”,为山中奇景。
日照庵西侧,遍布碑碣,长达里许,多逾百计,即为有名的大泽山碑林。其书法,或雄浑苍劲,或秀丽飘逸,千姿百态,流派纷呈,被誉为“天然的古代书法艺术展览馆”。漫步期间,令人流连忘返。
大泽山素以泉多闻名,大多分布在上、下寺周围。乳泉,泉水清洌,味胜乳汁;甘露泉,清醇甘美,光可鉴人。珍珠泉、涌泉、凤池、天池……亦各具神韵。尤为引人入胜者,当推八角琉璃井。相传曾有神龙潜伏于此,故又名“龙潭”。水深数米,终年不涸。据史料记载,明万历三十年春大旱,莱州知府龙文明,亲率僚属进山谒龙潭,祈雨有应。欣喜之余,于龙潭之旁建龙神祠,以资纪念。龙潭融诸泉之水汇入虎溪,南流至水门,泻入深谷,喷珠溅玉,似银河倒悬,形成壮美的虎溪飞瀑奇观。
出日照庵,越梳洗楼,即至瑞云峰前。在险绝的“瑞云峰”阳壁,镌刻着明万历三十六年王之都所书“瑞云峰”三巨字,字径3米,笔力雄强,气势开张,宛若一幅金碧巨幛,凌空高挂,使峰峦增色,崖壁生辉。
由此折西而上,攀“八步紧”,跨“张飞大骗马”,越“鹞子大翻身”,穿“通天洞”,即可登上海拔736米的瑞云峰极顶。人立峰顶,苍穹低垂,星月可摘。峰顶所镌“身依北斗尺五天”字句,正是其高险之真实写照。据康熙《平度州志》载,北峰顶,半岩垒石为城,亦名皇城顶,又名赤眉寨。新莽末年,赤眉起义军占据此山,“多凿臼以舂黍”,“汉兵久攻之不下”,赤眉军所凿舂米之石臼,至今随处可见。抗日战争时期,这里又是胶东西海军分区司令部所在地。军民携手,凭借大泽天险,巧布石雷阵,打得日军闻风丧胆,大泽山被誉为“石雷之乡”。山下的高家村,就是电影《地雷战》高家庄原形。1968年,在高家村东山脚下,建立了“高家民兵联防展览馆”,为省级文物保护单位。抗战胜利50周年之际,于民兵联防遗址上,新建了“平度抗日战争纪念馆”,国防部长迟浩田题写了馆名,为“青岛市爱国主义教育基地”。
站在北峰顶举目东望,大泽山森林公园尽收眼底。公园内林相整齐,植被丰富,现有各种木本、草本植物150多科,1000余种。绿涛翻涌,泉吟瀑鸣,形成了奇特的林海风光。大泽山松,或盘结于危岩峭壁之中,或挺立于峰崖绝壑之上,有的昂首似鹤,有地矫枝如龙,千姿百态,极为诱人。因而,宰相刘锣锅题刻“霄鹤岩松”四字于摩崖。另外,还有观赏价值很高的蔷薇、连翘、锦带花、映山红、绣线菊、山葡萄等花灌木,和黄芩、柴胡、灵芝、人参、何首乌、穿山龙等530多种药用植物。在大泽山林海里,獾、狐狸、刺猬、野兔经常出没,山鹰、杜鹃、野鸡、喜鹊时时赛歌,构成了一幅瑰丽绝妙的林海图。
站在瑞云峰顶纵目西眺,只见大泽山的支脉东西纵贯,山间盆地中一片片葡萄园将景色秀丽的大泽山镇装扮得绚丽多姿。独特的地理位置和山区小气候,使葡萄穗大粒饱、形色美观、香味浓郁,是生食佳品。远销日本、新加坡、澳大利亚等国。农历七月二十二日大泽山葡萄节开始,身着节日盛装的果农,纷纷云集于万亩葡萄园,敲锣打鼓,舞长龙,跑旱船,尽情欢庆。与慕名而来的国内外游客一起,沉浸在节日的欢乐之中。
大泽山西麓的泽山湖,碧波万顷,风光秀丽,为荡舟垂钓之佳地。1986年青岛首届国际钓鱼比赛在此举行。近年新建的泽山阁飞檐高翘,雕梁画栋,由长桥牵引,矗立水库中央,为大泽山再添一大景观。
泽山湖西侧不远处的淄阳水库,有“东岳石文化遗址”,是新石器时代岳石文化的发祥地,距今已有3600年的历史。1960年与1993年,中国社会科学院考古研究所先后两次在这里进行了考古发掘,出土了大量石器、陶器、骨器、蚌器,造型别致,特点鲜明,这是当年生活在这里的东夷民族创造的灿烂文化,它不仅填补了山东地区这一历史时期的文化空白,而且还为研究山东龙山文化的去向及夏至早商的关系提供了宝贵的实物资料,该遗址为省级文物保护单位。
大泽山风景名胜区
东岳石遗址西南侧屹立一山,名芝莱山。相传汉武帝曾登临此山喜得灵芝而得名。据道光《平度州志》记载,古昔山上建有月主祠,系秦八神祠之一。秦始皇三十年,祀月主于之莱山;汉武帝于元封元年、太始四年两次祀月主祠,山上还有秦篆刻石。现尚有骆驼峰、鹰嘴石等景点可供游览。
北峰西侧,有一高逾数丈的巨石矗立,陡峭奇险,如利锥直刺蓝天,上镌“孤峰独秀”四字。莫说斗胆之人只能望顶兴叹,就连顽强的雄鹰亦难栖其上,因名“鹰不落峰”。
由北峰西南行至西峰,需穿越九连洞。九连洞,因由九个天然石洞相互通连而得名。各洞均有名人题字,洞口有“上天云送客,出洞鹤迎人”对联。洞内道曲路盘,光线幽暗,流云飘缈,爽风飕飕,穿行其中,如入仙境,故又名飞仙洞。
出九连洞南行,攀登“上天梯”,穿越“一线天”,再过“仙人桥”,即达西峰顶。峰顶“青天外”、“别有天”、“清风白云”、“海阔天空”等刻字郝然在目。站在望海楼遗址,北眺渤海,海天浑融,烟波浩渺,千帆竞翔,岛屿隐跃,此时此刻,你会情不自禁地吟咏起诗人朱晋《登大泽山望海楼》“接到楼头一气空,海天万里望玲珑,蓬山云外风帆客,出入烟波渺霭中”的诗句,顿觉心旷神怡,烦累尽消。
西峰东侧山腰险绝处有一石屋,名“红庙”,明代书法家刘耳枝,年幼时曾读书于此。刘耳枝,名重庆,字幼孙,号耳枝,山东掖县人。《掖县志》载:“公少贫,读书大泽山中,采柿叶学书”,“挥毫大泽龙蛇舞,采向空山柿叶稀”。由于学习刻苦,又有一手好书法,万历年间中进士,官至户部右侍郎,相传曾书紫禁城宫中门匾,被天启皇帝誉为“神笔”。
大泽山素有“天然雕塑公园”之称,由红庙下行,一路奇石嶙峋,千姿百态,如眠羊,如骇猪,如脱兔,如起鹊;有的如天狗望月,有的似鲤鱼钻山,有的如老翁晒背,有的似少妇理鬓;天耳石,有耳轮附于左;天眼石,有目睫贯于顶;蟾蜍石,如巨蟆扑食;狮子石,似雄狮初醒;还有盘龙石、金龟石、蜗牛石、楼子石,惟妙惟肖,争奇斗巧。
此外,大泽山还有两处迷人的自然景观,即登“日观峰”观日出,登“邀月台”赏月。日观峰矗立在上寺直东,每当晴日初晨,登顶极目东眺,但见旭日露首,大如圆盘,艳若宫灯,跳荡不停。随之,冉冉升起。顿时,云蒸霞蔚,万象毕呈。千万座石峰亭亭而立,在阳光下,千姿百态,色彩绚丽,极为迷人。真可谓气象万千,令人陶醉。在风息人静、万籁俱寂的夜晚,登临智藏寺东侧“邀月台”,望夜空,皓月似银,清辉如泻;观台下,岚光月影,倒映虎溪。赏月吟诗,意趣无穷,置身此间,如临仙境。清代诗人喻成龙临台抒怀:“醉卧仙台忘物我,满头明月不归思。”
三大优势资源
葡萄资源
驰名中外的大泽山葡萄种植历史悠久,早在汉代即引进繁育。唐朝时,唐太宗即将当地的“龙眼”葡萄赐名为“狮子眼”,到元代初具规模。1984年,大泽山镇即建成以葡萄种植为主的果品生产专业镇,现种植面积已达2000公顷,年总产25000吨左右。
该镇出产的优质葡萄曾在全国农业博览会行评中夺四连冠,并在青岛、昆明两届世博会上获金奖,盛产的“玫瑰香”在品质上名列全国榜首。用大泽山葡萄酿造的葡萄酒,连续两届在布鲁塞尔葡萄酒精英评酒会上夺金奖。1995年,被全国首届百家中国特产之乡命名暨宣传活动组委会命名为全国首家“中国葡萄之乡”,逐渐树立了“西有吐鲁番,东有大泽山”的葡萄品牌形象。2005年9月,大泽山镇被国家农业部确定为“国家级大泽山葡萄农业标准化示范园区”,2006年大泽山葡萄被确定为北京2008奥运会推荐果品。
目前全镇已拥有中外葡萄品种200多个,发展优质葡萄3万多亩,年产量5000万公斤,培育的“玫瑰香”、“泽山一号”、“巨峰”等优质品种多次获得国家农业博览会金奖。现在葡萄产业已成为一大支柱产业,占全镇农业总收入的80%以上。
名胜古迹资源
大泽山,名胜荟萃,古迹棋布。早在新石器时代,曾使“黄帝所常游,与神会”。“五甲龙山文化遗址”、岳石文化“东岳石遗址”、“城皇崖商周文化遗址”的发现,为大泽山的史前文化增加了厚重感,且“东岳石遗址”于2006年被国务院公布为“全国重点文物保护单位”;春秋战国时期,齐八大神祠之一的“月主寺”即建在芝莱山阳。此外,猴子岭春秋烽火台、战国古驿道尚存;大泽山主峰之阳,系西汉末年赤眉军之根据地,至今其石城故址、石臼遗迹、赤眉堑尚存,称曰“古皇城”;古皇城内峰险涧深,石怪洞奇,瀑高泉清,林幽草密,名人高士多隐于此,号为“神仙窟宅”。
自盛唐以来,建有“智藏寺”、“日照庵”、“三藏庙”,又成为达官显贵探奇揽胜、拜佛求仙的神域仙境;天柱山“北朝摩崖刻石”,属魏碑书体之发祥地,为1988年国务院公布的“全国重点文物保护单位”,被誉为“中国书法名山”;位于“石雷之乡”的“抗日战争纪念馆”与“大泽山刻石和墓塔林”属省级重点文物保护单位。1992年,被确定为“省级风景名胜区”和“省级森林公园”。
石材资源
镇境内以“樱花红”、“泽山青”、“芝麻白”、“泽山花”、“雪花白”为主要品种的花岗岩和大理石储量丰富。自古以来,传统的石雕工艺为世人所称绝。漫山五百余处摩崖刻石和百余方碑林,天柱山“东魏石窟”及石塔、右仲翁造象,全由大泽山人所雕刻。至今以矿山开采、石材深加工的石材产业迅速发展,产品多达四个门类40余个品种。大泽山镇亦成为“中国北方主要石材基地”,为开发石雕旅游产品奠定了基础。
四大特色
文化之旅
以芝莱山、天柱山、御驾山为主,以“东岳石遗址”、“春秋战国遗址”、“中国书法名山”为载体,围绕“文化”二字做文章,发挥其“考古研究、文化修学、民俗考察、休闲观光”之功能,使历史再现、文化延伸,使游客体味过去、珍惜未来。
山中古迹众多,文物独特。智藏寺为胶东佛教名刹;日照庵相传为泰山老母东游行宫;墓塔林为我国七大塔林之一。五百余处古代摩崖、碑刻,文辞优美,书体高雅。声名远播的“书法胡同”石壁上刻有诗偈十余首,记述着明朝时中国佛教界在大泽山智藏寺举办的一次壮观的佛事盛会,是研究我国佛教历史的重要资料,被誉为佛家之“兰亭”。
位于大泽山西麓东岳石村东南的“岳石文化”遗址,是省重点文物保护单位。“岳石文化”是继“大汶口文化”和“龙山文化”后的又一种独立文化,为研究海岱地区尤其胶东半岛一带的古代历史提供了珍贵的资料。
闻名遐迩的天柱山,在大泽山主峰西南约10公里处,其位于山之阳的北魏郑道昭的《郑文公碑》(也称“魏碑”、“上碑”),向来被认为是魏碑中的圣品,被誉为“中国书法艺术之瑰宝”,属全国重点文物保护单位。
田园之旅
大泽山镇属1984年建成的果品生产专业镇,林相整齐,品种繁多。田园之旅主要在春、夏、秋三季进行,是大泽山旅游的一大卖点。其精华是“两园三线”,即“五龙埠葡萄观光园”、“天池岭葡萄观光园”及“大泽旅游路沿线”、“红山至盘龙山的环山路沿线”、“御驾山东环三山东头村、谭家夼村至尹家村环山公路沿线”,都是田园之旅的绝佳地段。
大泽山脚下,是葡萄的海洋,10万亩葱绿的葡萄园,荡漾着无限的生机。王光英先生来到这里欣然赞誉:“西有吐鲁番,东有大泽山”。每年都会有大批中外游客前来观光旅游,赏葡萄、摘葡萄、吃葡萄、喝葡萄酒、吃农家饭。
大泽山风景名胜区
风光之旅
风光之旅主要指大泽山山水风光、名胜古迹和生态之旅。主要有皇城风景区、大泽山森林公园、泽山湖、大姑顶景区和茶山,总面积约30平方公里。
大泽山山险涧深、石怪洞奇、瀑高林秀、壑幽泉清、雀啼莺啭,佳景美不胜收,明代时就有“大泽三十六景”之说。共有大小山头2100余座,其中北峰、西峰、天柱、御驾、明堂等较著名的山峰100余座。主峰瑞云峰海拔736米,屹然插天,势若虬龙。大泽群山峰峰相抱、层峦叠嶂、苍苍郁郁,如万马奔腾,气势极其磅礴,为“平度八景”之首。
大泽山风景区管委会结合采石山体的保护与开发,因势利导、依山而建“中国雕塑名山”和“福海寿山”新景区,是在大泽山旅游大开发战略中实施的一项新举措。已经开工镌刻的“华夏第一福”,位于大泽山山体天然巨石之上。
红色之旅
大泽山属抗日根据地,有许多可歌可泣的抗战英绩。尤其作为中国“石雷之乡”,应该像海阳市一样重视宣传、开发。在搞好抗日战争纪念馆东侧群峰恢复治理的同时,将大佛岭两侧之采石坑加以改造,以摩崖浮雕的形式,再现当年抗日军民光荣斗争史,同时恢复、重建、整理抗战遗址,使之真正成为爱国主义教育基地。
旅游提示
①、大泽山主峰险峻齐鲁第一,登顶有两条路。东路极险:爬“八步紧”,走“吓呼吓”、“哈呼哈”,跨“张飞大蹁马”,跃“鹞子大翻身”,穿“钻天洞”。提醒游客一般不要从此路登山。西路较险:过“驼峰”,跃“一线天”,穿“九连洞”,登“天梯”,游客一般从此路登顶。②、大泽山“十八盘”盘山公路较陡,提醒十座以上车辆及车况不佳车辆勿开车上山。③、游大泽山不仅观其古刹、古塔、古碑、刻石、奇泉、怪石,别忘了其真赏处是“月台邀月,东峰观日、西峰望海、北峰摘星。”
抗日战争有哪些感人的爱国故事?
从“九一八事变”开始,中国进行了长达十四年艰苦卓绝的抗日战争。关于抗战期间的损失,各方均有不同的数据,据国民政府抗战赔偿委员会统计的《中国责令日本赔偿损失之说贴》记载:
中国沦陷区有26省1500余县市,面积600余万平方公里,人民受战争损害者至少在2亿以上。自1937年7月7日至战争结束,中国军队伤亡331万多人,人民伤亡842万多人,其他因逃避战火,流离颠沛,冻饿疾病而死伤者更不可胜计。
注意,这份统计的数据只记录了卢沟桥事变以后的损失,从九一八事变到卢沟桥事变前的六年时间,并未计算在内。
在那段战火纷飞的岁月,无数国人为了国家完整和民族独立而抛头颅洒热血,涌现出了无数的感人事迹。其中,自然包括层出不穷和可歌可泣的爱情故事,值得我们所缅怀和铭记。
接下来,我们一起回顾在抗战中牺牲的最高军衔中国军人张自忠将军和妻子李敏慧之间感天动地的爱情故事。
张自忠(1891年——1940年),字荩臣,山东临清人,国民政府陆军二级上将。抗战期间先后参与了喜峰口战役、临沂会战、徐州会战、武汉会战和枣宜会战等,英勇殉国。建国后,先后入选“100位为新中国成立作出突出贡献的英雄模范人物”和“第一批300名著名抗日英烈名录”。
李敏慧(1890年——1940年),山东临清人,张自忠将军的妻子。她与张自忠虽是家族包办婚姻,二人却情投意合,坚决支持丈夫率军抗日,临终前才得知丈夫早已经为国捐躯了。
张自忠的家境比较富裕,自幼就开始接受系统的封建教育,被家族寄予了通过科举考试以光耀门楣的厚望。不过,随着科举制度的废除,他只能转而接受了新学,进入北洋法政学堂读书。
在此期间,张自忠接触并且投身于民主革命的洪流之中。刚一毕业,他就参加了冯玉祥的部队,凭借战功一步步晋升为第38师的师长,直至成为了第29军的军长。
不同于其他的国民党军官,动辄都有妾室,张自忠却只有李敏慧一个妻子,先后生育了三子一女。分别是,张廉珍、张廉静(早逝)和张卫国三个儿子,张廉云这一个女儿。
九一八事变后,面对蒋介石的“不抵抗政策”,张学良率领东北军不战而退入关内。对此,血气方刚的张自忠显得痛心疾首,亲率所部奔赴了喜峰口去阻击日军的南下。
由于得不到南京国民政府的支持,张自忠虽然数次击退了日军,但依然无法坚守住长城防线,无奈退守至平津地区。期间,他被迫接受了国民政府“请求国联出面调停”的主张,甚至在卢沟桥事变后也没有死守北平城。
为了寻找一个替罪羊,南京国民政府下令罢免了他的军职。就这样,相当于坐实了张自忠妥协投降的罪名,遭到了举国的痛骂,长期都无法抬起头来做人。
深知丈夫的秉性,妻子李敏慧从来都没有怀疑过张自忠,一直在身边默默关怀和支持他重新振作。毕竟,国家尚在劫难中,日寇尚在肆虐中,有志男儿必须赴国难。
在妻子的鼓励下,张自忠痛定思痛,终于意识到自己绝不能背负汉奸的骂名去死。于是,他开始屡屡请缨,要求奔赴抗日的最前线去洗刷自己的耻辱,担任了第33集团军的司令。
当时,随着战线的拉长,日军兵力不足和资源匮乏的劣势已经显露无遗,“三个月灭亡中国”更是成为了笑谈。为了迅速改变局势,日军决心集中兵力打通连接重庆的陆上交通线,威逼蒋介石政权投降。
面对日军15万精锐兵力的汹汹来势,第五战区的司令长官李宗仁决定正面迎击,在枣阳、襄阳和宜昌等地阻击日军。作为集团军司令,张自忠本不必亲自渡河作战,但他还是在留下遗言后慷慨赴死:
要相信,只要我等能本此决心,我们国家及我五千年历史之民族决不致亡于区区三岛倭奴之手。为国家、民族死之决心,海不清、石不烂、决不半点改变,愿与诸弟共勉之。
在遗书中,张自忠竟然没有对自己的妻小留下只言片语。事实上,由于长期的战乱,夫妻之间已经许久未曾通信了。他不知,自己的妻子已经身患了癌症,只是未曾告知自己而已。
张自忠殉国后,整个国家都陷入了无限的悲恸。只是,躺在病榻之上的李敏慧却被所有人善意地隐瞒了消息。据女儿张廉云回忆:
我们不敢告诉她实情,就只在家中戴孝,痛哭流涕。去医院时,再换上平常的衣服,努力克制着自己悲伤的情绪。
眼看着李敏慧的病情已经越来越严重,所剩时日也越来越少。意识清醒时,她依然在打听丈夫的消息。此情此景下,张自忠的弟弟张自明再也不忍心隐瞒了,只得如实相告兄长已经为国捐躯了。
听完惊天噩耗后,李敏慧变得泪眼模糊,但还是颤颤巍巍留下了一封遗书:
张自忠为国战死疆场,我不难过。我虽是一个妇女,也应当有份。
李敏慧病逝的时间,距离张自忠牺牲仅仅3个月。国民政府为了鼓舞全国人民继续抗战的士气,索性报道成了她是“绝食殉夫”而死的楷模。
在数十年后,张廉云还曾专门进行过澄清:
母亲绝食七日而亡,事情并不是这样的!
张自忠为国捐躯后,妻子李敏慧也在三个月后病逝。虽然说,她不是为了亡夫绝食而亡,但夫妻之间的爱情故事却是最真挚的。@文史不假
如何理解CSS类名语义化?
我是一名前端,看了这个问题并且看了你说的这篇文章,我来说说我的观点!
首先我们谈谈CSS的类名语义化,我个人觉得这就是一个命名规范的问题!
如上图,这是一个普通的页面,我们可以根据页面的功能划分为header、nav、list、footer这个四个部分,然后再对细节部分做划分!如果你对CSS做了模块化,可以这样命名class:
header-x1-x2
nav-x1-x2
list-x1-x2
footer-x1-x2
文件夹有几级,名字可以用横线拼接,当然也可以是驼峰法!
这样的好处非常明显,维护方便,查找样式更方便,但是看见‘语义化’这三个字你就应该感觉到它很业务,它可以快速适应业务迭代,对于新人的学习成本非常小,大家在浏览器中一眼就能识别这个样式在哪个文件中,根本无需sourceMap!
再来说说你说的这篇文章Challenging CSS Best Practices,直接用文中例子:
特点很明显,对样式的作用切割的很细致,几乎一个类名包含一个样式,而且命名也是根据样式的作用来取的!这样的优点是:复用性强,冗余代码非常少,类名很少发生级联!
对比两种开发css规范(已经超出了类名的命名规范的范畴),你可以发现:
1、语义化适用于很业务的场景,开发者无论新人还是老人都能信手拈来,开发成本和维护成本小,但是一个class具体包含的样式呈现不受控制
2、对于UI框架和组件类的模板很适用于第二种方案,但是对开发者的能力要求会更高,可能开发前要制定各种各样的base class,而且还要牢记于心
一句话,还是要看自己的业务场景进行技术选型!
喜欢我的回答就关注我吧,有问题可以发表评论,我们一起学习,共同成长!