一点一滴,编程人生

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  69 随笔 :: 0 文章 :: 25 评论 :: 0 Trackbacks

2012年6月20日 #

今天为了这个问题了忙乎了一整天,特此记录下,希望对有遇到同样问题的同学有帮助。事情的经过是这样的,原先使用atomikos一直把数据源用jndi配置到tomcat的context.xml下,一直这么用没有出现问题,配置如下
    <Resource name="jdbc/cms" auth="Container"
        type
="com.atomikos.jdbc.AtomikosDataSourceBean" factory="com.atomikos.tomcat.EnhancedTomcatAtomikosBeanFactory"
        uniqueResourceName
="jdbc/cms" xaDataSourceClassName="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"
        xaProperties.URL
="xxxx"
        xaProperties.user
="xxxx" xaProperties.password="xxxx"
        xaProperties.pinGlobalTxToPhysicalConnection
="true" maxLifetime="60" poolSize="4" />

最近项目要迁移到maven下,所以把context.xml的数据源配置挪到了spring.xml下,配置如下
    <bean id="myDataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close">
       
<property name="uniqueResourceName" value="masterDB" />
       
<property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"/>  <!-- SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Hana]  -->  
       
<property name="poolSize" value="0" /> 
       
<property name="minPoolSize" value="0"/>    
       
<property name="maxPoolSize" value="9"/>    
       
<property name="borrowConnectionTimeout" value="60"/>    
       
<property name="reapTimeout" value="20"/>    
       
<property name="maxIdleTime" value="60"/>    
       
<property name="maintenanceInterval" value="60"/>    
       
<property name="loginTimeout" value="60"/>
       
<property name="xaProperties">  
            
<props>
                
<prop key="url">xxxx</prop>  
                
<prop key="user">xxxx</prop>
                
<prop key="password">xxxx</prop>
            
</props>
        
</property>  
    
</bean>
因为上面这个配置我是照搬网上的,所以觉得没有问题,可是项目启动后,用此数据源提交事务时确报以下错误:

Raised -5: invalid arguments were given for the XA operation 或 XAER_INVAL: Invalid arguments (or unsupported command)

一开始我以为maven配置的mysql-connector-java驱动版本不对,或是atomikos版本不对,可是不管如何换版本都不行,就快要疯了的时候,我看到了原先jndi方式中有这么一行代码
xaProperties.pinGlobalTxToPhysicalConnection="true"
就因为缺少上面这句话导致了问题,上网查资料,据说是mysql xa bug,有兴趣的可以看如下连接,最后配置如下:
       <property name="xaProperties">  
            
<props>
                
<prop key="pinGlobalTxToPhysicalConnection">true</prop>  <!-- mysql必须配置此参数,要不然无法提交事务 -->
                
<prop key="url">xxxx</prop>  
                
<prop key="user">xxx</prop>
                
<prop key="password">xxxx</prop>
            
</props>
        
</property> 



posted @ 2017-06-28 19:32 writegull 阅读(2439) | 评论 (0)编辑 收藏

事情描述:
本人在阿里云上创建了一个linux服务器,跑了一个自己的测试web项目。搭建了redis。想方便测试用,就没有对redis进行任何安全防护并暴露在了公网上。期间阿里云发现了此问题,还发短信提醒我,由于最近在公司一直加班也没有时间理会,没想到就在今天真的被黑了,事后心想多亏是个测试服务器,如果是正式环境,也真危险,这个黑客也没有停下脚步,通过redis强大的能力在/root/.ssh目录下面上传了公钥,彻底攻破了服务器,免密码登录服务器,一般黑客到这步也就看看有没有兴趣的数据,这个黑客一看这就是个没有价值的测试服务器,所以心一横,在我这上面装了个DDOS攻击软件,把我的机器当起肉鸡。

1.这就是黑完后留下的公钥/私钥,删除authorized_keys,id_rsa, id_rsa.pub这三个文件吧,除非还想让他继续黑下去。。。。


2.通过redis的key *命令可以看到有个叫crackit的key。这就是黑客在入侵后留下来的,原先set的值是公钥,入侵成功之后就改成这个了,把这个key也删除掉吧。


3.修改redis默认端口吧,不让黑客利用6379端口。在redis安装目录中,修改redis.config文件。修改完了别忘了重启redis服务,

# redis-server /etc/redis/redis.conf 开启

# redis-cli shutdown 关闭



4.重启后查看redis是否运行
ps -x | grep redis
5.通过指定端口访问redis。
redis-cli -p 6666

6.给redis设置密码或者干脆设置成只能内网访问

7.通过top命令发现了几个可疑的程序



8.minerd这个程序是个用来挖掘莱特币的,这个黑客看来干了不少坏事啊。。我们用命令 ps -ef|grep minerd 查找一下这个进程,杀掉这个进程kill -9 18267,并且去/tmp目录删除minerd目录


9.黑客在tmp目录留下了一个叫1.sh的脚本,是用来下载挖掘莱特币程序的。也把它kill掉吧。以下是脚本内容。


10.通过cat /etc/passwd命令可以看到有一个叫作syss的非法用户,权限还很高,跟root一样,删掉他吧,这是黑客入侵后方便进入的。使用命令userdel -f syss 强制删除一个用户,哪怕他正在登录。


11.去/mnt目录上,可以看到黑客挂载了很多程序,删除他们吧。


12.通过nethogs软件可以按进程实时统计网络带宽利用率,这个用来看是否存在DDOS攻击最好不过了。

13.暂时解决对外DDOS攻击,最快的办法就是用防火墙,这个阿里云提供的脚本帮了大忙。直接上传到服务器上,运行一下世界就清静了。下载地址:
https://help.aliyun.com/knowledge_detail/5973920.html?spm=5176.7618386.5.1.H8H33f

 
posted @ 2015-12-15 01:13 writegull 阅读(4108) | 评论 (4)编辑 收藏

今天在修改server.xml调试程序时,遇到下面这个问题,clean,重启都不好使。

                Removing obsolete files from server..
               Could not clean server of obsolete files: null
                java.lang.NullPointerException
解决方法是把.metadata\.plugins\org.eclipse.wst.server.core这个目录下面的tmp0删除掉,再clean下就可以了。可能是缓存问题。
posted @ 2015-01-03 16:58 writegull 阅读(7267) | 评论 (0)编辑 收藏

有时候需要手动地去禁用一个uibutton,使用button.enabled = NO的时候虽然能够达到目的但也会带来副作用,那就是按钮变的半透明了。有时候应用不需要这种副作用,可以尝试使用button.userInteractionEnabled = NO来达到这个目的,在禁用按钮的同时也不会使得按钮变得半透明。
posted @ 2013-12-23 10:29 writegull 阅读(588) | 评论 (0)编辑 收藏

装win8后发现cpu占用率50%-60%,而且磁盘疯狂读写,是com surrogate这个程序,还有几个服务造成的,之后我把com surrogate结束进程了cpu使用率直接降低到10%以下,我就郁闷了。
解决方案:
1,在“更多电脑设置”那里的“用户”改为“本地用户”。
2,“离开”家庭组(一般都是它的原因)
3,“同步设置”关
4,一般“共享”什么的不到需要都是“关”的状态。
5,做完以上几点都不行,就真帮不了你了。
posted @ 2013-03-18 22:47 writegull 阅读(389) | 评论 (0)编辑 收藏

这个问题似乎只有在手动改变系统状态栏级别的情况才会出现

例如:self.window.windowLevel = UIWindowLevelStatusBar+1;

这样设置的话相当于影响了弹出短信或邮件控制器页面window的级别,所以造成不显示键盘问题(不过此问题在ios6以下没有)

解决方法:在当前视图控制器中加入下面的代码,即可解决

- (void) viewDidAppear:(BOOL)animated {

    [super viewDidAppear:animated];

    self.window.windowLevel = UIWindowLevelNormal;

}

posted @ 2012-10-30 21:08 writegull 阅读(1561) | 评论 (1)编辑 收藏

原文地址:http://blog.csdn.net/pjk1129/article/details/7255163

最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Framework。在Xcode上没有找到允许编译,如同Android上的*.so和Win32上的dll这样的说法。不过Framework这样的框架,估计也是类似动态库的实现,不过没有具体研究过,后续继续深入研究。

我这个文档的静态库的开发是基于Xcode4.2和iOS SDK5.0编写的。Xcode4跟之前的Xcode3还是有不少的差别的。

下面就简单写一个静态库和一个调用静态库的例子。

静态库的编写:

1.静态库工程的建立:

Xcode New一个新的project,选择IOS下面的Framework&Library,下面有一个Cocoa Touch Static Library。直接next去建立一个Print这样的工程。


2.工程建立

我们添加很简单的"- (void)printA;"和"+ (void)printB;"的方法,这个方法的实现也是很简单的,在*.m文件中的实现就是一个"NSLog(@“”);"这样我们编译出来的libstaticlib就可以被其他的IOS工程进行调用了。这块注意一下,目前我们的Print->iOS Device



3.编译前准备

这里分release与debug版本,需要设置一下


4.OK,编译

我们可以在Products下面找到我们编译生成的libstaticlib.a这个文件。

注意未编译前为红色:左                             编译后为黑色: 右

       

5.ok

在右边 这个文件上右键Open In Finder。这时候我们打开了一个文件夹,里面有一个libPrint.a。后面我们继续编写一个调用这个libPrint.a的App。但是这个App在编译时候会出错,通过这个错误的解决,说明Xcode的一些编译相关的东西。这里,我们在command下面根据路径找到这个文件,用这个非常重要的命令查看一下这个lib的信息!

打开终端写入如下命令:这是什么?这就是所在的路径 

以下均是在自己的mac上的路径。你需要将/Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/ 替换成你的路径。

cd /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/  

我们手动打开这个路径:可以看到如下信息:Release-iphoneos


这个是给真机用的,那我们要给模拟器和真机封装的静态库应该都能用才好。这个下面介绍!!!!!  


然后再在终端 打开这个文件:cd /Users/user/Library/Developer/Xcode/DerivedData/UItab-dbvoszbzpavyglaboxgflvrnzfce/Build/Products/Debug-iphoneos

命令是:lipo -info libPrint.a,可以看到显示的结果是:Arch是  Arm7。下面我会具体介绍一下。


6.建立一个调用这个libPrint.a的应用

应用就很简单了,我们添加刚才libPrint.a的*.h文件。 然后在这个工程的Build Phases的Link Binary With Library里面添加我们刚才拷贝出来的那个libPrint.a。



7.插入了h和a文件后

我们就可以在control里面调用这个libPrint.a 函数了。

#import "AstroDiskAppDelegate.h"

#import "Print.h"


@implementation AstroDiskAppDelegate


@synthesize window = _window;


- (void)dealloc

{

    [_window release];

    [_viewController release];

    [super dealloc];

}


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    

    //调用libPrint.a

    [Print printB];

    Print  *print = [[[Print alloc] init] autorelease];

    [print printA];


    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

    [self.window makeKeyAndVisible];

    return YES;

}


8.OK,编译运行这个应用程序。

编译出现错误了。这个就是这篇文档的关键了。主要就是为了介绍编译静态库相关的东西。



9.可以看到undefine symbols for architecture i386这样的错误。

其实这个错误原因很简单,就是因为,我们用错了编译出来的libUITab.a lib,在模拟器里面,我们需要的是基于i386构架编译的static lib,但是这个a文件,大家还记得前面说的arm6 arm7构架的么。这个a其实是在iphone这个arm构架上运行的代码。其实show in finder指向的是一个ios device的库,并不是i386模拟器下的库。那如何编译i386的库呢?看见第二张图片的Print>IOS Device了么?我们将这个iOS Device修改成iPhone5.0 Simulator。在进行编译,这样就可以编译出i386下面的库。这个时候我们show in finder打开的文件夹还是ios device下的库。我们最好自己去那个目录下看一下。这里我们用command去查看了一下目录情况,如下:可以看到一个iphoneos的目录和一个simulator的目录。


然后我们再看看这个目录与第4条所示的目录有什么不同! 同样也有一个libPrint.a文件。



10.错误原因分析

Release-iphoneos里面的是基于arm6 arm7编译出来的库文件。Release-iphonesimulator文件夹下面的是基于i386编译出来的文件。

11.合并.a文件,制作通用静态库

这二个库一个是用于真机运行的一个是用于模拟器运行的.其实我们可以利用lipo将这二个文件打包成一个通用的a文件。命令如下:

/Users/user/Library/Developer/Xcode/DerivedData/UITab-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products替换成你的路径。 

/Users/user/Desktop/libPrint.a替换成合并后的路径。 

lipo -create /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphonesimulator/libPrint.a  /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphoneos/libPrint.a  -output /Users/pjk1129/Desktop/libPrint.a


12.打包以后的库文件,我们查看信息

然后打入如下命令:lipo -info /Users/pjk1129/Desktop/libPrint.a 

可以看到如下信息:


如上,你已经看到了,它具备了i386和arm7的条件。 现在我们这个静态库,支持的构架已经是armv7 i386了。


13.ok,经过上述步骤后

这个通用库生成后,我们将原来,调用这个库进行替换一下,在进行编译,成功编译,运行结果如下所示:


posted @ 2012-10-09 18:14 writegull 阅读(634) | 评论 (0)编辑 收藏

three20 wiki 地址:https://github.com/facebook/three20/wiki/Debugging

You can use Three20's debugging facilities instead of NSLog() / assert(). This would give you an ability to turn off debugging messages without commenting out all NSLog's, sort log messages by importance (errorwarninginfo).

Turn on debugging(打开调试)

These instructions are for Xcode 3:

  • Right-click on project, choose "Get Info".
  • In the "Build" tab, choose "Configuration => Debug" (you probably want to enable this only for debug builds)
  • While in the "Build" tab, search for "Preprocessor Macros" under the "GCC 4.2 - Preprocessing" section.
    • Add a declaration that reads DEBUG. That way you enable debugging in general.
    • Add a declaration that reads TTMAXLOGLEVEL=TTLOGLEVEL_INFO. By doing this, you set the default debugging output to beTTLOGLEVEL_INFO, the most descriptive one.

Debugging preprocessor macro

Use debugging

Logging

Use these instead of NSLog(). Which level gets printed to the console and which doesn't depends on what's set in preprocessor macros asTTMAXLOGLEVEL (see above).

TTDERROR(text, ...)    // Log level 1 TTDWARNING(text, ...)  // Log level 3 TTDINFO(text, ...)     // Log level 5 TTDPRINT(text, ...) 

Example

If I got this in AppDelegate.m of my project HelloWorld:

- (void)applicationDidFinishLaunching:(UIApplication *)application {	     TTDINFO(@"Hello!"); } 

...the console output would look like this:

2010-05-15 01:04:20.107 HelloWorld[65222:207] -[AppDelegate applicationDidFinishLaunching:](22): Hello! 

Conditional logging

This is a type of logging facility which only outputs something if a particular condition is met:

TTDCONDITIONLOG(condition, text, ...); 

Example

TTDCONDITIONLOG(TTDFLAG_URLREQUEST, @"Request parameters: %@", request.parameters); 

Debug-only assertions

Three20 also provides support for assertions which only work in the debug build.

TTDASSERT(condition_which_would_lead_to_application_termination_when_true); 

Example

// Not that implementing safeAddSubview: is a good idea - (void)safeAddSubview:(UIView*)view {     TTDASSERT(nil != view);     if (nil == view) {         return;     }     [self addSubview:view]; } 

See also

Links

posted @ 2012-09-27 10:30 writegull 阅读(395) | 评论 (0)编辑 收藏

翻译:http://www.joshsunshine.me.uk/2012/02/29/ios-development-remove-old-notifications-from-notification-center.html

不逐字翻译了,只是大体说一下。
看作者的意思,应该是他经常收到N多通知,而通过其中一条通知打开一个app以后,发现那个app的其它通知还在通知中心。作者不喜欢这样的情况。我以为我也存在的这样的情况,马上检查了一下,发现没有。看来是少数app的问题。但是也记录一下。作者总结的从通知中心移除通知的三种方法:
1.将app的BadgeNumber设为0,就是app图标右上角那个

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];


2.如果BadgeNumber本身就是0的情况,可以先将其设1再设置成0

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

3.如果以上的办法都不好使的话,那就用本地通知欺骗一下。

UIApplication* application = [UIApplication sharedApplication];
NSArray* scheduledNotifications = [NSArray arrayWithArray:application.scheduledLocalNotifications];
application.scheduledLocalNotifications = scheduledNotifications;

就这么多了,我仔细想了一下,为什么我的应用从其中一条通知打开的时候,其它的通知消失掉:
因为我在程序启动的时候就执行了第一条:)

posted @ 2012-09-14 17:51 writegull 阅读(2745) | 评论 (0)编辑 收藏

使用MFMessageComposeViewController 编写发短信模块时界面是英文的情况下,用下面的方法可以解决问题

在plist里面Localization native development region 选择 china ,然后Localized resources can be mixed 选 YES,如果没有Localized resources can be mixed,需手动添加
posted @ 2012-09-10 18:12 writegull 阅读(693) | 评论 (0)编辑 收藏

1.图标的圆角效果是系统自动加上的。

2.光晕效果虽然也是系统加上的,但可以通过程序中设置参数来去掉内建光晕效果。

方法:在info.plist里面添加一条记录UIPrerenderedIcon,新版的XCODE 会自动识别为Icon already includes gloss effects 打上勾就OK了。如果没有识别的右边栏写上YES就可以

posted @ 2012-07-31 14:06 writegull 阅读(620) | 评论 (0)编辑 收藏

     摘要:   阅读全文
posted @ 2012-07-25 11:14 writegull 阅读(1958) | 评论 (1)编辑 收藏

原文地址:http://blog.itotem.com.cn/?p=22

- alloc, copy, retain会把引用计数+1

- release会把引用计数-1

- 局部变量如果初始化时不是autorelease的,要及时调用release释放,并且赋值为nil否则引用仍然存在导致下次无法用nil做是否有值的判断

- 实例变量要在每次赋值时要先释放当前引用的对象再赋值,并retain一下保证引用计数为1

- 对于有retain参数的property,直接使用”.”赋值时系统会自动释放当前引用对象再赋值,并自动retain一下

- dealloc中要对所有实例变量调用release,对于有retain参数的property只需要调用self.theProperty = nil即可,系统会去做释放

- delegate的property通常设为assign,如果设为retain的话会有循环引用的问题,比如aView.delegate = self时会把self retain一下,在aView的dealloc中会把delegate release,但是由于self的引用永远不会小于1,所以导致aView和self的dealloc永远都不会被执行,都永远驻留内存造成泄露。所以如果要设为retain的话一定要确保不会造成循环引用问题。

- 在UIViewController中的viewDidUnload中要释放掉局部变量,调用release并设为nil,有时系统收到内存警告时会自动调用这个函数来释放一些内存空间

- 系统内存警告的回调中要释放掉内存中的缓存和其他可释放的东西,以免造成crash

- 使用UITableView时要把cell设置为重用的,并且要确保确实写得是重用的,有的人写完的结果相当于还是每次都重建cell,导致效率低下

- 使用UIScrollView时要自己控制释放掉目前不显示的内容,尤其是图片,考虑图片大小和浏览效果可以加载当前显示页两边的3-5页内容

- 图片需要做缓存,尤其是本地文件系统缓存,可以放到Library/Cache目录中,这个目录系统有专用的常量来获取,比如:

这里是一个小例子阐释前几条基本原则:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
- (void)aFunction{
//创建一个局部变量view
UIView *view = [[UIView alloc] init];
// 赋值给实例变量theView
[theView release]; //先释放一下当前引用的变量
theView = [view retain]; //给实例变量赋值时需要retain一下
// 如果theView是一个有retain属性的property
self.theView = view; //不需要先释放,也不需要调用retain,系统会自动做,所以一定不能这样写self.view = [[UIView alloc] init];,这样的话创建的view会被retain两次,造成泄露,对于这种可以先创建一个局部变量,给self.view赋值后再释放
[view release]; //要及时释放局部变量
}
- (void)dealloc{
//释放局部变量
[theView release];
//如果theView是一个有retain属性的property,也可以这样写
self.theView = nil;
[super dealloc];
}
posted @ 2012-07-05 17:05 writegull 阅读(1226) | 评论 (1)编辑 收藏

今天测试程序时发现一个奇怪的现象,我在关于页面中想显示图片icon文件,可是怎么调试都不显示。后来加载其它图片则显示正常。

我分析原因是苹果对程序访问icon文件做了限制,所以不能正常显示

解决方案:把icon文件复制一份,改成其它名字,加载改名字的文件,问题成功解决!
posted @ 2012-06-26 16:10 writegull 阅读(346) | 评论 (0)编辑 收藏

今天开发中使用字符串分割函数split(),发现:
        String s = "upload/20120416135915265.sql";
        System.out.println(s.split("."));
输出的并不是想要的结果,之后输出:
        System.out.println(s.split(".").length);
结果竟然是0!!!
突然想到转义字符,于是:  
        System.out.println(s.split("\\."));
OK啦!!!
原来在java中函数split(".")必须是是split("\\.")。
posted @ 2012-06-24 09:27 writegull 阅读(31359) | 评论 (4)编辑 收藏

感谢蚊帐的投递
新闻来源:伯乐在线
很多人表面上看着老实巴交的,实际上内心比谁都好强、自负、虚荣、甚至阴险。工作中见的多了,也就习惯了。有一些人,什么事都写在脸上,表面上经常得罪人,甚至让人讨厌。但是他们所表现的又未必不是真性情。

我相信大多数人都看过《豪门夜宴》这部香港老电影。张学友、梁朝伟演的拍马屁的场景太有意思了,其中有这样一段:当两马屁精帮老板说出主意,老板马上叫 停,然后拍一下脑门:“哦。。。我想到了。。。”,把别人的idea当成自己的说出来。我在工作中还真不止一次遇到这种事,我提出来的想法老被别人拿来当 作自己的原创,当然个别小偷洋洋得意的描述自己的‘原创’时还会偷偷的瞄我一下,看我有没有不高兴,,,我并没有不高兴,大概是因为想到那个电影段子被逗 乐了。天下学术都一大抄,更何况什么想法,什么创新,通通都是浮云!

君不见创新项目一大堆,都被抄死化成灰
! 但是不能因此而放弃创新,大地不可以因为有畜牲吃草而不复生机,山泉也不会因为有王八偷水而不冒活水。第一点:保持有一颗生机灵动的心。因为这个东西是别 人偷不走的,也是最大的财富。如果你不俱备这个东西,那么请用一颗善心去培养它。人人都是耀眼的珍珠,只是被灰尘蒙蔽了眼。

记得刚进公司那会踏踏实实工作,满怀激情。不过第一周就把自己的顶头上司给得罪了,我并没有做错什么,记得当时还有同事帮我说话,后来慢慢发现他是一个相 当自负的人。不过话说回来搞技术的在技术方面有几个不自负。这次事之后我并没有学乖。对于别人设计不合理的地方,我会指出来,并提出该如何做。对于语言基 础薄弱,设计模式薄弱的同事,我会好心推荐一些书籍,,,,,,本是好心帮助别人,却并没有得到别人的感激。相反,大部分会觉得你看不起他们,更有甚者不但不会反思改进自己的弱点,反而打击报复看不起他的人。所以千万请记住第二点:不可以随便提意见。特别是新人,请务必保持低调。这一点在日常生活中同样实用。

与第二点相对,第三点:经常肯定、称赞同事的成果和进步。注意这里并不是要你去巴结讨好。常常看到别人的优点并加以肯定也是比较正面和必要的行为。这样不但可以增进关系,更重要的是可以鼓励别人。

我一直认为一个人没有自知之明就等同于垃圾。要随时随地知道自己小名叫什么。话说我有一位同事,基础相当薄弱,但又太爱去表现自己,经常到处指指点点,生怕别人不知道自己是“高手”。由于老开“黄腔”常被人背后偷笑而不自知。

第四点:低调一些,谦虚一些不断提高自己的实力。进公司时所在部门是刚成立的,工作一段时间后,我发现由于部门团队开发的特殊性很有必要在公司通用编码规范基础上再制定内部的编码和设计规范,于是向上司 提了我的想法,他同意了。于是我起草了一个内部规范手册。但是执行过程中,有人按手册来,有人不按手册来。产生这种局面的根本原因是上司并没有支持。

在这 里没有必要分析原因,直接给出要记住的第五点:不在其位,不言其事。做好本职工作就好。无论在什么地方,开明而大度的好上司并不多,所以这一点相当重要。

经常在开会讨论设计方案的时候,会发现一个非常有意思的事情。会议本来进行的正常而和谐,当轮到某个优秀的人上去讲的时候,气氛一下子不和谐了。大家都迫 不及待的想挑出他的毛病,就算没理解别人的意思也会乱说一气。秀才遇到兵了,,,,,,以前实习的公司中也时常见到这种情况。每当此时我都会在下面感叹: 好一幅百鸟凤图。请记住第六点:木秀于林风必摧之,要懂得韬光养晦,不要时时锋芒毕露

公司里有个老员工,实力比较强,算是一个独挡一面的人。不过在一次部门改组中并没有得到提升,被提升为经理的反而是一个能力不算太强,还比他晚来的人。在此之前我听到过那个老员工在和其它公司接触并准备跳槽的传闻。第七点:不到最后一刻,自己离职的想法不可以和公司内部任何人分享。因 为站在公司的角度来看你已经不忠诚了,不愿意重用你了。但是在员工自己的立场来看,公司给的待遇与能力不成正比、不认同公司的文化、想换个环境、想要一个 更好的发展机会,这些都是合情合理的。我个人发现一个规律:在一般的公司里,凡是坚持到最后经受住了“考验”的“忠诚”者,往往都是没什么能力的庸才。如 果你是一个公司高层管理者,那么你会如何对待类似的“叛徒”呢?

第八点:不得罪办公室里的女人。此处女人定义如下:(1)国宝级的女程序员; (2)女测试,这个不稀罕 ;(3)女助理,到处都是;(4)女上司,这个最要命!   男的处在一起,有什么冲突矛盾吵吵过了就忘了。但女的不一样,一不小心就得罪了,后边一逮到机会就会摆你一道,还没完没了!最要命的是:背地里狠狠的阴 你,而当着面表现得像你温馨的亲人。

我们研发中心有个领导很可爱,不太清楚上面给他灌了什么迷魂汤,以至于自己职位被降了,职权被销了很大一部分,还整天手舞足蹈高兴得很。事后一两个月才反 应过来不对劲,然后整天愁眉苦脸、、、、、、以这种交际反应的速度,被撤是必然的事情,确实不适合搞管理。技术男大多脑袋是‘方’的,不太善与处理人际关 系。第九点:加强交际能力。程序员大多还算是聪明的,平常稍稍注意一下就没什么大问题。不过不要自我感觉良好,我们公司有个工作了十多年的IT男,几年前就开始被派除去和客户沟通,丫的,至今那一口吞吞吐吐的蹩脚的普通话让人听了就伤心。

第十点:若无特殊情况,一定不要跨级汇报。这一点 细节很重要。某种意义上你的顶头上司就是你的老板,直接决定了你的发展,你就是他手下的兵。并不是谁官大就听谁的,要不然历史上那么多兵变都不可能成功, 因为大家都只听皇帝的,呵呵。从另一个方面讲,你‘忠于’你上司的上司,他也不敢用你,因为谁知道提拔你之后,你会不会再越一次级?!!

第十一点:要善于向上司汇报工作。国家干部是不是 人民的公仆本人不太清楚。但公司里那些大大小小的管理者一定是(如果不是这样那他就不是一个好上司)!那群夹板男,看着是个官,其实过得很苦。既要应付好 上面的领导,又要充分调动下面群众做出业绩,整天搞得焦头烂额。上面的唱白脸,那么夹板男就唱黑脸。总之挺不容易。他们的猜疑心很重!时常会怀疑下面的人 没尽心工作。虽然一般公司都有什么任务分配管理系统,但是那东西远远不够。你需要找准时机让他清楚你工作进展,你所做出的努力。

第十二点:不要轻易造成情绪污染。不要因为你一个人不高兴,而让别人都看你的脸色。要学会雪藏自己的情绪。你若是一个领导,那这一点就太要紧了。

第十三点:一举一动找准自己的位置、别人的位置。比如:吃饭时的座次,照相时的排列位置,群发邮件时收件人的排名顺序,文档作者的位置顺序、、、、、、这些都很重要。《易经》中有讲:明相位,立德业。要是你连自己在哪儿都不知道,你又如何到得了目的地。

第十四点:没有必要做一个愤青。刚毕业那会,我很愤青,看不惯这看不惯那。但是又能怎么样呢?弱肉强食的本质从来没有改变过,你要学会尝试去理解这个社会,理解种种关系。到某个时候你会发现:一切理所当然。你若真的不满意某个现状,那么就去尽自己的能力去改变它。势者,不均也!均则无势。

第十五点:记住别人的善,忘记别人的恶。一个人心 里不应该有太多仇恨,仇恨是别人扔给你的垃圾,你又不是垃圾桶,老装着它做什么?在公司当算法工程师近三年了,别人怎么对我,我的心里跟明镜似的一清二 楚。对我不好的人我并没太在意,更别说去报复。相反,他们有事要我帮忙的时候,我总能真心实意的去帮,甚至主动帮忙解决问题。这是这几年来,我对自己唯一 满意的一点。我相信一句话:活着就是修行。但是你得清楚你修的是善行还是恶行。

毕业三年了,看看走过的路,总觉的有点荒凉。确实真正明白了许多道理。感谢帮助过我的人,也感谢打击过我的人。也许一个人只有亲身经历了困难才可能真正成长起来,由此我不得不感叹造化的残酷。

posted @ 2012-06-20 10:03 writegull 阅读(209) | 评论 (0)编辑 收藏