Archive for 十二月, 2010

1、yum install subversion  # 安装svn组件

安装成功之后,可以看到如下相关的命令被生成:

[flykobe@localhost svnclient]$ svn

svn            svnadmin       svndumpfilter  svnlook        svnserve       svnsync        svnversion

2、生成svn仓库

svnadmin create /var/svnrepos

修改conf下的文件svnserve.conf:

[general]

anon-access = read

auth-access = write

password-db = passwd

authz-db = authz

realm = My First Repository

并利用htpasswd生成加密的账号:

[flykobe@localhost svnrepos]$  htpasswd -cm conf/passwd flykobe # c是create

3、这时就可以访问svn了:

[flykobe@localhost svnrepos]$ svn info file:///var/svnrepos/

路径:svnrepos

地址(URL):file:///var/svnrepos

Repository Root: file:///var/svnrepos

档案库 UUID:f561f977-8526-4757-94ed-60f16aaa3677

修订版:0

节点种类:目录

最后修改的修订版:0

最后修改的时间: 2009-12-29 17:17:02 +0800 (二, 29 12月 2009)

4、将svn与apache关联起来

yum install mod_dav_svn # 安装svn的apache扩展,会在apache的module下生成mod_svn_dav.so
cp /usr/lib/httpd/modules/mod_dav* /usr/local/apache/modules

修改apache配置:
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so

DAV svn
SVNPath /var/svnrepos/
AuthType Basic
AuthName “Subversion repository”
AuthUserFile /var/svnrepos/conf/passwd
Require valid-user

重启apache,之后可以利用http访问svn了:

svn list http://127.0.0.1/repos

————————————————-

Nginx目前没有支持svn的模块,而我们的需求,暂时也只是需要能够通过svn协议访问即可,所以svnserver提供的简单服务已足够。

配置如下:

#conf/svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = kxzb svn repos

#conf/passwd
[users]
admin = flykobe
#conf/authz
[aliases] [groups] [/] admin = rw
之后可以通过svn list svn://host-ip/kxzb 来访问。  

通过虚拟机安装完centos5.2后,开始搭建lamp的开发环境。目前想到需要安装的是:

httpd, mysql, php, subversion, memcached。

httpd

./configure –prefix=/usr/local/apache –enable-so –enable-rewrite –enable-cgi –enable-expires –enable-headers –enable-deflate –disable-all

make; sudo make install

使用原始配置文件,加入以下:

<Directory "/ms/wwwroot">

Options FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

Include conf/extra/httpd-vhosts.conf

第一段是为了允许访问我的web目录,第二部分是由于我希望把virtualhost配置在httpd-vhost.conf文件中。

然后在httpd-vhost.conf里添加vhost配置:

<VirtualHost *:80>
DocumentRoot "/ms/wwwroot/test/"
ServerName test.cy.com
ErrorLog "logs/test.error.log
CustomLog "|/usr/local/sbin/cronolog /ms/var/logs/apache/newplay.access_%Y%m%d.log" combined env=!dontlog
</VirtualHost>

其中,如果不存在cronolog,则需要安装一下,下载地址:http://cronolog.org/download/cronolog-1.6.2.tar.gz。

在/ms/wwwroot/test/index.html里随意填写几个字符,启动httpd,配置hosts,访问http://test.cy.com/index.html,若访问成功即可。否则查看httpd的log看是否有错误。

————————

怎样令httpd可以非root用户绑定80端口呢?

当以非root用户启动httpd并绑定到80端口时,会报错:

(13)Permission denied: make_sock: could not bind to address [::]:80

(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80

这时可以通过修改httpd的所有者和“设置-用户-id”或“设置-组-id”来达到目的。查看《UNIX环境高级编程》第58面,可知,一般情况下,进程的有效用户id就是实际用户id(即执行者的id),但是当设置了“设置-用户-id”时,进程的有效用户id就会变成该文件的所有者id了。“设置-组-id”同理。所以,修改httpd的user为root,并且“设置-用户-id”就可以在执行httpd时使初始进程具备root权限,从而就可以绑定80端口了。

mysql

./configure –prefix=/usr/local/mysql –enable-local-infile –with-charset=utf8

make; sudo make install

配置:

mkdir /var/mysql-data/ –数据仓库位置

cp /usr/local/mysql/share/mysql/my-large.cnf /etc/my.cnf  –mysql配置文件 # 这里最好用默认的配置文件初始化数据库,否则可能出各种奇怪的错误。之后如果启动不了mysqld,可以删除ib*即innodb相关的文件。

sudo -u mysql /usr/local/mysql/bin/mysql_install_db –user=mysql –datadir=/var/mysql-data/   ## 注意:这里是两个中划线

启动mysql服务器:

sudo /usr/local/mysql/bin/mysqld_safe –datadir=/var/mysql-data/ –user=mysql &

登陆mysql客户端:

/usr/local/mysql/bin/mysql -u root

新建mysql账号:

grant all privileges on *.* to ‘username’@’localhost’ IDENTIFIED BY ‘passwd’ WITH GRANT OPTION;

允许指定ip访问:grant all privileges on happy_try.* to ‘mysql’@’10.232.22.114‘  IDENTIFIED BY ‘password’ ;    ## 注意,必须是ip。

为了运行其他机器访问,还需要把my.cnf中的添加:

bind-address = 数据库服务器ip

#skip-networking  ### 注释掉


php

configure过程中,可能会出现错误,报缺少某些lib库,这时yum install该库以及其对应的devel即可,比如缺少libmhash和libmhash-devel。

‘./configure’  ‘–prefix=/usr/local/php’ ‘–with-config-file-path=/etc’ ‘–with-apxs2=/usr/local/apache/bin/apxs’ ‘–enable-dba’ ‘–with-db4′ ‘–enable-sockets’  ‘–with-curl’ ‘–enable-soap’ ‘–enable-ftp’ ‘–enable-libxml’ ‘–with-libxml-dir’ ‘–with-mcrypt’ ‘–with-zlib’ ‘–enable-pdo’  ‘–with-pdo-dblib’ ‘–with-mhash’ ‘–enable-bcmath’ ‘–with-openssl’ ‘–with-mysql=/usr/local/mysql’

make; sudo make install

这时,在apache的modules下会出现libphp5.so。可以重新配置httpd,使之支持php访问了。

AddType application/x-gzip .gz .tgz

AddType application/x-httpd-php .php

AddType application/x-httpd-php .htm

AddType application/x-httpd-php .inc

AddType application/x-httpd-php .html

———–

如果安装过程中,出现 cannot find libmysqlclient.so,并且查看config.log,是无法找到libmysqlclient.so,且本机有libmysqlclient.so只是在lib64下的话,可以:

#export LDFLAGS=-L/usr/lib64/mysql。

更根本的解决方案是因为这台x86_64的机器,在加载ldconfig的时候,加载了i386的配置了。所以,修改/etc/ld.so.conf里的配置,并且执行ldconfig命令。

但是配置LDFLAGS相当于是强行改变本次登录时gcc的编译选项,不是根本解决方法啊,再看config.log里,还是去lib而非lib64找,最后发现这个lib的值是从PHP_LIBDIR里传来的,而可以通过–with-libdir来修改这个值,这个选项会导致不是从配置目录的lib而是指定的值去找。

最后发现,在我目前的情况,还是得依赖为LDFLAGS增加值来实现,因为我的mysql lib在lib64下,而其他一些依赖库又在lib下……这样当configure在lib下找不到的时候,就会去/usr/lib64/mysql下再找了。

subversion

按照http://flykobe.com/index.php/2010/12/22/linux%e4%b8%8bsvn%e7%9a%84%e9%85%8d%e7%bd%ae%e6%96%b9%e6%b3%95/配置。

memcached

configure中如果缺少lib,yum安装该lib及其devel库。

./configure –prefix=/usr/local/memcached

make; sudo make install

启动一个memcached服务:

sudo /usr/local/memcached/bin/memcached -d -p -m 128 -u root -p 12213 -c 1024 -P /tmp/mem_cytest.pid

telnet访问该memcached服务:

telnet localhost 12213

为了使php可以访问memcached服务,还需要安装memcache扩展:

cd memcache; /usr/local/php/bin/phpize ; ./configure –with-php-config=/usr/local/php/bin/php-config; make ;sudo make install

在php.ini中添加:

extension=memcache.so

———————————-

memcached依赖于libevent库,如果libevent不是1.4版本,但是有其他如1.1版本的libevent,则安装可以成功。启动时会报无法找到libevent.1.4.so,如果建立一个指向1.1版本的软链接,则可以启动,但是一旦尝试telnet连接,则connect会被关闭,memached会段错误退出:

memcached[1738]: segfault at 00000000fffff7da rip 00000000f7eebb19 rsp 00000000ffa398c0 error 4

这里可以利用ldd命令辅助查看:

[admin@v080105 memcached-1.1.12]$ ldd ~/apps/memcached/bin/memcached

linux-gate.so.1 =>  (0xffffe000)

libevent-1.4.so.2 => not found

libc.so.6 => /lib/libc.so.6 (0x00772000)

/lib/ld-linux.so.2 (0x00750000)

其实1.1版本支持memcached1.1.12已经足够,所以在configure的时候,–with-libevent=/usr/lib即可。

(如果还是不行,记得make distclean)

———————–

mysql启动有时报错:

InnoDB: Fatal error: cannot allocate the memory for the buffer pool

是因为innodb_buffer_pool_size的值设置过大,改到合适的大小即可。

virtualbox有4种网络连接方式,以下详细解说。

NAT方式:(默认方式)

NAT模式是最简单的实现虚拟机上网的方式,你可以这样理解:Vhost访问网络的所有数据都是由主机提供的,vhost并不真实存在于网络中,主机与网络中的任何机器都不能查看和访问到Vhost的存在。

虚拟机与主机关系:
只能单向访问,虚拟机可以通过网络访问到主机,主机无法通过网络访问到虚拟机。

虚拟机与网络中其他主机的关系:
只能单向访问,虚拟机可以访问到网络中其他主机,其他主机不能通过网络访问到虚拟机。

虚拟机与虚拟机之间的关系:
相互不能访问,虚拟机与虚拟机各自完全独立,相互间无法通过网络访问彼此。

bridge方式:

网桥模式模拟度相当完美。你可以这样理解,它是通过主机网卡,架设了一条桥,直接连入到网络中了。因此,它使得虚拟机能被分配到一个网络中独立的IP,所有网络功能完全和在网络中的真实机器一样。

虚拟机与主机关系:
可以相互访问,因为虚拟机在真实网络段中有独立IP,主机与虚拟机处于同一网络段中,彼此可以通过各自IP相互访问。

虚拟机于网络中其他主机关系:
可以相互访问,同样因为虚拟机在真实网络段中有独立IP,虚拟机与所有网络其他主机处于同一网络段中,彼此可以通过各自IP相互访问。

虚拟机于虚拟机关系:
可以相互访问,原因同上。

internal方式:

内网模式,顾名思义就是内部网络模式,虚拟机与外网完全断开,只实现虚拟机于虚拟机之间的内部网络模式。

虚拟机与主机关系:
不能相互访问,彼此不属于同一个网络,无法相互访问。

虚拟机与网络中其他主机关系:
不能相互访问,理由同上。

虚拟机与虚拟机关系:
可以相互访问,前提是在设置网络时,两台虚拟机设置同一网络名称。如上配置图中,名称为intnet。

host-only方式:

主机模式,这是一种比较复杂的模式,需要有比较扎实的网络基础知识才能玩转。可以说前面几种模式所实现的功能,在这种模式下,通过虚拟机及网卡的设置都可以被实现。
我们可以理解为Vbox在主机中模拟出一张专供虚拟机使用的网卡,所有虚拟机都是连接到该网卡上的,我们可以通过设置这张网卡来实现上网及其他很多功能,比如(网卡共享、网卡桥接等)。

虚拟机与主机关系
默认不能相互访问,双方不属于同一IP段,host-only网卡默认IP段为192.168.56.X 子网掩码为255.255.255.0,后面的虚拟机被分配到的也都是这个网段。通过网卡共享、网卡桥接等,可以实现虚拟机于主机相互访问。

虚拟机与网络主机关系
默认不能相互访问,原因同上,通过设置,可以实现相互访问。

虚拟机与虚拟机关系
默认可以相互访问,都是同处于一个网段。

本机(即host机)是windows7系统,首先安装vitualbox(http://www.virtualbox.org/)。

安装centos系统

新建一个空白目录,可以放置在任意盘符下(最好别放系统盘)。新建一个虚拟机,分配虚拟内存、硬盘空间大小,点击开始。

首次运行该虚拟机,会要求插入安装盘,这时插入centos5.2的安装盘,按照正常安装流程进行。中间会遇到“格式化”的提示,没有关系,它操作的对象仅是上一步分配的磁盘空间,不会影响到host机。

配置网络连接

我希望达到的效果是:

本机(host机)可以与虚拟机互相访问,虚拟机当然也需要能够访问网络。

vitualbox的连接方式有4种:NAT、bridge、internal、host-only的方式。

默认情况下,NAT方式允许虚拟机访问网络,但是其ip地址与host机不在一个子网里,所以host机无法访问虚拟机。

修改为仅有brideg方式,这时相当于host机与虚拟机在网络中式同等地位,它们获取同一子网中的地址,可以互相访问,当然也都可以访问网络。这时,我使用的配置是:以太网连接,支持有线网络。但是在无连接的情况下不可以相互访问。

这时,考虑下,如果给虚拟机配置多个网卡,应该是可以完美解决我的问题的。

so,配置虚拟机的网络1为NAT方式,网络2为bridge方式,网络3为host-only方式。

这样,无论是有线无线环境,由于虚拟机在NAT模式下,都是通过host访问网络的,所以只要host机有连接,则虚拟机就可以访问网络。

而另一方面,由于bridge方式,使虚拟机获得了192的内网ip,所以虚拟机和主机之间无论有没有网络,都可以互相访问。

但是这时,由于192的ip是动态获取的,为了避免更改,所以可以将host机127.0.0.1的某些端口映射到虚拟机上:

VBoxManage modifyvm “VM name” –natpf1 “guestssh,tcp,,2222,,22″

这代表,将host机的2222端口映射到虚拟机的22端口,从而允许在host机上通过2222端口访问虚拟机的ssh服务。

其中guestssh是该映射的名称,tcp是协议名,2222是host机端口,22是虚拟机端口。

同样,为了便于测试web应用,也可以将host机的80端口映射到虚拟机的80端口:

VBoxManage modifyvm “VM name” –natpf1 “guesthttp,tcp,,80,,80″

可以通过以下方法测试:

在虚拟机运行 sudo nc -l 80 监听虚拟机的80端口;然后在host机通过telnet方式访问127.0.0.1的80端口,如果连接成功,则设置成功。

具体网络配置见下图:
vitualbox network config

(这里有疑问!bridge方式应该是使host机和虚拟机同等地位,为什么看到的eth1却是192的ip呢?)

具体4中连接方式,请参考:http://flykobe.com/index.php/2010/12/21/virtualbox-network/

virtualbox帮助:http://www.virtualbox.org/manual/ch06.html

——————————————-

2011-09-29 补充

快速修复&备份

virtualbox提供了快速修复的功能,可以定期给虚拟机生成备份,以备故障时恢复。

操作步骤,就是进入到“快速备份”里,选择“当前状态”,点击“生成备份”的按钮即可。比如,我原先的虚拟机vdi是在D:\vitualbox-system\centos5.2.vdi,虚拟机安装路径是D:\Program Files\VirtualBox,而setting里的默认电脑位置是C:\Users\flykobe\.VirtualBox\Machines,那么会在C:\Users\flykobe\.VirtualBox\Machines\centos5.2\Snapshots里生成相应的备份vdi,之后所有点操作都针对这个备份vdi,而原vdi就保持不变了。

没有真的快速修复过,所以不说。

克隆

有时希望有多个虚拟机,可以模拟小的网络环境,这就可以用到克隆。

D:\Program Files\VirtualBox>VBoxManage clonehd “D:\vitualbox-system\centos5.2.vd
i.vdi” “D:\vitualbox-system\centos5.2.new.vdi”
Oracle VM VirtualBox Command Line Management Interface Version 3.2.12
(C) 2005-2010 Oracle Corporation
All rights reserved.
0%…10%…20%…30%…40%…50%…60%…70%…80%…90%…100%
Clone hard disk created in format ‘VDI’. UUID: 407ae8f7-1e6e-4c32-ad07-56a275680
f81
64位虚拟机的安装

当宿主机是64位时,默认情况下,是无法新建64位的虚拟机的(至少我的联想x220是这样),因为BIOS里禁用了该功能。

需要在开机按F1(不同机器可能案件不一样),进入BIOS,在security-virtualization-virtualization technology,将其设置为enalbed。这样就可以选择64位系统进行安装了。

CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理方法并整理了一下。对于web2.0的过度,请尽量用xhtml格式写代码,而且DOCTYPE 影响 CSS 处理,作为W3C的标准,一定要加 DOCTYPE声明。

CSS技巧

1.div的垂直居中问题

vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行

2. margin加倍的问题

设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。解决方案是在这个div里面加上display:inline;

例如:

<#div id=”imfloat”>

相应的css为

#imfloat{

float:left;

margin:5px;/*IE下理解为10px*/

display:inline;/*IE下再理解为5px*/

}

3.浮动ie产生的双倍距离

#box{

float:left;

width:100px;

margin:0 0 0 100px; //这种情况之下IE会产生200px的距离

display:inline; //使浮动忽略

}

这里细说一下block与inline两个元素:block元素的特点是,总是在新行上开始,高度,宽度,行高,边距都可以控制(块元素);Inline元素的特点是,和其他元素在同一行上,不可控制(内嵌元素);

#box{

display:block; //可以为内嵌元素模拟为块元素

display:inline; //实现同一行排列的效果

diplay:table;

}

4 IE与宽度和高度的问题

IE不认得min-这个定义,但实际上它把正常的width和height当作有min的情况来使。这样问题就大了,如果只用宽度和高度,正常的浏览器里这两个值就不会变,如果只用min-width和min-height的话,IE下面根本等于没有设置宽度和高度。

比如要设置背景图片,这个宽度是比较重要的。要解决这个问题,可以这样:

#box{ width: 80px; height: 35px;}html>body #box{ width: auto; height: auto; min-width: 80px; min-height: 35px;}

5.页面的最小宽度

min-width是个非常方便的CSS命令,它可以指定元素最小也不能小于某个宽度,这样就能保证排版一直正确。但IE不认得这个,而它实际上把 width当做最小宽度来使。为了让这一命令在IE上也能用,可以把一个<div> 放到 <body> 标签下,然后为div指定一个类,然后CSS这样设计:

#container{ min-width: 600px; width:expression(document.body.clientWidth < 600? “600px”: “auto” );}

第一个min-width是正常的;但第2行的width使用了Javascript,这只有IE才认得,这也会让你的HTML文档不太正规。它实际上通过Javascript的判断来实现最小宽度。

6.DIV浮动IE文本产生3象素的bug

左边对象浮动,右边采用外补丁的左边距来定位,右边对象内的文本会离左边有3px的间距.

#box{ float:left; width:800px;}

#left{ float:left; width:50%;}

#right{ width:50%;}

*html #left{ margin-right:-3px; //这句是关键}

<div id=”box”>

<div id=”left”></div>

<div id=”right”></div>

</div>

7.IE捉迷藏的问题

当div应用复杂的时候每个栏中又有一些链接,DIV等这个时候容易发生捉迷藏的问题。

有些内容显示不出来,当鼠标选择这个区域是发现内容确实在页面。 解决办法:对#layout使用line-height属性 或者给#layout使用固定高和宽。页面结构尽量简单。

8.float的div闭合;清除浮动;自适应高度;

①例如:<#div id=”floatA” ><#div id=”floatB” ><#div id=”NOTfloatC” >这里的NOTfloatC并不希望继续平移,而是希望往下排。(其中floatA、floatB的属性已经设置为float:left;)

这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。在 <#div class=”floatB”> <#div class=”NOTfloatC”>之间加上 <#div class=”clear”>这个div一定要注意位置,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。并且将clear这种样式定义为为如下即可: .clear{ clear:both;}

②作为外部 wrapper 的 div 不要定死高度,为了让高度能自动适应,要在wrapper里面加上overflow:hidden; 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。

例如某一个wrapper如下定义:

.colwrapper{ overflow:hidden; zoom:1; margin:5px auto;}

③对于排版,我们用得最多的css描述可能就是float:left.有的时候我们需要在n栏的float div后面做一个统一的背景,譬如:

<div id=”page”>

<div id=”left”></div>

<div id=”center”></div>

<div id=”right”></div>

</div>

比如我们要将page的背景设置成蓝色,以达到所有三栏的背景颜色是蓝色的目的,但是我们会发现随着left center right的向下拉长,而page居然保存高度不变,问题来了,原因在于page不是float属性,而我们的page由于要居中,不能设置成 float,所以我们应该这样解决

<div id=”page”>

<div id=”bg” style=”float:left;width:100%”>

<div id=”left”></div>

<div id=”center”></div>

<div id=”right”></div>

</div>

</div>

再嵌入一个float left而宽度是100%的DIV解决之

④万能float 闭合(非常重要!)

关于 clear float 的原理可参见 [How To Clear Floats Without Structural Markup],将以下代码加入Global CSS 中,给需要闭合的div加上 即可,屡试不爽.

/* Clear Fix */

.clearfix:after { content:”.”; display:block; height:0; clear:both; visibility:hidden; }

.clearfix { display:inline-block; }

/* Hide from IE Mac */

.clearfix {display:block;}

/* End hide from IE Mac */

/* end of clearfix */

或者这样设置:.hackbox{ display:table; //将对象作为块元素级的表格显示}

9.高度不适应

高度不适应是当内层对象的高度发生变化时外层高度不能自动进行调节,特别是当内层对象使用margin 或paddign 时。

例:

#box {background-color:#eee; }

#box p {margin-top: 20px;margin-bottom: 20px; text-align:center; }

<div id=”box”>

<p>p对象中的内容</p>

</div>

解决方法:在P对象上下各加2个空的div对象CSS代码:.1{height:0px;overflow:hidden;}或者为DIV加上border属性。

10 .IE6下为什么图片下有空隙产生

解决这个BUG的方法也有很多,可以是改变html的排版,或者设置img 为display:block 或者设置vertical-align 属性为vertical-align:top   bottom  middle  text-bottom 都可以解决.

11.如何对齐文本与文本输入框

加上 vertical-align:middle;

<style type=”text/css”>

<!–

input {

width:200px;

height:30px;

border:1px solid red;

vertical-align:middle;

}

–>

</style>

12.web标准中定义id与class有什么区别吗

一.web标准中是不容许重复ID的,比如 div id=”aa” 不容许重复2次,而class 定义的是类,理论上可以无限重复, 这样需要多次引用的定义便可以使用他.

二.属性的优先级问题

ID 的优先级要高于class,看上面的例子

三.方便JS等客户端脚本,如果在页面中要对某个对象进行脚本操作,那么可以给他定义一个ID,否则只能利用遍历页面元素加上指定特定属性来找到它,这是相对浪费时间资源,远远不如一个ID来得简单.

13. LI中内容超过长度后以省略号显示的方法

此方法适用与IE与OP浏览器

<style type=”text/css”>

<!–

li {

width:200px;

white-space:nowrap;

text-overflow:ellipsis;

-o-text-overflow:ellipsis;

overflow: hidden;

}

–>

</style>

14.为什么web标准中IE无法设置滚动条颜色了

解决办法是将body换成html

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd[/url]”>

<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />

<style type=”text/css”>

<!–

html {

scrollbar-face-color:#f6f6f6;

scrollbar-highlight-color:#fff;

scrollbar-shadow-color:#eeeeee;

scrollbar-3dlight-color:#eeeeee;

scrollbar-arrow-color:#000;

scrollbar-track-color:#fff;

scrollbar-darkshadow-color:#fff;

}

–>

</style>

15.为什么无法定义1px左右高度的容器

IE6下这个问题是因为默认的行高造成的,解决的方法也有很多,例如:overflow:hidden   zoom:0.08   line-height:1px

16.怎么样才能让层显示在FLASH之上呢

解决的办法是给FLASH设置透明

<param name=”wmode” value=”transparent” />

17.怎样使一个层垂直居中于浏览器中

这里我们使用百分比绝对定位,与外补丁负值的方法,负值的大小为其自身宽度高度除以二

<style type=”text/css”>

<!–

div {

position:absolute;

top:50%;

lef:50%;

margin:-100px 0 0 -100px;

width:200px;

height:200px;

border:1px solid red;

}

–>

</style>

FF与IE

1. Div居中问题

div设置 margin-left, margin-right 为 auto 时已经居中,IE 不行,IE需要设定body居中,首先在父级元素定义text-algin: center;这个的意思就是在父级元素内的内容居中。

2.链接(a标签)的边框与背景

a链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。

3.超链接访问过后hover样式就不出现的问题

被点击访问过的超链接样式不在具有hover和active了,很多人应该都遇到过这个问题,解决方法是改变CSS属性的排列顺序: L-V-H-A

Code:

<style type=”text/css”>

<!–

a:link {}

a:visited {}

a:hover {}

a:active {}

–>

</style>

4. 游标手指cursor

cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以

5.UL的padding与margin

ul标签在FF中默认是有padding值的,而在IE中只有margin默认有值,所以先定义 ul{margin:0;padding:0;}就能解决大部分问题

6. FORM标签

这个标签在IE中,将会自动margin一些边距,而在FF中margin则是0,因此,如果想显示一致,所以最好在css中指定margin和 padding,针对上面两个问题,我的css中一般首先都使用这样的样式ul,form{margin:0;padding:0;}给定义死了,所以后面就不会为这个头疼了.

7. BOX模型解释不一致问题

在FF和IE中的BOX模型解释不一致导致相差2px解决方法:div{margin:30px!important;margin:28px;} 注意这两个margin的顺序一定不能写反, important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}重复定义的话按照最后一个来执行,所以不可以只写margin:xx px!important;

#box{ width:600px; //for ie6.0- w\idth:500px; //for ff+ie6.0}

#box{ width:600px!important //for ff width:600px; //for ff+ie6.0 width /**/:500px; //for ie6.0-}

8.属性选择器(这个不能算是兼容,是隐藏css的一个bug)

p[id]{}div[id]{}

这个对于IE6.0和IE6.0以下的版本都隐藏,FF和OPera作用.属性选择器和子选择器还是有区别的,子选择器的范围从形式来说缩小了,属性选择器的范围比较大,如p[id]中,所有p标签中有id的都是同样式的.

9.最狠的手段 – !important;

如果实在没有办法解决一些细节问题,可以用这个方法.FF对于”!important”会自动优先解析,然而IE则会忽略.如下

.tabd1{

background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/

background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}

值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

10.IE,FF的默认值问题

或许你一直在抱怨为什么要专门为IE和FF写不同的CSS,为什么IE这样让人头疼,然后一边写css,一边咒骂那个可恶的M$ IE.其实对于css的标准支持方面,IE并没有我们想象的那么可恶,关键在于IE和FF的默认值不一样而已,掌握了这个技巧,你会发现写出兼容FF和 IE的css并不是那么困难,或许对于简单的css,你完全可以不用”!important”这个东西了。

我们都知道,浏览器在显示网页的时候,都会根据网页的css样式表来决定如何显示,但是我们在样式表中未必会将所有的元素都进行了具体的描述,当然也没有必要那么做,所以对于那些没有描述的属性,浏览器将采用内置默认的方式来进行显示,譬如文字,如果你没有在css中指定颜色,那么浏览器将采用黑色或者系统颜色来显示,div或者其他元素的背景,如果在css中没有被指定,浏览器则将其设置为白色或者透明,等等其他未定义的样式均如此。所以有很多东西出现 FF和IE显示不一样的根本原因在于它们的默认显示不一样,而这个默认样式该如何显示我知道在w3中有没有对应的标准来进行规定,因此对于这点也就别去怪罪IE了。

11.为什么FF下文本无法撑开容器的高度

标准浏览器中固定高度值的容器是不会象IE6里那样被撑开的,那我又想固定高度,又想能被撑开需要怎样设置呢?办法就是去掉height设置min- height:200px; 这里为了照顾不认识min-height的IE6 可以这样定义:

{

height:auto!important;

height:200px;

min-height:200px;

}

12.FireFox下如何使连续长字段自动换行

众所周知IE中直接使用 word-wrap:break-word 就可以了, FF中我们使用JS插入

的方法来解决

<style type=”text/css”>

<!–

div {

width:300px;

word-wrap:break-word;

border:1px solid red;

}

–>

</style>

<div id=”ff”>aaaaaaaaaaaaaaaaaaaaaaaaaaaa</div>

<scrīpt type=”text/javascrīpt”>

/* <![CDATA[ */

function toBreakWord(el, intLen){

var ōbj=document.getElementById(el);

var strContent=obj.innerHTML;

var strTemp=””;

while(strContent.length>intLen){

strTemp+=strContent.substr(0,intLen)+”

“;

strContent=strContent.substr(intLen,strContent.length);

}

strTemp+=”

“+strContent;

obj.innerHTML=strTemp;

}

if(document.getElementById && !document.all) toBreakWord(“ff”, 37);

/* ]]> */

</scrīpt>

13.为什么IE6下容器的宽度和FF解释不同呢

<?xml version=”1.0″ encoding=”gb2312″?>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd[/url]”>

<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />

<style type=”text/css”>

<!–

div {

cursor:pointer;

width:200px;

height:200px;

border:10px solid red

}

–>

</style>

<div ōnclick=”alert(this.offsetWidth)”>让FireFox与IE兼容</div>

问题的差别在于容器的整体宽度有没有将边框(border)的宽度算在其内,这里IE6解释为200PX ,而FF则解释为220PX,那究竟是怎么导致的问题呢?大家把容器顶部的xml去掉就会发现原来问题出在这,顶部的申明触发了IE的qurks mode,关于qurks mode、standards mode的相关知识,请参考:[url]http://www.microsoft.com/china/msdn/library/webservices[/url] /asp.net/

ASPNETusStan.mspx?mfr=true

IE6,IE7,FF

IE7.0出来了,对CSS的支持又有新问题。浏览器多了,网Bpx; /*For IE7 & IE6*/

_height:20px; /*For IE6*/

注意顺序。

这样也属于CSS HACK,不过没有上面这样简洁。

#example { color: #333; } /* Moz */

* html #example { color: #666; } /* IE6 */

*+html #example { color: #999; } /* IE7 */

第二种,是使用IE专用的条件注释

<!–其他浏览器 –>

<link rel=”stylesheet” type=”text/css” href=”css.css” />

<!–[if IE 7]>

<!– 适合于IE7 –>

<link rel=”stylesheet” type=”text/css” href=”ie7.css” />

<![endif]–>

<!–[if lte IE 6]>

<!– 适合于IE6及一下 –>

<link rel=”stylesheet” type=”text/css” href=”ie.css” />

<![endif]–>

第三种,css filter的办法,以下为经典从国外网站翻译过来的。.

新建一个css样式如下:

#item {

width: 200px;

height: 200px;

background: red;

}

新建一个div,并使用前面定义的css的样式:

<div id=”item”>some text here</div>

在body表现这里加入lang属性,中文为zh:

<body lang=”en”>

现在对div元素再定义一个样式:

*:lang(en) #item{

background:green !important;

}

这样做是为了用!important覆盖原来的css样式,由于:lang选择器ie7.0并不支持,所以对这句话不会有任何作用,于是也达到了 ie6.0下同样的效果,但是很不幸地的是,safari同样不支持此属性,所以需要加入以下css样式:

#item:empty {

background: green !important

}

:empty选择器为css3的规范,尽管safari并不支持此规范,但是还是会选择此元素,不管是否此元素存在,现在绿色会现在在除ie各版本以外的浏览器上。

对IE6和FF的兼容可以考虑以前的!important 个人比较喜欢用第一种,简洁,兼容性比较好。

08年小硕毕业至今,工作 快3年了。

一毕业就来了MySpace,虽然现在要被迫离开了,但还是非常感激,它让我学到了很多。且不提前两年,单说今年吧。

年初,开始独立负责推荐系统的开发,大大小小的功能开发了10+个,较大的有两个:博客分类推荐和协同过滤推荐,对于站内的pv贡献还是比较明显的。

同时,负责站内搜索的维护,sphinx+postgresql+各种脚本,对于搜索的精确度和排名规则不甚满意,本来提出一些优化方案,不过现在来不及做了。

还顺带修改了antispam系统的一个大bug,使之能够在linux下正常运行了,涉及到apache扩展+多线程+多进程+c。

还作为全站SEO的负责人,捎带着做了一些url rewrite、页面结构调整、用户体验、外链面的优化。

还顺手搭了个分词引擎,用的开源库:scws+ITCLAS,因为原先的分词引擎是买的,过期了。

经历了加薪,找到了自己感兴趣的方向:偏底层、算法层面。

然后就是很不幸的,公司结构要调整了,我失业了。带着今年的工作成果和前两年web开发的经验,面了4家公司,得到了一些肯定,但是做算法,貌似别人还嫌我经验不足,或者就压价,或者就建议我去做web开发。

本来也就想着,或者就从了吧?不过,这时,有个朋友建议我跟她一起去创业。

如果成功了,事业、名声、金钱就都有了。如果失败了,大不了明年底,回到起点,我再去找工作。

拼一把吧,婉拒了那几个offer,我要去拿很低的工资,要一点股份,搬到公司去住,投入100%的精力,就拿2011赌我的未来吧。

  • 别人找我技术入股,但是不用拿钱,合开公司注意什么?比如:公司经营不下了,我还需要赔钱吗?

你是按照技术入股的,你也只对你所承担的股份负责。 比如他投了100万,你的技术估价为100万,那么你就享有了百分之五十的股份,如果公司盈利,赚了10万块,那你可以得到5万德分红。 但是如果公司亏损,比如亏了50万,但公司的注册资本只有100万,你的技术不算入注册资金,你不需要赔钱,不过如果公司全部垮掉了,你的技术的专利权可能成为还债品,从而丧失专利的权利。

  • 合同中谈好,你入股是知识型投资,你不做法人,你没有经营责任。但为了维护你的权利,你要参与管理和了解销售信息(即可以维护你的权益又可以掌握产品的销售信息,便于提高对产品的开发和研究及进一步调整)
  • 你在公司的股份问题,还有就是你技术入股,这个技术的专利是属于你的还是公司的,你万一离开公司是退还股份还是把技术留给公司,因为这个技术入股是个比较抽象的概念,所以要看你开发的软件对市场而言的影响力有多大,要正确的评估你开发的软件,现在你的软件有没有开发成功,你前期投入了多少,最好找个律师咨询一下,免得日后有麻烦
  • 朋友建议,除了签订股份相关的合同,还需要签订劳动合同,因为我除了技术入股之外,还需要贡献我的劳动力,获取一定的工资。
  • 比如我拥有10%的股份,按几年发放到我手上,但是每年分红,我都是按照10%的比例来获取的。
我的疑问:
  • 比如公司今年赚了100w,拿出10w出来分红,那么我是获取100w*10%,还是10w*10%呢?
  • 需要签哪些合同呢?股东和法人的区别是什么?我需要承担的责任是哪些?
  • 技术入股的股权评定,我们应该是按照“协商作价方式”:

根据互动百科来看协商作价方式确定的技术价值其法律效力低于评估作价,而且还有可能出现出资人任意协商出资金额导致出资不实的情况以及技术出资人利用其他出资人对技术不熟的弱点而实行技术欺诈的行为。

  • 当有其他人注入资金等,成为股东,我的股权会不会有改变?
  • 我需要提供某些证明或者指标,以表明我能够以非专利的形式进行技术投资吗?
  • 我的股权,在我离开公司之后怎样处理?怎样可以转让?
  • 当公司负债,我是否需要出资?
  • 股份公司和有限责任公司有何区别?
技术入股的权益
  • 根据《公司法》第4条、第43条和第104条规定,原则上技术入股股东作为出资者按投入公司的资本额(包括技术出资额及其他出资额)享有资产受益、参与重大决策和选择管理者等权利。

从权利性质出发,技术入股股东权利系综合性权利,既有非财产权性质的表决权,亦有财产权性质的分取红利和公司终止时分配剩余财产的权利,性质上属于社员权,即社团法人成员所享有的权利,所以这种股权不是由一个出资者所独享的,而是由多数出资者所共享的(一人公司应视为是立法的例外状况)。

按公司法的理论,从权利行使目的出发,技术入股股东权利可以分为自益权和共益权。自益权是股东仅为了自己的利益而依法享有的权利。在我国,技术入股股东的自益权主要包括:分取红利的权利;新增资本时,优先认缴出资的权利;依法转让出资的权利;公司终止时,分配剩余财产的权利等。共益权是股东为了自己及其他人的利益而依法享有的权利。在我国,技术入股股东的共益权主要包括:出席股东会的权利;在股东会会议上,原则上接出资比例行使表决权;在技术入股型有限公司中,代表十分之一以上表决权的股东可以提议召开临时股东会的权利;在技术入股型股份公司中,持有公司股份百分之十以上的股东可以请求召开临时股东会的权利;股东有权查阅公司章程、股东(大)会会议记录、董事会会议决议、监事会会议决议和财务会计报告的权利;股东的诉讼权利,例如股东会或者股东大会、董事会的会议召集程序、表决方式违反法律、行政法规或者公司章程,或者决议内容违反公司章程的,股东可以自决议作出之日起六十日内,请求人民法院撤销。

  • 技术入股股东可以优先用其新开发的技术成果作价入股。
网上搜到的技术入股流程

1、有资质的资产评估机构对拟入股技术评估作价 ;

2、公司股东就技术入股达成协议 ,并将该技术折合的出资额写入章程;

3、办理公司设立或变更登记手续;

4、以技术入股者按照出资协议将技术之权利转移给公司。

关于以高新技术成果出资入股若干问题的规定
(1997年7月4日国家科委、国家工商行政管理局国科发政字326号)
第一条 为了规范以高新技术成果出资入股行为,促进高新技术产业的发展,根据《公司法》和其他法律、法规,制定本规定。
第二条 以高新技术成果向有限责任公司出资入股,适用本规定。
第三条 以高新技术成果出资入股,作价总金额可以超过公司注册资本的百分之二十,但不得超过百分之三十五。
第四条 出资入股的高新技术成果,应当符合下列条件:
(一)属于国家科委颁布的高新技术范围;
(二)为公司主营产品的核心技术;
(三)技术成果的出资者对该项技术合法享有出资入股的处分权利,保证公司对该项技术的财产权可以对抗任何第三人;
(四)已经通过国家科委或省级科技管理部门的认定。
第五条 科技管理部门在下列范围内认定高新技术:
(-)微电子科学和电子信息技术;
(二)空间科学和航空航天技术;
(三)光电科学和光机电一体化技术;
(四)生命科学和生物工程技术;
(五)材料科学和新材料技术;
(六)能源科学和新能源、高效节能技术;
(七)生态科学和环境保护技术;
(八)地球科学和海洋工程技术;
(九)基本物质科学和辐射技术;
(十)医药科学和生物医学工程;
(十一)其他在传统产业基础上应用的新工艺、新技术。
本高新技术范围将根据国内外高新技术的不断发展,由国家科委进行补充和修订。
第六条 以高新技术成果出资入股,成果出资者应当与其他出资者协议约定该项成果入股使用的范围、成果出资者对该项技术保留的权利范围,以及违约责任等。
第七条 出资入股的高新技术成果需由经工商行政管理机关登记注册的评估机构评估作价。国有资产评估结果依法需由有关行政主管部门进行确认的,还应办理确认手续。作价金额超过公司注册资本百分之二十的,需提交下列文件,报省级以上科技管理部门认定:
(一)技术成果出资申请书:载明技术成果的权利状态,使用权的出让情况及其实施效果;
(二)出资人对该项成果享有权利的证明文件,包括专利证书、软件登记证书、植物新品种登记证书、专利权受让合同、技术合同等有关法律文件;
(三)技术入股协议书,以及公司实施该项成果的立项批文或投产计划;
(四)技术成果价值评估报告和确认书;
(五)科技管理部门要求提供的其他文件。
第八条 经科技管理部门审查认定后,公司股东应就高新技术成果入股作价金额达成协议,并将该项技术成果及与之相当的出资额写入章程。
第九条 公司股东应当根据国家关于有限责任公司设立登记或变更登记的规定,持省级以上科技管理部门出具的有关高新技术成果出资入股的审查认定文件和其他文件,到工商行政管理机关办理公司设立登记或变更登记。
第十条 高新技术成果的出资者在公司成立后,应当根据出资协议,办理高新技术成果的权利转移手续,提供技术资料,并协助高新技术成果的应用实施。违反协议约定,不履行高新技术成果交付义务,或超出协议约定保留的技术成果权利范围使用该成果的,应当向其他出资者承担违约责任。
第十一条 高新技术成果出资入股的评估人员、有关审核和登记人员应当为出资者保守技术秘密和商业秘密。
第十二条 中外合资经营企业、中外合作经营企业中外双方以高新技术成果投资或提供合作条件的,适用本规定;高新技术成果应按出资期限一次性出资到位。
第十三条 具有法人资格的非公司制科技开发型企业以高新技术成果出资入股的,参照本规定执行。
第十四条 本规定由国家科委、国家工商行政管理局解释。
第十五条 本规定自印发之日起施行。
《关于以高新技术成果出资入股若干问题的规定》实施办法

(1998年5月7日科技部、国家工商行政管理局国科发政字171号)

第一条 为了做好高新技术审查认定工作,规范高新技术成果出资入股行为,根据《关于以高新技术成果出资入股若干问题的规定》(以下简称《规定》)第六条,制定本办法。

第二条 以高新技术成果出资入股,作价金额超过有限责任公司或科技开发型企业(以下统称企业)注册资本百分之二十的,由技术出资方或企业出资各方共同委托的代表,向科技管理部门提出高新技术成果审查认定申请,并按照《规定》和本办法要求,如实提交相关文件和资料。

第三条 科学技术部负责审查认定在国家工商行政管理局登记注册的企业;省、自治区、直辖市和计划单列市科技管理部门,负责审查认定在本辖区工商行政管理机关登记注册的企业。

第四条 审查认定高新技术,以《规定》第五条规定的技术范围为依据,具体参照科学技术部最新颁布的高新技术产品目录。

对于高新技术产品目录未能涵盖的高新技术成果,应当组织专家委员会审查认定,并将审查认定结果报科学技术部批准。

第五条 技术成果的出资者应当保证对该项技术合法拥有出资入股的权利,并在申请审查认定时按照本办法要求提交证明文件。

第六条 科技管理部门自接到全部文件之日起,两个月内作出审查认定决定。如发现所提交文件不符合规定,有权要求限期补交或修改,否则不予认定。

发生本办法第四条第二款情形的,省级科技管理部门审查同意后,应当在前款规定期限截止前二十天报科学技术部批准。

第七条科技管理部门对符合条件的高新技术成果,出具《出资入股高新技术成果认定书》(以下简称《认定书》);对不符合条件的,应将审查意见函告申请人。

《认定书》只适用于本次出资入股行为。

第八条企业出资者应当在收到《认定书》后三个月内,按照国家关于企业登记的有关规定,持科技管理部门的《认定书》和其他文件,到工商行政管理机关办理企业登记手续。逾期申请登记的,应当报审查认定机关确认原认定文件的效力或者另行报批。

第九条在高新技术成果申请审查过程中隐瞒真实情况、提供虚假材料或采取其他欺诈手段骗取高新技术认定书的,由审查认定机关撤消认定书,并通报企业登记机关,由登记机关责令企业改正,属于公司的,依据《公司登记管理条例》第五十九条予以处罚;属于非公司企业的,依据《企业法人登记管理条例实施细则》第

六十六条(二)项予以处罚。

第十条本办法由科学技术部、国家工商行政管理局解释。

第十一条本办法自发布之日起施行。

附件:一、出资入股高新技术成果审查认定申请材料要求

二、出资入股高新技术成果认定书范本

附件一

出资入股高新技术成果审查认定申请材料要求

一、设立或增资扩股企业的基本情况

企业的名称、地址、法定代表人,注册资本,经营范围等。

二、技术成果的基本情况

(一)技术成果名称、技术特征、所属技术领域;与同类技术相比所具有的技术优势和产业应用价值;

(二)简要说明技术成果的开发过程;

(三)该项技术过去的应用效果。

三、技术出资者对该技术的权利状态

(一)按照现行知识产权法律、法规规定,详细说明技术出资者对该技术成果拥有的权利,并提交相关证明文件。具体包括但不限于下列内容:

专利技术:提交专利证书复印件和最新缴纳年费记录;

计算机软件:提交软件著作权登记证书复印件;

非专利技术:提交对该项技术秘密合法享有出资权利的声明;

植物新品种:提交品种权证书复印件。

(二)技术出资者已经许可他人实施该项技术的,应说明对该项技术所保留的权利情况,并提交该项技术已向他人实施许可的合同文本复印件。出资者出资入股的技术为受让的技术成果,应提交技术受让合同文本复印件;属于国家法律法规要求必须公告或备案的,还应提交公告或备案记录。

四、技术出资入股有关情况

(一)新设或增资扩股企业实施该项技术的生产批文或投产计划;

(二)其他各出资者的名称、地址、法定代表人、联系电话、出

资额及在注册资本中所占比例;

(三)技术评估资料:提交评估机构资格证书复印件,评估报告书,国有资产评估结果确认书;

(四)出资协议和企业章程;

(五)中方以技术成果向中外合资、合作企业出资入股的,按照国家关于秘密技术审查规定提交相关文件。

有限责任公司章程范本(自然人组建)

此范例根据《公司法》的一般规定及公司的一般情况设计,仅供参考,起草章程时请根据公司自身情况作相应修改!

XX有限责任公司章程

为适应社会主义市场经济的要求,发展生产力,依据《中华人民共和国公司法》(以下简称《公司法》)及其他有关法律、行政法规的规定,由方共同出资设立XX有限公司(以下简称″公司″),特制定本章程。

第一章 公司名称和住所

第一条 公司名称:XX有限公司

第二条 公司住所:北京市XX区XX路XX号XX室

第二章 公司经营范围

第三条 公司经营范围:种植、养殖;农副产品开发研究;房地产信息咨询、自有房屋出租。

第三章 公司注册资本

第四条 公司注册资本:人民币50万元

公司增加或减少注册资本,必须召开股东会并由全体股东通过并作出决议。公司减少注册资本,还应当自作出决议之日起十日内通知债权人,并于三十日内在报纸上至少公告三次。公司变更注册资本应依法向登记机关办理变更登记手续。

第四章 股东的名称、出资方式、出资额

第五条 股东的姓名、出资方式及出资额如下:

股东姓名 身份证号码 出资方式 资额

股东-1 货币 人民币10万元

股东-2 货币 人民币10万元

股东-3 货币 人民币10万元

股东-4 货币 人民币10万元

股东-5 货币 人民币10万元

第六条 公司成立后,应向股东签发出资证明书。

第五章 股东的权利和义务

第七条 股东享有如下权利:

(1)参加或推选代表参加股东会并根据其出资份额享有表决权;

(2)了解公司经营状况和财务状况;

(3)选举和被选举为执行董事或监事;

(4)依照法律、法规和公司章程的规定获取股利并转让;

(5)优先购买其他股东转让的出资;

(6)优先购买公司新增的注册资本;

(7)公司终止后,依法分得公司的剩余财产;

(8)有权查阅股东会会议记录和公司财务报告;

第八条 股东承担以下义务:

(1) 遵守公司章程;

(2) 按期缴纳所认缴的出资;

(3) 依其所认缴的出资额承担公司的债务;

(4) 在公司办理登记注册手续后,股东不得抽回投资;

第六章 股东转让出资的条件

第九条 股东之间可以相互转让其全部或者部分出资。

第十条 股东转让出资由股东会讨论通过。股东向股东以外的人转让其出资时,必须经全体股东一致同意;不同意转让的股东应当购买该转让的出资,如果不购买该转让的出资,视为同意转让。

第十一条 股东依法转让其出资后,由公司将受让人的名称、住所以及受让的出资额记载于股东名册。

第七章 公司的机构及其产生办法、职权、议事规则

第十二条 股东会由全体股东组成,是公司的权力机构,行使下列职权:

(1)决定公司的经营方针和投资计划;

(2)选举和更换执行董事,决定有关执行董事的报酬事项;

(3)选举和更换由股东代表出任的监事,决定监事的报酬事项;

(4)审议批准执行董事的报告;

(5)审议批准监事的报告;

(6)审议批准公司的年度财务预算方案、决算方案;

(7)审议批准公司的利润分配方案和弥补亏损的方案;

(8)对公司增加或者减少注册资本作出决议;

(9)对股东向股东以外的人转让出资作出决议;

(10)对公司合并、分立、变更公司形式,解散和清算等事项作出决议;

(11)修改公司章程;

(12)聘任或解聘公司经理。

第十三条 股东会的首次会议由出资最多的股东召集和主持。

第十四条 东会会议由股东按照出资比例行使表决权。

第十五条 股东会会议分为定期会议和临时会议,并应当于会议召开十五日以前通知全体股东。定期会议应每半年召开一次,临时会议由代表四分之一以上表决权的股东或者监事提议方可召开。股东出席股东会议也可书面委托他人参加股东会议,行使委托书中载明的权利。

第十六条 股东会会议由执行董事召集并主持。执行董事因特殊原因不能履行职务时,由执行董事书面委托其他人召集并主持,被委托人全权履行执行董事的职权。

第十七条 会会议应对所议事项作出决议,决议应由全体股东表决通过,股东会应当对所议事项的决定作出会议纪录,出席会议的股东应当在会议记录上签名。

第十八条 不设董事会,设执行董事一人,执行董事为公司法定代表人,对公司股东会负责,由股东会选举产生。执行董事任期3年,任期届满,可连选连任。执行董事在任期届满前,股东会不得无故解除其职务。

第十九条 执行董事对股东会负责,行使下列职权:

(1)负责召集和主持股东会,检查股东会会议的落实情况,并向股东会报告工作;

(2)执行股东会决议;

(3)决定公司的经营计划和投资方案;

(4)制订公司的年度财务方案、决算方案;

(5)制订公司的利润分配方案和弥补亏损方案;

(6)制订公司增加或者减少注册资本的方案;

(7)拟订公司合并、分立、变更公司形式、解散的方案;

(8)决定公司内部管理机构的设置;

(9)提名公司经理人选,根据经理的提名,聘任或者解聘公司副经理,财务负责人,决定其报酬事项;

(10)制定公司的基本管理制度;

(11)代表公司签署有关文件;

(12)在发生战争、特大自然灾害等紧急情况下,对公司事务行使特别裁决权和处置权,但这类裁决权和处置权须符合公司利益,并在事后向股东会报告;

第二十条 公司设经理1名,由股东会聘任或解聘。经理对股东会负责,行使下列职权:

(1)主持公司的生产经营管理工作;

(2)组织实施公司年度经营计划和投资方案;

(3)拟定公司内部管理机构设置方案;

(4)拟定公司的基本管理制度;

(5)制定公司的具体规章;

(6)提请聘任或者解聘公司副经理,财务负责人;

(7)聘任或者解聘除应由执行董事聘任或者解聘以外的负责管理人员;

经理列席股东会会议。

第二十一条 公司设监事1人,由公司股东会选举产生。监事对股东会负责,监事任期每届3年,任期届满,可连选连任。

监事行使下列职权:

(1)检查公司财务;

(2对执行董事、经理行使公司职务时违反法律、法规或者公司章程的行为进行监督;

(3)当执行董事、经理的行为损害公司的利益时,要求执行董事、经理予以纠正;

(4)提议召开临时股东会;

监事列席股东会会议。

第二十二条 公司执行董事、经理、财务负责人不得兼任公司监事。

第八章 财务、会计、利润分配及劳动用工制度

第二十三条 公司应当依照法律、行政法规和国务院财政主管部门的规定建立本公司的财务、会计制度,并应在每一会计年度终了时制作财务会计报告,并应于第二年三月三十一日前送交各股东。

第二十四条 公司利润分配按照《公司法》及有关法律、法规,国务院财政主管部门的规定执行。

第二十五条 劳动用工制度按国家法律、法规及国务院劳动部门的有关规定执行。

第九章 公司的解散事由与清算办法

第二十六条 公司的营业期限为50年,从《企业法人营业执照》签发之日起计算。

第二十七条 公司有下列情形之一的,可以解散:

(1)公司章程规定的营业期限届满或者公司章程规定的其他解散事由出现时;

(2)股东会决议解散;

(3)因公司合并或者分立需要解散的;

(4)公司违反法律、行政法规被依法责令关闭的;

(5)因不可抗力事件致使公司无法继续经营时;

(6)宣告破产。

第二十八条 公司解散时,应依《公司法》的规定成立清算组对公司进行清算。清算结束后,清算组应当制作清算报告,报股东会或者有关主管机关确认,并报送公司登记机关,申请注销公司登记,公告公司终止。

第十章 股东认为需要规定的其他事项

第二十九条 公司根据需要或涉及公司登记事项变更的可修改公司章程,修改后的公司章程不得与法律、法规相抵触,修改公司章程应由全体股东表决通过。修改后的公司章程应送原公司登记机关备案,涉及变更登记事项的,同时应向公司登记机关做变更登记。

第三十条 公司章程的解释权属于股东会。

第三十一条 公司登记事项以公司登记机关核定的为准。

第三十二条 公司章程条款如与国家法律、法规相抵触的,以国家法律法规为准。

第三十三条 本章程经各方出资人共同订立,自公司设立之日起生效。

第三十四条 本章程一式七份,公司留存一份,并报公司登记机关备案一份。

全体股东签字(盖章):

200X年XX月XX日

function f($x){
        return pow($x,3)-$x+1;
}

function fd($x){
        return 3*pow($x, 2)-1;
}

function floatcmp($f, $target, $pre=0.001){
        if ((($f>=0 && $target>=0) || ($f<=0 && $target<=0)) && abs($f-$target)<$pre){
                return true;
        }
        return false;
}

$loop = 100;

$x0 = 1;

$x = $x0;

while($loop>0 && !floatcmp(f($x), 0)){
        $x = $x - f($x)/fd($x);

        printf("[%d] x = %f\n", $loop, $x);
        --$loop;
}

以上是针对f(x)=x3-x+1,使用newton’s method的代码。

参考的文档:http://www.ugrad.math.ubc.ca/coursedoc/math100/notes/approx/newton.html

经常用到的排序算法,大多是针对数组,即随机存储结构的,昨天突然被问到怎样对链表排序,答的有点混乱。

今天整理代码如下,先从最简单的冒泡排序开始:

 C |  copy code |? 
01
02
/* 冒泡排序 */
03
struct node{
04
        int v;
05
        struct node* next;
06
};
07
 
08
struct node* bob_sort(struct node* list){
09
        struct node *end = NULL, *last=NULL, *cur=list, *head=list, *tmp;
10
 
11
        while(head != end){
12
                while(cur && cur != end){
13
                        if (cur->next && cur->v > cur->next->v){ // exchange
14
                                if (!last){
15
                                        head = cur->next;
16
 
17
                                        cur->next = cur->next->next;
18
                                        head->next = cur;
19
 
20
                                        last = head;
21
                                } else {
22
                                        tmp = cur->next->next;
23
 
24
                                        last->next = cur->next;
25
 
26
                                        last = cur->next;
27
 
28
                                        cur->next->next = cur;
29
                                        cur->next = tmp;
30
                                }
31
                        } else {
32
                                last = cur;
33
                                cur = cur->next;
34
                        }
35
                }
36
 
37
 
38
                end = last;
39
                cur = head;
40
                last = NULL;
41
        }
42
 
43
        return head;
44
}
45
 
46
/* 插入排序 */
47
struct node* insert_sort(struct node* list){
48
        if (!list) return NULL;
49
 
50
        struct node *head=list, *tail=list, *cur=list->next, *l, *ll, *t;
51
 
52
        while(cur){
53
                if (tail->v <= cur->v){
54
                        tail = cur;
55
                        cur = cur->next;
56
                        continue;
57
                }
58
 
59
                t = cur->next;
60
 
61
                l=head, ll=NULL;
62
                while(l != tail && l->v <= cur->v){
63
                        ll = l;
64
                        l = l->next;
65
                }
66
                if (ll){
67
                        ll->next = cur;
68
                } else {
69
                        head = cur;
70
                }
71
                cur->next = l;
72
 
73
                cur = t;
74
        }
75
        tail->next = NULL;
76
 
77
        return head;
78
}
79

在这里做了3年,现在终于要走了,虽然很不舍。还是非常感谢这儿教给我的一切,无论是技术、工作态度、为人、沟通,让我完成了从学生到一个程序员的蜕变。

昨天面了一个很有趣的公司,有几道有意思的题目。

1、 两个很大的文件file1、file2,其中存储key-value对, 肯定无法读入到内存中的,怎样找出两个文件中重复的行(或者不同的行,一样,取反而已)?这题,面试官说,目前很多公司都在尝试,但是一直没有特别完美的解决方案,所以,它是一道算法题,更是一道开放题,主要考察的是思维方式。

我的回答是,利用B_tree,将文件按key分片,当分裂到足够下的之后,就可以将file1-tree和filte2-tree中具有相同前缀的行读入内存,然后利用常规的比较方法,进行抽取了。

2、 怎样检查一个链表中是否含有环?

这个利用两个指针,以不同步长前进,如果重合了,就是有环。

3、 找一个链表的最大值,至少比较多少次?n-1

找最大和最小值呢?普通算法,轮询两遍,是2(n-1)次;利用两个指针,则会使n/2 * (1+1+1)次。

找最大和次大值呢?利用树,这里可以参考竞标赛问题

4、 怎样判断一个链表中,是否有出现次数超过一半的元素?

score为正反方的实力积分,如果当前元素=上一个元素(save=上一个元素),则score++,否则score–;如果score归零了,则重新开始一轮,重置save为下一个元素。当轮询完毕,如果score<=0,则不存在这样的元素;否则重新轮询一遍,查看save值是否出现超过一半。

想象元素排列为:1,4,2,4,3,4,4。

2010-12-9

这两天又有遇到一些有趣的题目,记录下来。

1、怎样从100w个数里,随机取100个数?

准随机的方式有很多,比如在1-1w、1w-2w、……99w-100w每个区间里都取一个随机数,作为下标,然后读取即可。

再比如更泛一点的,随机取一个offset,然后取之后的一百个数。

但是,这些都不满足数学意义上的概念。为了保证这个概率,并且一定能取到100个数,需要依次读入100w个数,对于每个数,以 待取个数/剩余个数 为概率把它当成随机数取出;如果被当成随机数了,则代取个数–;剩余个数–。

2、怎样给链接排序?

一般排序的题目,考察的都是给数组排序,数组支持随机读写,而链表不支持。我写了个很烂的冒泡链表排序法。应该有更好的方式,比如如果不限制空间,可以将链表转化为数组等。