`
tcspecial
  • 浏览: 896196 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
文章列表
  python 调用c除了swig,python/c api方式外,还可以通过ctypes模块动态加载dll/so,不需要编写绑定。   C接口: int Set(char *key, char *val); int Get(char *key, char *val, int *len);   python 调用: import ctypes #加载以C方式导出的动态库 API = ctypes.CDLL('./libtest.so') iRet = API.Set('hello112' , 'world-111') print iRet #传递动态缓冲区 ...

lua 调用C

    博客分类:
  • OS
   Lua 下通过虚拟栈传递参数,只要注册相应接口便可调用C函数。   #include "lua.h" // v5.1.5 #include "lualib.h" #include "lauxlib.h" // 原生函数 int ShowVal(const char *szReq, int &score); // 包装函数 int GetScore(lua_State *env) { int count = lua_gettop(env); if (count != 1) ...

crtp

   C++ 中可通过虚函数实现运行时多态,还可以实现更高效的静态多态。  通过把派生类作为基类的模板参数来实现,该方式称为CRTP(Curious Recurring Template Pattern)。 #include <iostream> using namespace std; // 中间类 template <class T> class BaseClass { public: // 强转,调用指定对象方法 void Func(){ static_cast<T&>(*this).funcImpl() ...
   之前编码一直用的是iter++,同事说该方式效率比较低。带着疑惑看STL源码:   // vector _Myiter& operator++() { // preincrement ++*(_Mybase *)this; return (*this); } _Myiter operator++(int) { // postincrement _Myiter _Tmp = *this; ++*this; return (_Tmp); }   果不其然,++iter 前向表达式返回引用,而iter++返回的却是一临时对象。 ...
  面试中经常遇到类似多态,虚继承,RTTI,dynamic_cast实现原理之类的问题,这块需要对C++底层内存模型比较理解。C++由于没有存储对象元信息(java反射基础),要支持多态,多继承特性,导致C++对象内存模型异常复杂。   一. 继承内存模型   1. 基类 struct B { long b; virtual void foo(){} virtual void bar(){} };   gcc的-fdump-class-hierarchy选项,它可以用于输出C++程序的虚表结构 g++ -fdump-class-hiera ...

Scada 使用二

    博客分类:
  • java
  1. var & val var 变量,可变 val 类似常量,不可变   2. map/reduce val list = List(1,2,3,4,5,6) list.map( f => println(s"val: $f") ) // val:1 xxx val:6 val sum = list.reduce( (sum, n) => sum+n ) // 21   3. 泛型 scala泛型设计太过复杂,泛型支持多个奇怪的操作符,如:<: >: <%  T:class T:Ordering   ...

Scala 使用

    博客分类:
  • java
一. 安装环境 wget https://downloads.lightbend.com/scala/2.12.6/scala-2.12.6.tgz vi ~/.bash_profile export PATH=$SCALA_HOME/bin:$PATH   二. 运行 Scala是解释性JVM语言,编译后会生成*.class。也可在交互式CLI上编码。 ling-Pro:~ sun$ scala Welcome to Scala 2.12.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_102). scala> ...
  一. 查看VM实例名称 test@cloudshell:~ (test-206504)$ whoami test   二. 本地生成密钥对 $ cd ~/.ssh $ ssh-keygen -f cloudkey #设置密码    修改公钥用户名 cat cloudkey.pub  ssh-rsa AAAAB3NzaC1yc2EAAAABIwAxxxGVBvsDfN9gyQDFXJtZjSaH3afh0YDn9v5k30xBH7meH6l+SbEZ3NHZpQ== sun@localhost sun@localhost 改为 sun@test   三. 导入 ...
  观察者模式在对象间定义一对多的依赖,当一个对象改变状态,依赖它的对象都会收到通知。 类图:   一. java swing swing 注册事件监听器过程,就是观察者模式。 // 注册监听事件 button.addActionListener( new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { System.out.println("Hello"); } });    源码跟踪: listenerList.add(Actio ...
最近看到《设计之禅》的装饰器模式,特用C++实现了一遍,发现有些有意思的东西需要探究一下。UML类图:     一. C++实现 #include <stdio.h> /// Base class Component { public: virtual ~Component(){} virtual int operate() = 0; }; / ...
  一. Java volatile volatile关键字可保证变量可见性,但是无法保证原子性,下面演示多线程修改共享变量Count场景。    /** * 共享变量在多线程下修改测试 */ public class NonAtomicTest extends Thread { public static volatile int count = 0; public void increase(){ count++; } public void run(){ for(int i=0; i<10000; i++){ in ...
    C++ 符号还原(Demangling),windows/linux平台需分别处理。   #include <typeinfo> #include <cxxabi.h> class Foo{}; #ifndef __GNUC__ // vc const char *real_name = typeid(Foo*[10]).name(); #else // linux char *real_name = abi::__cxa_demangle(typeid(Foo*[10]).name(), NULL, NULL, NULL); ...
  Linux 内核目录/proc/sys/net 提供了很多网络协议栈配置参数,可控制网络协议栈行为,优化系统性能。    一. 基础命令 sysctl -a 显示内核参数 $ sysctl net.core.somaxconn; $ sysctl -w net.core.somaxconn=32768 $ echo 32768 > /proc/sys/net/core/somaxconn $ $ vi /etc/sysctl.conf  $ sysctl -p # 使参数生效   二. TCP/IP网络参数 连接参数 /proc/sys/netc ...

Java Lambda

    博客分类:
  • java
  该语法糖在jvm脚本语言Groovy/Scale已有很好的支持,Java从8.0才开始支持该特性。   /** * 基础Lambda表达式 * */ public static void testLambda() { String[] ss = { "hello", "world", "sun" }; List<String> list = Arrays.asList(ss); // 接口作为回调函数,C: typdef int (*func)(int,int) AddServ ...
  Spring框架两大核心原理:AOP和IOC,IOC Inversion of control 用来解决依赖关系,通过工厂模式实现。 AOP Aspect of programming 通过动态代理实现。   1. 定义接口 /** * 用户服务接口 * @author lingsun * */ public interface UserService { public String getName(); public Integer getAge(); } /** * 用户服务实现类 * @author sunling3 * ...
Global site tag (gtag.js) - Google Analytics